This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva-redback-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 6ffec22  Fixing most tests for common configuration
6ffec22 is described below

commit 6ffec226b80b28a8ba56eb0fc9120bf236b5f153
Author: Martin Stockhammer <[email protected]>
AuthorDate: Thu Feb 14 22:29:49 2019 +0100

    Fixing most tests for common configuration
---
 .../redback-common-configuration/pom.xml           |   4 +-
 .../redback-common-configuration-acc2/pom.xml      |   3 +
 .../config/acc2/CommonsConfigurationRegistry.java  | 424 ++++++++++++---------
 .../acc2/CommonsConfigurationRegistryTest.java     |  21 +-
 .../src/test/resources/spring-context.xml          |   8 +-
 .../redback-common-configuration-api/pom.xml       |   2 +
 .../redback/common/config/api/ConfigRegistry.java  |   2 +-
 7 files changed, 273 insertions(+), 191 deletions(-)

diff --git a/redback-common/redback-common-configuration/pom.xml 
b/redback-common/redback-common-configuration/pom.xml
index f1e8cf3..3a7fda1 100644
--- a/redback-common/redback-common-configuration/pom.xml
+++ b/redback-common/redback-common-configuration/pom.xml
@@ -30,7 +30,9 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>redback-common-configuration</artifactId>
+  <name>Redback :: Common Configuration</name>
   <packaging>pom</packaging>
+
   <modules>
     <module>redback-common-configuration-api</module>
     <module>redback-common-configuration-acc2</module>
@@ -42,7 +44,7 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
-          <skipTests>true</skipTests>
+          <skipTests>false</skipTests>
         </configuration>
       </plugin>
     </plugins>
diff --git 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/pom.xml
 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/pom.xml
index 57db019..0073e84 100644
--- 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/pom.xml
+++ 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/pom.xml
@@ -30,6 +30,8 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>redback-common-configuration-acc2</artifactId>
+  <name>Redback :: Common Configuration - Apache Commons Configuration 2</name>
+  <description>Implementation of Common Configuration API based on apache 
commons configuration version 2.</description>
 
   <dependencies>
     <dependency>
@@ -52,6 +54,7 @@
       <groupId>commons-beanutils</groupId>
       <artifactId>commons-beanutils</artifactId>
     </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
diff --git 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/main/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistry.java
 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/main/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistry.java
index 869a11e..910f4fe 100644
--- 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/main/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistry.java
+++ 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/main/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistry.java
@@ -23,6 +23,7 @@ import 
org.apache.archiva.redback.common.config.api.ConfigRegistry;
 import org.apache.archiva.redback.common.config.api.RegistryException;
 import org.apache.archiva.redback.common.config.api.RegistryListener;
 import org.apache.commons.configuration2.*;
+import org.apache.commons.configuration2.builder.ConfigurationBuilder;
 import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
 import 
org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder;
 import org.apache.commons.configuration2.builder.fluent.Parameters;
@@ -33,8 +34,8 @@ import 
org.apache.commons.configuration2.interpol.DefaultLookups;
 import org.apache.commons.configuration2.interpol.InterpolatorSpecification;
 import org.apache.commons.configuration2.io.ClasspathLocationStrategy;
 import org.apache.commons.configuration2.io.FileHandler;
+import org.apache.commons.configuration2.io.FileLocatorUtils;
 import org.apache.commons.configuration2.io.FileSystem;
-import org.apache.commons.configuration2.io.FileSystemLocationStrategy;
 import org.apache.commons.configuration2.tree.DefaultExpressionEngine;
 import org.apache.commons.configuration2.tree.DefaultExpressionEngineSymbols;
 import org.apache.commons.configuration2.tree.NodeCombiner;
@@ -51,97 +52,116 @@ import java.net.URL;
 import java.nio.file.Path;
 import java.util.*;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 
 /**
  * Implementation of the registry component using
- * <a href="http://commons.apache.org/commons/configuration";>Commons 
Configuration</a>. The use of Commons Configuration
- * enables a variety of sources to be used, including XML files, properties, 
JNDI, JDBC, etc.
+ * <a 
href="https://commons.apache.org/proper/commons-configuration/index.html";>Commons
 Configuration 2</a>.
+ * The use of Commons Configuration enables a variety of sources to be used, 
including XML files, properties, JNDI, JDBC, etc.
  * <p/>
- * The component can be configured using the {@link #properties} configuration 
item, the content of which should take
+ * The component can be configured using the {@link 
#combinedConfigurationDefinition} configuration item, the content of which 
should take
  * the format of an input to the Commons Configuration
  * <a 
href="http://commons.apache.org/commons/configuration/howto_configurationbuilder.html";>configuration
  * builder</a>.
  */
-@Service( "acc2-configuration" )
+@Service("acc2-configuration")
 public class CommonsConfigurationRegistry
