Author: oheger
Date: Wed Jun 21 20:01:00 2017
New Revision: 1799505

URL: http://svn.apache.org/viewvc?rev=1799505&view=rev
Log:
[CONFIGURATION-258] Added copy constructors.

Like other hierarchical configurations, JSONConfiguration and
YAMLConfiguration should have a copy constructor.

Modified:
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractYAMLBasedConfiguration.java
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/JSONConfiguration.java
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestJSONConfiguration.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestYAMLConfiguration.java

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractYAMLBasedConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractYAMLBasedConfiguration.java?rev=1799505&r1=1799504&r2=1799505&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractYAMLBasedConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/AbstractYAMLBasedConfiguration.java
 Wed Jun 21 20:01:00 2017
@@ -48,6 +48,19 @@ public class AbstractYAMLBasedConfigurat
     }
 
     /**
+     * Creates a new instance of {@code AbstractYAMLBasedConfiguration} as a
+     * copy of the specified configuration.
+     *
+     * @param c the configuration to be copied
+     */
+    protected AbstractYAMLBasedConfiguration(
+            HierarchicalConfiguration<ImmutableNode> c)
+    {
+        super(c);
+        initLogger(new ConfigurationLogger(getClass()));
+    }
+
+    /**
      * Loads this configuration from the content of the specified map. The data
      * in the map is transformed into a hierarchy of {@link ImmutableNode}
      * objects.

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/JSONConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/JSONConfiguration.java?rev=1799505&r1=1799504&r2=1799505&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/JSONConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/JSONConfiguration.java
 Wed Jun 21 20:01:00 2017
@@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.Ob
 import com.fasterxml.jackson.databind.type.MapType;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.configuration2.io.InputStreamSupport;
+import org.apache.commons.configuration2.tree.ImmutableNode;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -51,6 +52,17 @@ public class JSONConfiguration extends A
         super();
     }
 
+    /**
+     * Creates a new instance of {@code JSONConfiguration} as a copy of the
+     * specified configuration.
+     *
+     * @param c the configuration to be copied
+     */
+    public JSONConfiguration(HierarchicalConfiguration<ImmutableNode> c)
+    {
+        super(c);
+    }
+
     @Override
     public void read(Reader in) throws ConfigurationException
     {

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java?rev=1799505&r1=1799504&r2=1799505&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
 Wed Jun 21 20:01:00 2017
@@ -19,6 +19,7 @@ package org.apache.commons.configuration
 
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.configuration2.io.InputStreamSupport;
+import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.LoaderOptions;
 import org.yaml.snakeyaml.Yaml;
@@ -48,6 +49,17 @@ public class YAMLConfiguration extends A
         super();
     }
 
+    /**
+     * Creates a new instance of {@code YAMLConfiguration} as a copy of the
+     * specified configuration.
+     *
+     * @param c the configuration to be copied
+     */
+    public YAMLConfiguration(HierarchicalConfiguration<ImmutableNode> c)
+    {
+        super(c);
+    }
+
     @Override
     public void read(Reader in) throws ConfigurationException
     {

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestJSONConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestJSONConfiguration.java?rev=1799505&r1=1799504&r2=1799505&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestJSONConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestJSONConfiguration.java
 Wed Jun 21 20:01:00 2017
@@ -130,4 +130,13 @@ public class TestJSONConfiguration
         assertEquals("Elite", jsonConfiguration.getProperty("martin.skill"));
     }
 
+    @Test
+    public void testCopyConstructor()
+    {
+        BaseHierarchicalConfiguration c = new BaseHierarchicalConfiguration();
+        c.addProperty("foo", "bar");
+
+        jsonConfiguration = new JSONConfiguration(c);
+        assertEquals("bar", jsonConfiguration.getString("foo"));
+    }
 }

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestYAMLConfiguration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestYAMLConfiguration.java?rev=1799505&r1=1799504&r2=1799505&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestYAMLConfiguration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestYAMLConfiguration.java
 Wed Jun 21 20:01:00 2017
@@ -110,4 +110,14 @@ public class TestYAMLConfiguration
         assertEquals("Developer", yamlConfiguration.getProperty("martin.job"));
         assertEquals("Elite", yamlConfiguration.getProperty("martin.skill"));
     }
+
+    @Test
+    public void testCopyConstructor()
+    {
+        BaseHierarchicalConfiguration c = new BaseHierarchicalConfiguration();
+        c.addProperty("foo", "bar");
+
+        yamlConfiguration = new YAMLConfiguration(c);
+        assertEquals("bar", yamlConfiguration.getString("foo"));
+    }
 }


Reply via email to