SLING-4126 : Provide a mechanism to merge configurations

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1684190 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java b/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
index aa64ed9..cfeea1f 100644
--- a/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
+++ b/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
@@ -147,6 +147,14 @@
      */
     private static void mergeConfiguration(final Configuration baseConfig, final Configuration mergeConfig) {
         // check for merge mode
+        final boolean isNew = baseConfig.getProperties().isEmpty();
+        if ( isNew ) {
+            copyConfigurationProperties(baseConfig, mergeConfig);
+            final Object mode = mergeConfig.getProperties().get(ModelConstants.CFG_UNPROCESSED_MODE);
+            if ( mode != null ) {
+                baseConfig.getProperties().put(ModelConstants.CFG_UNPROCESSED_MODE, mode);
+            }
+        }
         final boolean baseIsRaw = baseConfig.getProperties().get(ModelConstants.CFG_UNPROCESSED) != null;
         final boolean mergeIsRaw = mergeConfig.getProperties().get(ModelConstants.CFG_UNPROCESSED) != null;
         // simplest case, both are raw
diff --git a/src/test/java/org/apache/sling/provisioning/model/U.java b/src/test/java/org/apache/sling/provisioning/model/U.java
index a7924ad..65576de 100644
--- a/src/test/java/org/apache/sling/provisioning/model/U.java
+++ b/src/test/java/org/apache/sling/provisioning/model/U.java
@@ -52,7 +52,7 @@
 
     /** Read the complete model from that names */
     public static Model readCompleteTestModel(final String[] names) throws Exception {
-        Model result = null;
+        final Model result = new Model();
 
         for(final String name : names) {
             final Reader reader = new InputStreamReader(U.class.getResourceAsStream("/" + name), "UTF-8");
@@ -62,11 +62,7 @@
                 if (errors != null ) {
                     throw new Exception("Invalid model at " + name + " : " + errors);
                 }
-                if ( result == null ) {
-                    result = current;
-                } else {
-                    ModelUtility.merge(result, current);
-                }
+                ModelUtility.merge(result, current);
             } finally {
                 reader.close();
             }