-    implements ConfigRegistry
+        implements ConfigRegistry
 {
     /**
      * The combined configuration instance that houses the registry.
      */
     private Configuration configuration;
 
-    private Logger logger = LoggerFactory.getLogger( getClass() );
+
+    private ConfigurationBuilder<? extends Configuration> configurationBuilder;
+    boolean combined = true;
+    private Map<String, ConfigurationBuilder<? extends Configuration>> 
builderMap = new HashMap<>( );
+
+    private Logger logger = LoggerFactory.getLogger( getClass( ) );
 
     private String propertyDelimiter = ".";
 
+
     /**
      * The configuration properties for the registry. This should take the 
format of an input to the Commons
      * Configuration
-     * <a 
href="http://commons.apache.org/configuration/howto_configurationbuilder.html";>configuration
+     * <a 
href="https://commons.apache.org/proper/commons-configuration/userguide/howto_combinedbuilder.html#The_configuration_definition_file";>configuration
      * builder</a>.
      */
-    private String properties;
+    private String combinedConfigurationDefinition;
 
 
     public CommonsConfigurationRegistry()
     {
-        // default constructor
-        logger.debug( "empty constructor" );
+        // Default constructor
     }
 
-    public CommonsConfigurationRegistry( Configuration configuration )
+    public CommonsConfigurationRegistry(CombinedConfiguration configuration, 
ConfigurationBuilder<? extends Configuration> configurationBuilder)
     {
         if ( configuration == null )
         {
             throw new NullPointerException( "configuration can not be null" );
         }
+        if ( configurationBuilder == null )
+        {
+            throw new NullPointerException( "configuration builder cannot be 
null for a combined configuration" );
+        }
+        this.combined = true;
+        this.configuration = configuration;
+        this.configurationBuilder = configurationBuilder;
+    }
 
+    public CommonsConfigurationRegistry(Configuration configuration, 
ConfigurationBuilder<? extends Configuration> configurationBuilder)
+    {
+        if ( configuration == null )
+        {
+            throw new NullPointerException( "configuration can not be null" );
+        }
         this.configuration = configuration;
+        this.configurationBuilder = configurationBuilder;
     }
 
     public String dump()
     {
-        StringBuilder buffer = new StringBuilder();
+        StringBuilder buffer = new StringBuilder( );
         buffer.append( "Configuration Dump." );
-        for ( Iterator i = configuration.getKeys(); i.hasNext(); )
+        for ( Iterator i = configuration.getKeys( ); i.hasNext( ); )
         {
-            String key = (String) i.next();
+            String key = ( String ) i.next( );
             Object value = configuration.getProperty( key );
             buffer.append( "\n\"" ).append( key ).append( "\" = \"" ).append( 
value ).append( "\"" );
         }
-        return buffer.toString();
+        return buffer.toString( );
     }
 
     public boolean isEmpty()
     {
-        return configuration.isEmpty();
+        return configuration.isEmpty( );
     }
 
-    public ConfigRegistry getSubset( String key )
+    public ConfigRegistry getSubset(String key)
     {
-        return new CommonsConfigurationRegistry( configuration.subset( key ) );
+        return new CommonsConfigurationRegistry( configuration.subset( key ), 
configurationBuilder );
     }
 
-    public List<String> getList( String key )
+    public List<String> getList(String key)
     {
-        return configuration.getList(String.class,  key );
+        List<String> result = configuration.getList( String.class, key );
+        return result == null ? new ArrayList<>( ) : result;
     }
 
-    public List<ConfigRegistry> getSubsetList( String key )
+    public List<ConfigRegistry> getSubsetList(String key)
     {
-        List<ConfigRegistry> subsets = new ArrayList<>();
+        List<ConfigRegistry> subsets = new ArrayList<>( );
 
         boolean done = false;
         do
         {
-            ConfigRegistry registry = getSubset( key + "(" + subsets.size() + 
")" );
-            if ( !registry.isEmpty() )
+            ConfigRegistry registry = getSubset( key + "(" + subsets.size( ) + 
")" );
+            if ( !registry.isEmpty( ) )
             {
                 subsets.add( registry );
-            }
-            else
+            } else
             {
                 done = true;
             }
@@ -152,57 +172,88 @@ public class CommonsConfigurationRegistry
     }
 
     @Override
-    public ConfigRegistry getSource( String name )
+    public ConfigRegistry getPartOfCombined(String name)
     {
+        if ( combined )
+        {
+            CombinedConfiguration config = ( CombinedConfiguration ) 
configuration;
+            Configuration newCfg = config.getConfiguration( name );
+            ConfigurationBuilder<? extends Configuration> cfgBuilder = null;
+            try
+            {
+                if ( builderMap.containsKey( name ) )
+                {
+                    cfgBuilder = builderMap.get( name );
+                } else
+                {
+                    cfgBuilder = configurationBuilder == null ? null :
+                            (( CombinedConfigurationBuilder ) 
configurationBuilder).getNamedBuilder( name );
+                    builderMap.put( name, cfgBuilder );
+                }
+            }
+            catch ( ConfigurationException e )
+            {
+                logger.error( "Could not retrieve configuration builder: " + 
e.getMessage( ) );
+            }
+            return newCfg == null ? null : new CommonsConfigurationRegistry( 
newCfg, cfgBuilder );
+        }
         return null;
     }
 
-    public Map<String,String> getProperties( String key )
+    public Map<String, String> getProperties(String key)
     {
         Configuration configuration = this.configuration.subset( key );
 
-        Map<String,String> properties = new TreeMap<>();
+        Map<String, String> properties = new TreeMap<>( );
         Iterator<String> cfgIter = configuration.getKeys( );
         String property;
-        while ( cfgIter.hasNext() )
+        while ( cfgIter.hasNext( ) )
         {
-            property = cfgIter.next();
+            property = cfgIter.next( );
             List<String> l = configuration.getList( String.class, property );
-            String value = String.join(",", l);
+            String value = String.join( ",", l );
             properties.put( property, value );
         }
         return properties;
     }
 
     public void save()
-        throws RegistryException
+            throws RegistryException
     {
-        if ( configuration instanceof FileBasedConfiguration  )
+        if ( configuration instanceof FileBasedConfiguration )
         {
-            FileBasedConfiguration fileConfiguration = 
(FileBasedConfiguration) configuration;
+            FileBasedConfiguration fileConfiguration = ( 
FileBasedConfiguration ) configuration;
+            FileHandler fileHandler;
+            if ( configurationBuilder != null && configurationBuilder 
instanceof FileBasedConfigurationBuilder )
+            {
+                FileBasedConfigurationBuilder cfgBuilder = ( 
FileBasedConfigurationBuilder ) configurationBuilder;
+                fileHandler = cfgBuilder.getFileHandler( );
+            } else
+            {
+                fileHandler = new FileHandler( fileConfiguration );
+            }
             try
             {
-                new FileHandler( fileConfiguration ).save();
+                fileHandler.save( );
             }
             catch ( ConfigurationException e )
             {
-                throw new RegistryException( e.getMessage(), e );
+                throw new RegistryException( e.getMessage( ), e );
             }
-        }
-        else
+        } else
         {
             throw new RegistryException( "Can only save file-based 
configurations" );
         }
     }
 
     @Override
-    public void registerChangeListener( RegistryListener listener, Pattern... 
filter )
+    public void registerChangeListener(RegistryListener listener, Pattern... 
filter)
     {
 
     }
 
     @Override
-    public boolean unregisterChangeListener( RegistryListener listener )
+    public boolean unregisterChangeListener(RegistryListener listener)
     {
         return false;
     }
@@ -210,18 +261,17 @@ public class CommonsConfigurationRegistry
 
     public Collection<String> getKeys()
     {
-        Set<String> keys = new HashSet<String>();
+        Set<String> keys = new HashSet<String>( );
 
-        for ( Iterator<String> i = configuration.getKeys(); i.hasNext(); )
+        for ( Iterator<String> i = configuration.getKeys( ); i.hasNext( ); )
         {
-            String key = i.next();
+            String key = i.next( );
 
             int index = key.indexOf( '.' );
             if ( index < 0 )
             {
                 keys.add( key );
-            }
-            else
+            } else
             {
                 keys.add( key.substring( 0, index ) );
             }
@@ -232,255 +282,270 @@ public class CommonsConfigurationRegistry
 
     public Collection getFullKeys()
     {
-        Set<String> keys = new HashSet<String>();
+        Set<String> keys = new HashSet<String>( );
 
-        for ( Iterator<String> i = configuration.getKeys(); i.hasNext(); )
+        for ( Iterator<String> i = configuration.getKeys( ); i.hasNext( ); )
         {
-            keys.add( i.next() );
+            keys.add( i.next( ) );
         }
 
         return keys;
     }
 
-    public void remove( String key )
+    public void remove(String key)
     {
         configuration.clearProperty( key );
     }
 
-    public void removeSubset( String key )
+    public void removeSubset(String key)
     {
         // create temporary list since removing a key will modify the iterator 
from configuration
-        List keys = new ArrayList();
-        for ( Iterator i = configuration.getKeys( key ); i.hasNext(); )
+        List keys = new ArrayList( );
+        for ( Iterator i = configuration.getKeys( key ); i.hasNext( ); )
         {
-            keys.add( i.next() );
+            keys.add( i.next( ) );
         }
 
-        for ( Iterator i = keys.iterator(); i.hasNext(); )
+        for ( Iterator i = keys.iterator( ); i.hasNext( ); )
         {
-            configuration.clearProperty( (String) i.next() );
+            configuration.clearProperty( ( String ) i.next( ) );
         }
     }
 
-    public String getString( String key )
+    public String getString(String key)
     {
         return configuration.getString( key );
     }
 
-    public String getString( String key, String defaultValue )
+    public String getString(String key, String defaultValue)
     {
         return configuration.getString( key, defaultValue );
     }
 
-    public void setString( String key, String value )
+    public void setString(String key, String value)
     {
         configuration.setProperty( key, value );
     }
 
-    public int getInt( String key )
+    public int getInt(String key)
     {
         return configuration.getInt( key );
     }
 
-    public int getInt( String key, int defaultValue )
+    public int getInt(String key, int defaultValue)
     {
         return configuration.getInt( key, defaultValue );
     }
 
-    public void setInt( String key, int value )
+    public void setInt(String key, int value)
     {
         configuration.setProperty( key, Integer.valueOf( value ) );
     }
 
-    public boolean getBoolean( String key )
+    public boolean getBoolean(String key)
     {
         return configuration.getBoolean( key );
     }
 
-    public boolean getBoolean( String key, boolean defaultValue )
+    public boolean getBoolean(String key, boolean defaultValue)
     {
         return configuration.getBoolean( key, defaultValue );
     }
 
-    public void setBoolean( String key, boolean value )
+    public void setBoolean(String key, boolean value)
     {
         configuration.setProperty( key, Boolean.valueOf( value ) );
     }
 
-    public void addConfigurationFromResource( String name, String resource )
-        throws RegistryException
+    public void addConfigurationFromResource(String name, String resource)
+            throws RegistryException
     {
         addConfigurationFromResource( name, resource, null );
     }
 
-    public void addConfigurationFromResource( String name, String resource, 
String prefix )
-        throws RegistryException
+    public void addConfigurationFromResource(String name, String resource, 
String prefix)
+            throws RegistryException
     {
-        if (configuration instanceof CombinedConfiguration)
+        if ( configuration instanceof CombinedConfiguration )
         {
             String atPrefix = StringUtils.isEmpty( prefix ) ? null : prefix;
-            CombinedConfiguration configuration = (CombinedConfiguration) 
this.configuration;
+            CombinedConfiguration configuration = ( CombinedConfiguration ) 
this.configuration;
             if ( resource.endsWith( ".properties" ) )
             {
                 try
                 {
                     logger.debug( "Loading properties configuration from 
classloader resource: {}", resource );
                     FileBasedConfigurationBuilder<PropertiesConfiguration> 
builder = new FileBasedConfigurationBuilder<>( PropertiesConfiguration.class )
-                        .configure( new Parameters().properties()
-                            .setLocationStrategy( new 
ClasspathLocationStrategy() )
-                            .setFileName( resource ) );
-                    configuration.addConfiguration( builder.getConfiguration() 
, name, atPrefix );
+                            .configure( new Parameters( ).properties( )
+                                    .setLocationStrategy( new 
ClasspathLocationStrategy( ) )
+                                    .setFileName( resource ) );
+                    builderMap.put( name, builder );
+                    configuration.addConfiguration( builder.getConfiguration( 
), name, atPrefix );
                 }
                 catch ( ConfigurationException e )
                 {
                     throw new RegistryException(
-                        "Unable to add configuration from resource '" + 
resource + "': " + e.getMessage( ), e );
+                            "Unable to add configuration from resource '" + 
resource + "': " + e.getMessage( ), e );
                 }
-            }
-            else if ( resource.endsWith( ".xml" ) )
+            } else if ( resource.endsWith( ".xml" ) )
             {
                 try
                 {
                     logger.debug( "Loading XML configuration from classloader 
resource: {}", resource );
                     FileBasedConfigurationBuilder<XMLConfiguration> builder = 
new FileBasedConfigurationBuilder<>( XMLConfiguration.class )
-                        .configure( new Parameters().xml()
-                            .setLocationStrategy( new 
ClasspathLocationStrategy() )
-                            .setFileName( resource ) );
-                    configuration.addConfiguration( 
builder.getConfiguration(), name, atPrefix );
+                            .configure( new Parameters( ).xml( )
+                                    .setLocationStrategy( new 
ClasspathLocationStrategy( ) )
+                                    .setFileName( resource ) );
+                    builderMap.put( name, builder );
+                    configuration.addConfiguration( builder.getConfiguration( 
), name, atPrefix );
                 }
                 catch ( ConfigurationException e )
                 {
                     throw new RegistryException(
-                        "Unable to add configuration from resource '" + 
resource + "': " + e.getMessage( ), e );
+                            "Unable to add configuration from resource '" + 
resource + "': " + e.getMessage( ), e );
                 }
-            }
-            else
+            } else
             {
                 throw new RegistryException(
-                    "Unable to add configuration from resource '" + resource + 
"': unrecognised type" );
+                        "Unable to add configuration from resource '" + 
resource + "': unrecognised type" );
             }
-        } else {
+        } else
+        {
             throw new RegistryException( "The underlying configuration object 
is not a combined configuration " );
         }
     }
 
     @Override
-    public void addConfigurationFromFile( String name, Path file ) throws 
RegistryException
+    public void addConfigurationFromFile(String name, Path file) throws 
RegistryException
     {
         addConfigurationFromFile( name, file, "" );
     }
 
-    public void addConfigurationFromFile( String name, Path file, String 
prefix )
-        throws RegistryException
+    public void addConfigurationFromFile(String name, Path file, String prefix)
+            throws RegistryException
     {
-        if (this.configuration instanceof CombinedConfiguration)
+        if ( this.configuration instanceof CombinedConfiguration )
         {
             String atPrefix = StringUtils.isEmpty( prefix ) ? null : prefix;
-            CombinedConfiguration configuration = (CombinedConfiguration) 
this.configuration;
-            String fileName = file.getFileName().toString();
+            CombinedConfiguration configuration = ( CombinedConfiguration ) 
this.configuration;
+            String fileName = file.getFileName( ).toString( );
             if ( fileName.endsWith( ".properties" ) )
             {
                 try
                 {
                     logger.debug( "Loading properties configuration from file: 
{}", file );
                     FileBasedConfigurationBuilder<PropertiesConfiguration> 
builder = new FileBasedConfigurationBuilder<>( PropertiesConfiguration.class )
-                        .configure( new Parameters().properties()
-                            .setLocationStrategy( new 
FileSystemLocationStrategy() )
-                            .setFile( file.toFile() ) );
-                    configuration.addConfiguration( builder.getConfiguration() 
, name, atPrefix );
+                            .configure( new Parameters( ).properties( )
+                                    .setFileSystem( 
FileLocatorUtils.DEFAULT_FILE_SYSTEM )
+                                    .setLocationStrategy( 
FileLocatorUtils.DEFAULT_LOCATION_STRATEGY )
+                                    .setFile( file.toFile( ) ) );
+                    // builder is needed for save
+                    builderMap.put( name, builder );
+                    configuration.addConfiguration( builder.getConfiguration( 
), name, atPrefix );
                 }
                 catch ( ConfigurationException e )
                 {
                     throw new RegistryException(
-                        "Unable to add configuration from file '" + 
file.getFileName( ) + "': " + e.getMessage( ), e );
+                            "Unable to add configuration from file '" + 
file.getFileName( ) + "': " + e.getMessage( ), e );
                 }
-            }
-            else if ( fileName.endsWith( ".xml" ) )
+            } else if ( fileName.endsWith( ".xml" ) )
             {
                 try
                 {
                     logger.debug( "Loading XML configuration from file: {}", 
file );
                     FileBasedConfigurationBuilder<XMLConfiguration> builder = 
new FileBasedConfigurationBuilder<>( XMLConfiguration.class )
-                        .configure( new Parameters().xml()
-                            .setLocationStrategy( new 
ClasspathLocationStrategy() )
-                            .setFile( file.toFile()) );
-                    configuration.addConfiguration( 
builder.getConfiguration(), name, atPrefix );
+                            .configure( new Parameters( ).xml( )
+                                    .setFileSystem( 
FileLocatorUtils.DEFAULT_FILE_SYSTEM )
+                                    .setLocationStrategy( 
FileLocatorUtils.DEFAULT_LOCATION_STRATEGY )
+                                    .setFile( file.toFile( ) ) );
+                    builderMap.put( name, builder );
+                    configuration.addConfiguration( builder.getConfiguration( 
), name, atPrefix );
                 }
                 catch ( ConfigurationException e )
                 {
                     throw new RegistryException(
-                        "Unable to add configuration from file '" + 
file.getFileName( ) + "': " + e.getMessage( ), e );
+                            "Unable to add configuration from file '" + 
file.getFileName( ) + "': " + e.getMessage( ), e );
                 }
-            }
-            else
+            } else
             {
                 throw new RegistryException(
-                    "Unable to add configuration from file '" + 
file.getFileName( ) + "': unrecognised type" );
+                        "Unable to add configuration from file '" + 
file.getFileName( ) + "': unrecognised type" );
             }
-        } else {
+        } else
+        {
             throw new RegistryException( "The underlying configuration is not 
a combined configuration object." );
         }
     }
 
-    class StringFileSystem extends FileSystem {
+    /**
+     * This is a dummy FileSystem needed to load the CombinedConfiguration 
declaration from a String.
+     */
+    class StringFileSystem extends FileSystem
+    {
 
         String content;
         String encoding = "UTF-8";
 
-        StringFileSystem(String content) {
+        StringFileSystem(String content)
+        {
+            this.content = content;
+        }
+
+        StringFileSystem(String encoding, String content) {
+            this.encoding = encoding;
             this.content = content;
         }
 
         @Override
-        public InputStream getInputStream( URL url ) throws 
ConfigurationException
+        public InputStream getInputStream(URL url) throws 
ConfigurationException
         {
             try
             {
-                return new ByteArrayInputStream( content.getBytes(encoding) );
+                return new ByteArrayInputStream( content.getBytes( encoding ) 
);
             }
             catch ( UnsupportedEncodingException e )
             {
-                logger.error("Bad encoding for FileSystem");
+                logger.error( "Bad encoding for FileSystem" );
                 throw new ConfigurationException( "Bad encoding specified" );
             }
         }
 
         @Override
-        public OutputStream getOutputStream( URL url ) throws 
ConfigurationException
+        public OutputStream getOutputStream(URL url) throws 
ConfigurationException
         {
             return new ByteArrayOutputStream( 0 );
         }
 
         @Override
-        public OutputStream getOutputStream( File file ) throws 
ConfigurationException
+        public OutputStream getOutputStream(File file) throws 
ConfigurationException
         {
             return new ByteArrayOutputStream( 0 );
         }
 
         @Override
-        public String getPath( File file, URL url, String basePath, String 
fileName )
+        public String getPath(File file, URL url, String basePath, String 
fileName)
         {
-            return basePath+"/"+fileName;
+            return basePath + "/" + fileName;
         }
 
         @Override
-        public String getBasePath( String path )
+        public String getBasePath(String path)
         {
             return path;
         }
 
         @Override
-        public String getFileName( String path )
+        public String getFileName(String path)
         {
             return path;
         }
 
         @Override
-        public URL locateFromURL( String basePath, String fileName )
+        public URL locateFromURL(String basePath, String fileName)
         {
             try
             {
-                return new URL("file://"+getPath(null, null, basePath, 
fileName));
+                return new URL( "file://" + getPath( null, null, basePath, 
fileName ) );
             }
             catch ( MalformedURLException e )
             {
@@ -490,11 +555,11 @@ public class CommonsConfigurationRegistry
         }
 
         @Override
-        public URL getURL( String basePath, String fileName ) throws 
MalformedURLException
+        public URL getURL(String basePath, String fileName) throws 
MalformedURLException
         {
             try
             {
-                return new URL("file://"+getPath(null, null, basePath, 
fileName));
+                return new URL( "file://" + getPath( null, null, basePath, 
fileName ) );
             }
             catch ( MalformedURLException e )
             {
@@ -507,76 +572,74 @@ public class CommonsConfigurationRegistry
 
     @PostConstruct
     public void initialize()
-        throws RegistryException
+            throws RegistryException
     {
         try
         {
             CombinedConfiguration configuration;
-            if ( StringUtils.isNotBlank( properties ) )
+            if ( StringUtils.isNotBlank( combinedConfigurationDefinition ) )
             {
-                System.out.println("Configuration");
-                System.out.println(properties);
-                    Parameters params = new Parameters();
-                    DefaultExpressionEngineSymbols symbols = new 
DefaultExpressionEngineSymbols.Builder(DefaultExpressionEngineSymbols.DEFAULT_SYMBOLS
 )
+
+                // This part is mainly for backwards compatibility.
+                // It allows to use system properties in the XML declaration.
+                Parameters params = new Parameters( );
+                DefaultExpressionEngineSymbols symbols = new 
DefaultExpressionEngineSymbols.Builder( 
DefaultExpressionEngineSymbols.DEFAULT_SYMBOLS )
                         .setPropertyDelimiter( propertyDelimiter )
                         .setIndexStart( "(" )
                         .setIndexEnd( ")" )
-                        .setEscapedDelimiter( "\\"+propertyDelimiter )
-                        . create( );
-                    DefaultExpressionEngine expressionEngine = new 
DefaultExpressionEngine( symbols );
-                    ConfigurationInterpolator interpolator = 
ConfigurationInterpolator.fromSpecification( new 
InterpolatorSpecification.Builder().withDefaultLookup( 
DefaultLookups.SYSTEM_PROPERTIES.getLookup() ).create() );
-                    
System.out.println(interpolator.getDefaultLookups().stream( ).map(p -> 
p.toString()).collect( Collectors.joining( ",")));
-                    String interpolatedProps = interpolator.interpolate( 
properties ).toString();
-                    logger.debug( "Loading configuration into 
commons-configuration, xml {}", interpolatedProps );
-                    FileSystem fs = new StringFileSystem( interpolatedProps );
-                    FileBasedConfigurationBuilder<XMLConfiguration> cfgBuilder 
=
+                        .setEscapedDelimiter( "\\" + propertyDelimiter )
+                        .create( );
+                DefaultExpressionEngine expressionEngine = new 
DefaultExpressionEngine( symbols );
+                ConfigurationInterpolator interpolator = 
ConfigurationInterpolator.fromSpecification( new 
InterpolatorSpecification.Builder( ).withDefaultLookup( 
DefaultLookups.SYSTEM_PROPERTIES.getLookup( ) ).create( ) );
+                String interpolatedProps = interpolator.interpolate( 
combinedConfigurationDefinition ).toString( );
+                logger.debug( "Loading configuration into 
commons-configuration, xml {}", interpolatedProps );
+                // This is the builder configuration for the XML declaration, 
that contains the definition
+                // for the sources that are used for the CombinedConfiguration.
+                FileSystem fs = new StringFileSystem( interpolatedProps );
+                FileBasedConfigurationBuilder<XMLConfiguration> cfgBuilder =
                         new FileBasedConfigurationBuilder<>(
-                            XMLConfiguration.class)
-                            .configure(params.xml()
-                                .setInterpolator( interpolator )
-                                .setFileSystem( fs )
-                                .setFileName( "config.xml")
-                                .setListDelimiterHandler(
-                                    new DefaultListDelimiterHandler(','))
-                                .setExpressionEngine( expressionEngine )
-                                .setThrowExceptionOnMissing(false));
-
-                    CombinedConfigurationBuilder builder = new 
CombinedConfigurationBuilder().
-                        configure(params.combined().setDefinitionBuilder( 
cfgBuilder ));
-
-                    configuration = builder.getConfiguration();
-
-                    // interpolation as plexus did it before
-
-                    //configuration.set
-            }
-            else
+                                XMLConfiguration.class )
+                                .configure( params.xml( )
+                                        .setInterpolator( interpolator )
+                                        .setFileSystem( fs )
+                                        .setFileName( "config.xml" )
+                                        .setListDelimiterHandler(
+                                                new 
DefaultListDelimiterHandler( ',' ) )
+                                        .setExpressionEngine( expressionEngine 
)
+                                        .setThrowExceptionOnMissing( false ) );
+
+                CombinedConfigurationBuilder builder = new 
CombinedConfigurationBuilder( ).
+                        configure( params.combined( ).setDefinitionBuilder( 
cfgBuilder ) );
+                // The builder is needed later for saving of the file parts in 
the combined configuration.
+                this.configurationBuilder = builder;
+                configuration = builder.getConfiguration( );
+
+
+            } else
             {
                 logger.debug( "Creating a default configuration - no 
configuration was provided" );
-                NodeCombiner combiner = new UnionCombiner();
-                configuration = new CombinedConfiguration(combiner);
+                NodeCombiner combiner = new UnionCombiner( );
+                configuration = new CombinedConfiguration( combiner );
+                this.configurationBuilder = null;
             }
 
-            configuration.addConfiguration( new SystemConfiguration(), 
"SystemProperties" );
+            // In the end, we add the system properties to the combined 
configuration
+            configuration.addConfiguration( new SystemConfiguration( ), 
"SystemProperties" );
 
             this.configuration = configuration;
         }
         catch ( ConfigurationException e )
         {
-            throw new RuntimeException( e.getMessage(), e );
+            logger.error("Fatal error, while reading the configuration 
definition: "+e.getMessage());
+            logger.error("The definition was:");
+            logger.error( combinedConfigurationDefinition );
+            throw new RuntimeException( e.getMessage( ), e );
         }
     }
 
-    public void setProperties( String properties )
-    {
-        this.properties = properties;
-    }
-
-    public ConfigRegistry getSection( String name )
+    public void setCombinedConfigurationDefinition(String 
combinedConfigurationDefinition)
     {
-        CombinedConfiguration combinedConfiguration = (CombinedConfiguration) 
configuration;
-        Configuration configuration = combinedConfiguration.getConfiguration( 
name );
-        return configuration == null ? null : new 
CommonsConfigurationRegistry( configuration );
+        this.combinedConfigurationDefinition = combinedConfigurationDefinition;
     }
 
     public String getPropertyDelimiter()
@@ -584,8 +647,19 @@ public class CommonsConfigurationRegistry
         return propertyDelimiter;
     }
 
-    public void setPropertyDelimiter( String propertyDelimiter )
+    public void setPropertyDelimiter(String propertyDelimiter)
     {
         this.propertyDelimiter = propertyDelimiter;
     }
+
+
+    public ConfigurationBuilder<? extends Configuration> 
getConfigurationBuilder()
+    {
+        return configurationBuilder;
+    }
+
+    public void setConfigurationBuilder(ConfigurationBuilder<? extends 
Configuration> configurationBuilder)
+    {
+        this.configurationBuilder = configurationBuilder;
+    }
 }
diff --git 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistryTest.java
 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistryTest.java
index a1c4e59..df54639 100644
--- 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistryTest.java
+++ 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/java/org/apache/archiva/redback/common/config/acc2/CommonsConfigurationRegistryTest.java
@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -151,7 +152,6 @@ public class CommonsConfigurationRegistryTest
         registry = getRegistry( "default" );
 
         registry.addConfigurationFromFile( "test.xml", Paths.get( 
"src/test/resources/test.xml" ) );
-        System.out.println(registry.dump());
         assertEquals( "Check system property default", System.getProperty( 
"user.dir" ),
                       registry.getString( "user.dir" ) );
         assertEquals( "Check other properties are loaded", "foo", 
registry.getString( "test.value" ) );
@@ -292,9 +292,9 @@ public class CommonsConfigurationRegistryTest
     public void testGetSection()
         throws Exception
     {
-        registry = getRegistry( "builder" );
-
-        ConfigRegistry registry = this.registry.getSource( "properties" );
+        this.registry = getRegistry( "builder" );
+        ConfigRegistry registry = this.registry.getPartOfCombined( 
"properties" );
+        assertNotNull(registry);
         assertNull( registry.getString( "test.value" ) );
         assertEquals( "baz", registry.getString( "foo.bar" ) );
     }
@@ -304,8 +304,8 @@ public class CommonsConfigurationRegistryTest
         throws Exception
     {
         registry = getRegistry( "builder" );
-
-        ConfigRegistry registry = this.registry.getSource( "properties" );
+        assertNotNull(registry);
+        ConfigRegistry registry = this.registry.getPartOfCombined( 
"properties" );
         assertEquals( "baz", registry.getString( "foo.bar" ) );
         registry.remove( "foo.bar" );
         assertNull( registry.getString( "foo.bar" ) );
@@ -316,11 +316,12 @@ public class CommonsConfigurationRegistryTest
         throws Exception
     {
         registry = getRegistry( "builder" );
+        assertNotNull(registry);
 
         registry.removeSubset( "strings" );
         assertEquals( Collections.EMPTY_LIST, registry.getList( 
"strings.string" ) );
 
-        ConfigRegistry registry = this.registry.getSource( "properties" );
+        ConfigRegistry registry = this.registry.getPartOfCombined( 
"properties" );
         assertEquals( "baz", registry.getString( "foo.bar" ) );
         registry.remove( "foo" );
         assertEquals( "baz", registry.getString( "foo.bar" ) );
@@ -347,7 +348,7 @@ public class CommonsConfigurationRegistryTest
     {
         registry = getRegistry( "noForceCreate" );
 
-        assertNull( registry.getSource( "foo" ) );
+        assertNull( registry.getPartOfCombined( "foo" ) );
     }
 
     @Test
@@ -356,11 +357,11 @@ public class CommonsConfigurationRegistryTest
     {
         Path src = Paths.get( "src/test/resources/test-save.xml" );
         Path dest = Paths.get( "target/test-classes/test-save.xml" );
-        Files.copy( src, dest );
+        Files.copy( src, dest, StandardCopyOption.REPLACE_EXISTING );
 
         registry = getRegistry( "test-save" );
 
-        ConfigRegistry registry = this.registry.getSource( 
"org.codehaus.plexus.registry" );
+        ConfigRegistry registry = this.registry.getPartOfCombined( 
"org.codehaus.plexus.registry" );
         assertEquals( "check list elements", Arrays.asList( new String[]{ "1", 
"2", "3" } ),
                       registry.getList( "listElements.listElement" ) );
 
diff --git 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/resources/spring-context.xml
 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/resources/spring-context.xml
index 895ea07..1fd2634 100755
--- 
a/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/resources/spring-context.xml
+++ 
b/redback-common/redback-common-configuration/redback-common-configuration-acc2/src/test/resources/spring-context.xml
@@ -27,7 +27,7 @@
   <alias name="acc2-configuration" alias="default"/>
 
   <bean name="builder" 
class="org.apache.archiva.redback.common.config.acc2.CommonsConfigurationRegistry">
-    <property name="properties">
+    <property name="combinedConfigurationDefinition">
       <value>
         <![CDATA[
           <configuration>
@@ -41,7 +41,7 @@
   </bean>
 
   <bean name="test-save" 
class="org.apache.archiva.redback.common.config.acc2.CommonsConfigurationRegistry">
-    <property name="properties">
+    <property name="combinedConfigurationDefinition">
       <value>
         <![CDATA[
         <configuration>
@@ -75,7 +75,7 @@
   </bean>
 
   <bean name="forceCreate" 
class="org.apache.archiva.redback.common.config.acc2.CommonsConfigurationRegistry">
-    <property name="properties">
+    <property name="combinedConfigurationDefinition">
       <value>
         <![CDATA[
         <configuration>
@@ -87,7 +87,7 @@
   </bean>
 
   <bean name="noForceCreate" 
class="org.apache.archiva.redback.common.config.acc2.CommonsConfigurationRegistry">
-    <property name="properties">
+    <property name="combinedConfigurationDefinition">
       <value>
         <![CDATA[
         <configuration>
diff --git 
a/redback-common/redback-common-configuration/redback-common-configuration-api/pom.xml
 
b/redback-common/redback-common-configuration/redback-common-configuration-api/pom.xml
index 28f88cc..dcab551 100644
--- 
a/redback-common/redback-common-configuration/redback-common-configuration-api/pom.xml
+++ 
b/redback-common/redback-common-configuration/redback-common-configuration-api/pom.xml
@@ -30,6 +30,8 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>redback-common-configuration-api</artifactId>
+  <name>Redback :: Common Configuration API</name>
+  <description>Configuration API used by different modules.</description>
 
 
 </project>
diff --git 
a/redback-common/redback-common-configuration/redback-common-configuration-api/src/main/java/org/apache/archiva/redback/common/config/api/ConfigRegistry.java
 
b/redback-common/redback-common-configuration/redback-common-configuration-api/src/main/java/org/apache/archiva/redback/common/config/api/ConfigRegistry.java
index cba0548..190e728 100644
--- 
a/redback-common/redback-common-configuration/redback-common-configuration-api/src/main/java/org/apache/archiva/redback/common/config/api/ConfigRegistry.java
+++ 
b/redback-common/redback-common-configuration/redback-common-configuration-api/src/main/java/org/apache/archiva/redback/common/config/api/ConfigRegistry.java
@@ -207,7 +207,7 @@ public interface ConfigRegistry
      * @param name The source name of the configuration source.
      * @return the The config registry object that represents this source part.
      */
-    ConfigRegistry getSource( String name );
+    ConfigRegistry getPartOfCombined(String name );
 
     /**
      * Save any changes to the registry since it was loaded.

Reply via email to