You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:19:31 UTC

[sling-org-apache-sling-caconfig-spi] annotated tag org.apache.sling.caconfig.spi-1.2.0 created (now 373971d)

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

rombert pushed a change to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git.


      at 373971d  (tag)
 tagging 54a51d9873cba1c38e5efa5af1879b02ad1f55ff (commit)
      by Stefan Seifert
      on Tue Dec 13 11:37:25 2016 +0000

- Log -----------------------------------------------------------------
org.apache.sling.caconfig.spi-1.2.0
-----------------------------------------------------------------------

This annotated tag includes the following new commits:

     new 0fdcbf5  SLING-6057 Context-Aware Config: Separate Maven Project for SPI
     new dfa586f  Set svn:ignore
     new c91f045  SLING-6059 simplify resource inheritance to support only inheritance from direct hierachy parent ("option e)")
     new 58e831a  SLING-6152 Context-Aware Config: Config reference should be detected in ContextPathStrategy
     new 0aa1678  SLING-6157 Context-Aware Config: Change java package name to o.a.s.caconfig
     new db3ee06  update to release versions
     new a51fcea  update to release versions
     new e8b5305  fix javadoc errors
     new d7c094c  [maven-release-plugin] prepare release org.apache.sling.caconfig.spi-1.0.0
     new 2e7bdcc  [maven-release-plugin] prepare for next development iteration
     new 47d6d0c  switch to next development version until releases are available on maven central
     new d6eafd1  switch to released versions
     new a962284  update to parent 29
     new a314df0  SLING-6244 : Provide an SPI for influencing the collection inheritance
     new 60fb822  SLING-6244 change method signature of CollectionInheritanceDecider to make it consistent with ConfigurationResourceResolvingStrategy add @NotNull annotations
     new b8dddfa  SLING-6244 picked wrong annotation, use @Nonnull instead
     new 4eff84b  SLING-6244 : Provide an SPI for influencing the collection inheritance
     new 0c50407  SLING-6244 use @CheckForNull for return value
     new 2619918  [maven-release-plugin] prepare release org.apache.sling.caconfig.spi-1.1.0
     new 388ac9a  [maven-release-plugin] prepare for next development iteration
     new 782cc32  [maven-release-plugin] prepare release org.apache.sling.caconfig.spi-1.1.0
     new 32f1d31  [maven-release-plugin] prepare for next development iteration
     new 4e90c74  SLING-6293 refactor property inheritance out of DefaultConfigurationResourceResolvingStrategy and create separate SPI and impl for it *this breaks backward compatibility of package org.apache.sling.caconfig.resource.spi -> major version increase*
     new f4ce0cb  cosmetic: add missing CheckForNull annotation
     new b31b6b6  SLING-6060 Context-Aware Config: Configuration property override providers
     new 01df4f3  SLING-6303 Context-Aware Config: Persisting configuration resource collections with names
     new 0839db1  SLING-6137 provide configuration metadata in ConfigurationManager
     new 3a2a00f  SLING-6333 Context-Aware Config: Allow to mark Config Annotation Classes as "Collections"
     new 4544031  SLING-6338 support nested configuration classes when detecting configuration metadata
     new 8f30ae1  SLING-6338 refactor and fix handling of nested configurations in Management API and ConfigurationResourceResolver
     new b6cb663  SLING-6347 Context-Aware Config: Access to Inheritance Properties in Management API, SPI
     new b068471  SLING-6338 enhance nested configuration handling refactor SPI metadata classes to make them fluent
     new 12e5b6c  SLING-6338 make primitive wrapper type conversion consistent
     new 722a0a4  SLING-6367 Context-Aware Config: Delete Configurations via ConfigurationManager
     new 3fe42c1  update to latest mock versions
     new 393d233  SLING-6373 Context-Aware Config: Allow alternative configuration bucket names
     new 5a4556d  SLING-6338 keep property order
     new 73f2c4c  SLING-6374 Context-Aware Config: Allow to control property order in annotation classes
     new c20d62a  SLING-6367 validate configuration collection item names
     new 8cf38b6  update to osgi-mock,sling-mock release versions
     new fd06a87  update to release version
     new c53d2c8  fix javadoc errors
     new 46d90ed  [maven-release-plugin] prepare release org.apache.sling.caconfig.spi-1.2.0
     new 54a51d9  [maven-release-plugin] copy for tag org.apache.sling.caconfig.spi-1.2.0

The 44 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].

[sling-org-apache-sling-caconfig-spi] 07/23: SLING-6333 Context-Aware Config: Allow to mark Config Annotation Classes as "Collections"

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 3a2a00f805d8de6fd8f31dc6e3fc37217e63d53e
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Fri Nov 25 20:16:25 2016 +0000

    SLING-6333 Context-Aware Config: Allow to mark Config Annotation Classes as "Collections"
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1771375 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                                  |  2 +-
 .../caconfig/spi/metadata/ConfigurationMetadata.java     | 16 ++++++++--------
 .../apache/sling/caconfig/spi/metadata/package-info.java |  2 +-
 .../caconfig/spi/metadata/ConfigurationMetadataTest.java |  6 +++---
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/pom.xml b/pom.xml
index 5009463..e444d82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.caconfig.api</artifactId>
-            <version>1.0.0</version>
+            <version>1.0.1-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
index c5068b1..d9ec56a 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
@@ -30,7 +30,7 @@ import org.osgi.annotation.versioning.ProviderType;
 @ProviderType
 public final class ConfigurationMetadata extends AbstractMetadata {
 
-    private boolean isList;
+    private boolean collection;
     private Map<String,PropertyMetadata<?>> propertyMetadata;
 
     /**
@@ -44,21 +44,21 @@ public final class ConfigurationMetadata extends AbstractMetadata {
      * @return true if configuration is singleton
      */
     public boolean isSingleton() {
-        return !isList;
+        return !collection;
     }
     
     /**
-     * @return true if configuration is list
+     * @return true if configuration is collection
      */
-    public boolean isList() {
-        return isList;
+    public boolean isCollection() {
+        return collection;
     }
 
     /**
-     * @param isList true if configuration is list
+     * @param isList true if configuration is collection
      */
-    public void setList(boolean isList) {
-        this.isList = isList;
+    public void setCollection(boolean value) {
+        this.collection = value;
     }
 
     /**
diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/package-info.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/package-info.java
index e2bee82..a3759e2 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/package-info.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Defining configuration and parameter metadata for the SPI.
  */
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.caconfig.spi.metadata;
diff --git a/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java b/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java
index f2f43de..6477b59 100644
--- a/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java
@@ -35,18 +35,18 @@ public class ConfigurationMetadataTest {
         ConfigurationMetadata underTest = new ConfigurationMetadata("name1");
         assertEquals("name1", underTest.getName());
         assertTrue(underTest.isSingleton());
-        assertFalse(underTest.isList());
+        assertFalse(underTest.isCollection());
         
         underTest.setLabel("label1");
         underTest.setDescription("desc1");
-        underTest.setList(true);
+        underTest.setCollection(true);
         Map<String,String> props = ImmutableMap.of("p1", "v1");
         underTest.setProperties(props);
         
         assertEquals("label1", underTest.getLabel());
         assertEquals("desc1", underTest.getDescription());
         assertFalse(underTest.isSingleton());
-        assertTrue(underTest.isList());
+        assertTrue(underTest.isCollection());
         assertEquals(props, underTest.getProperties());
     }
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 13/23: SLING-6367 Context-Aware Config: Delete Configurations via ConfigurationManager

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 722a0a41ce67242921d150a7c0f2806171459746
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Mon Dec 5 20:51:47 2016 +0000

    SLING-6367 Context-Aware Config: Delete Configurations via ConfigurationManager
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1772800 13f79535-47bb-0310-9956-ffa450edef68
---
 .../caconfig/spi/ConfigurationPersistenceStrategy.java  | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index 909b7e2..cf88798 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -55,9 +55,9 @@ public interface ConfigurationPersistenceStrategy {
      * @param configResourcePath Path to store configuration data to. The resource (and it's parents) may not exist and may have to be created. 
      * @param properties Configuration properties
      * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
-     *      (but in case of error throw an exception).
+     *      (in case of error throw an exception).
      */
-    boolean persist(@Nonnull ResourceResolver resourceResolver,
+    boolean persistConfiguration(@Nonnull ResourceResolver resourceResolver,
             @Nonnull String configResourcePath, @Nonnull ConfigurationPersistData data);
     
     /**
@@ -69,9 +69,18 @@ public interface ConfigurationPersistenceStrategy {
      * @param resourceCollectionItems Resource collection items to be stored.
      *      All existing collection entries on this context path level are erased and replaced with the new ones.
      * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
-     *      (but in case of error throw an exception).
+     *      (in case of error throw an exception).
      */
-    boolean persistCollection(@Nonnull ResourceResolver resourceResolver,
+    boolean persistConfigurationCollection(@Nonnull ResourceResolver resourceResolver,
             @Nonnull String configResourceCollectionParentPath, @Nonnull ConfigurationCollectionPersistData data);
+ 
+    /**
+     * Delete configuration or configuration collection data from repository using the inner-most context path as reference.
+     * @param resourceResolver Resource resolver
+     * @param configResourcePath Path to store configuration data to. The resource (and it's parents) may not exist and may have to be created. 
+     * @return true if the data was delete. false if deleting the data was not accepted by this persistence strategy
+     *      (in case of error throw an exception).
+     */
+    boolean deleteConfiguration(@Nonnull ResourceResolver resourceResolver, @Nonnull String configResourcePath);
     
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 17/23: SLING-6374 Context-Aware Config: Allow to control property order in annotation classes

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 73f2c4c295c37d2a1af4e0c6b0624e10b9f9cda4
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Dec 7 21:36:09 2016 +0000

    SLING-6374 Context-Aware Config: Allow to control property order in annotation classes
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773149 13f79535-47bb-0310-9956-ffa450edef68
---
 .../sling/caconfig/spi/metadata/PropertyMetadata.java | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
index 977e259..b2e56d0 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
@@ -53,6 +53,7 @@ public final class PropertyMetadata<T> extends AbstractMetadata<PropertyMetadata
     private final Class<T> type;
     private T defaultValue;
     private ConfigurationMetadata configurationMetadata;
+    private int order;
 
     /**
      * @param name Property name
@@ -151,6 +152,22 @@ public final class PropertyMetadata<T> extends AbstractMetadata<PropertyMetadata
     }
     
     /**
+     * @return Number to control property order in configuration editor.
+     */
+    public int getOrder() {
+        return order;
+    }
+
+    /**
+     * @param value Number to control property order in configuration editor.
+     * @return this
+     */
+    public PropertyMetadata<T> order(int value) {
+        this.order = value;
+        return this;
+    }
+
+    /**
      * @return Metadata for nested configuration
      */
     public ConfigurationMetadata getConfigurationMetadata() {
@@ -174,7 +191,7 @@ public final class PropertyMetadata<T> extends AbstractMetadata<PropertyMetadata
         return configurationMetadata != null
                 && (this.type.equals(ConfigurationMetadata.class) || this.type.equals(ConfigurationMetadata[].class));
     }
-
+    
     @Override
     public String toString() {
         return getName() + "[" + this.type.getSimpleName() + "]";

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 12/23: SLING-6338 make primitive wrapper type conversion consistent

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 12e5b6c24ef6890b54f2d4615ba983d9a8bceb75
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Dec 1 22:39:47 2016 +0000

    SLING-6338 make primitive wrapper type conversion consistent
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1772282 13f79535-47bb-0310-9956-ffa450edef68
---
 .../caconfig/spi/metadata/PropertyMetadata.java    | 32 +++++++++++++++++++---
 .../spi/metadata/PropertyMetadataTest.java         | 12 ++++++++
 2 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
index e936077..977e259 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
@@ -79,10 +79,34 @@ public final class PropertyMetadata<T> extends AbstractMetadata<PropertyMetadata
     }
     
     private static Class<?> typeToPrimitive(Class<?> clazz) {
-        if (clazz != String.class && !clazz.isPrimitive()) {
-            Class<?> type = ClassUtils.wrapperToPrimitive(clazz);
-            if (type != null) {
-                return type;
+        if (clazz.isArray()) {
+            if (ClassUtils.isPrimitiveWrapper(clazz.getComponentType())) {
+                if (clazz == Integer[].class) {
+                    return int[].class;
+                }
+                if (clazz == Long[].class) {
+                    return long[].class;
+                }
+                if (clazz == Double[].class) {
+                    return double[].class;
+                }
+                if (clazz == Boolean[].class) {
+                    return boolean[].class;
+                }
+            }
+        }
+        else if (ClassUtils.isPrimitiveWrapper(clazz)) {
+            if (clazz == Integer.class) {
+                return int.class;
+            }
+            if (clazz == Long.class) {
+                return long.class;
+            }
+            if (clazz == Double.class) {
+                return double.class;
+            }
+            if (clazz == Boolean.class) {
+                return boolean.class;
             }
         }
         return clazz;
diff --git a/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java b/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
index a51b948..e93fb8b 100644
--- a/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
@@ -66,6 +66,18 @@ public class PropertyMetadataTest {
     }
 
     @Test
+    public void testAllowedTypesConverted() {
+        assertEquals(int.class, new PropertyMetadata<>("name1", Integer.class).getType());
+        assertEquals(int[].class, new PropertyMetadata<>("name1", Integer[].class).getType());
+        assertEquals(long.class, new PropertyMetadata<>("name1", Long.class).getType());
+        assertEquals(long[].class, new PropertyMetadata<>("name1", Long[].class).getType());
+        assertEquals(double.class, new PropertyMetadata<>("name1", Double.class).getType());
+        assertEquals(double[].class, new PropertyMetadata<>("name1", Double[].class).getType());
+        assertEquals(boolean.class, new PropertyMetadata<>("name1", Boolean.class).getType());
+        assertEquals(boolean[].class, new PropertyMetadata<>("name1", Boolean[].class).getType());
+    }
+
+    @Test
     public void testNestedConfiguration() {
         new PropertyMetadata<>("name1", ConfigurationMetadata.class);
         new PropertyMetadata<>("name1", ConfigurationMetadata[].class);

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 22/23: [maven-release-plugin] prepare release org.apache.sling.caconfig.spi-1.2.0

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 46d90ed7b68654fd631a0239c953d919ba72f79d
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Tue Dec 13 11:37:12 2016 +0000

    [maven-release-plugin] prepare release org.apache.sling.caconfig.spi-1.2.0
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773952 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 223a815..5c28182 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,14 +29,14 @@
     
     <artifactId>org.apache.sling.caconfig.spi</artifactId>
     <packaging>bundle</packaging>
-    <version>1.1.1-SNAPSHOT</version>
+    <version>1.2.0</version>
     <name>Apache Sling Context-Aware Configuration SPI</name>
     <description>Apache Sling Context-Aware Configuration SPI</description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi</developerConnection>
-        <url>http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.caconfig.spi-1.2.0</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.caconfig.spi-1.2.0</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.caconfig.spi-1.2.0</url>
     </scm>
     
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 05/23: SLING-6303 Context-Aware Config: Persisting configuration resource collections with names

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 01df4f37d2b6bf39e99d4826af23cb9f3ad504cb
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Sat Nov 19 11:37:44 2016 +0000

    SLING-6303 Context-Aware Config: Persisting configuration resource collections with names
    
    (!) this breaks backward compatibility of both org.apache.sling.caconfig.spi and org.apache.sling.caconfig.management
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1770484 13f79535-47bb-0310-9956-ffa450edef68
---
 .../spi/ConfigurationPersistenceStrategy.java      | 14 +++++---
 ...ckage-info.java => ResourceCollectionItem.java} | 40 ++++++++++++++++++++--
 .../apache/sling/caconfig/spi/package-info.java    |  2 +-
 3 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index 6dfca6f..b9522c9 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -49,7 +49,8 @@ public interface ConfigurationPersistenceStrategy {
      * @param resourceResolver Resource resolver
      * @param configResourcePath Path to store configuration data to. The resource (and it's parents) may not exist and may have to be created. 
      * @param properties Configuration properties
-     * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy (but in case of error throw an exception).
+     * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
+     *      (but in case of error throw an exception).
      */
     boolean persist(@Nonnull ResourceResolver resourceResolver,
             @Nonnull String configResourcePath, @Nonnull Map<String,Object> properties);
@@ -58,11 +59,14 @@ public interface ConfigurationPersistenceStrategy {
      * Stores configuration data for a configuration resource collection.
      * The changes are written using the given resource resolver. They are not committed, this is left to the caller.
      * @param resourceResolver Resource resolver
-     * @param configResourceCollectionParentPath Parent path to store configuration collection data to. The resource (and it's parents) may not exist and may have to be created. 
-     * @param propertiesCollection Configuration properties
-     * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy (but in case of error throw an exception).
+     * @param configResourceCollectionParentPath Parent path to store configuration collection data to.
+     *      The resource (and it's parents) may not exist and may have to be created. 
+     * @param resourceCollectionItems Resource collection items to be stored.
+     *      All existing collection entries on this context path level are erased and replaced with the new ones.
+     * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
+     *      (but in case of error throw an exception).
      */
     boolean persistCollection(@Nonnull ResourceResolver resourceResolver,
-            @Nonnull String configResourceCollectionParentPath, @Nonnull Collection<Map<String,Object>> propertiesCollection);
+            @Nonnull String configResourceCollectionParentPath, @Nonnull Collection<ResourceCollectionItem> resourceCollectionItems);
     
 }
diff --git a/src/main/java/org/apache/sling/caconfig/spi/package-info.java b/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
similarity index 50%
copy from src/main/java/org/apache/sling/caconfig/spi/package-info.java
copy to src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
index 69d6ad1..ca6f37e 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/package-info.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
@@ -16,8 +16,42 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.sling.caconfig.spi;
+
+import java.util.Map;
+
+import org.osgi.annotation.versioning.ProviderType;
+
 /**
- * SPI for applications hooking into the configuration infrastructure for parameterizing and customizing.
+ * Name and values for persisting resource collection items.
  */
-@org.osgi.annotation.versioning.Version("1.1.0")
-package org.apache.sling.caconfig.spi;
+@ProviderType
+public final class ResourceCollectionItem {
+    
+    private final String collectionItemName;
+    private final Map<String,Object> values;
+    
+    /**
+     * @param collectionItemName Resource collection item name
+     * @param values Values
+     */
+    public ResourceCollectionItem(String collectionItemName, Map<String, Object> values) {
+        this.collectionItemName = collectionItemName;
+        this.values = values;
+    }
+
+    /**
+     * @return Resource collection item name
+     */
+    public String getCollectionItemName() {
+        return collectionItemName;
+    }
+
+    /**
+     * @return Values
+     */
+    public Map<String, Object> getValues() {
+        return values;
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/caconfig/spi/package-info.java b/src/main/java/org/apache/sling/caconfig/spi/package-info.java
index 69d6ad1..8637a08 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/package-info.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/package-info.java
@@ -19,5 +19,5 @@
 /**
  * SPI for applications hooking into the configuration infrastructure for parameterizing and customizing.
  */
-@org.osgi.annotation.versioning.Version("1.1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.caconfig.spi;

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 20/23: update to release version

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit fd06a87df3a2f26e5dcd613f928cbbce23a1d134
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Tue Dec 13 11:29:20 2016 +0000

    update to release version
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773950 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index c9c457d..223a815 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.caconfig.api</artifactId>
-            <version>1.0.1-SNAPSHOT</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 23/23: [maven-release-plugin] copy for tag org.apache.sling.caconfig.spi-1.2.0

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 54a51d9873cba1c38e5efa5af1879b02ad1f55ff
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Tue Dec 13 11:37:25 2016 +0000

    [maven-release-plugin] copy for tag org.apache.sling.caconfig.spi-1.2.0
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.caconfig.spi-1.2.0@1773953 13f79535-47bb-0310-9956-ffa450edef68

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 14/23: update to latest mock versions

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 3fe42c1e094fdc5699c8d1f112ea79cce64da587
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Dec 7 15:12:54 2016 +0000

    update to latest mock versions
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773095 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/pom.xml b/pom.xml
index e444d82..ef6ee56 100644
--- a/pom.xml
+++ b/pom.xml
@@ -81,20 +81,13 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
-            <version>2.1.0</version>
+            <version>2.1.1-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-            <version>1.8.0</version>
-            <scope>test</scope>
-        </dependency>
-        <!-- this dependency can be removed when updated to sling-mock 1.8.2 or higher -->
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.resourcebuilder</artifactId>
-            <version>1.0.2</version>
+            <version>1.8.1-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
         <dependency>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 02/23: SLING-6293 refactor property inheritance out of DefaultConfigurationResourceResolvingStrategy and create separate SPI and impl for it *this breaks backward compatibility of package org.apache.sling.caconfig.resource.spi -> major version increase*

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 4e90c741cb79eb9d68bb29a1a57d2de9e87d9dce
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Nov 17 17:50:36 2016 +0000

    SLING-6293 refactor property inheritance out of DefaultConfigurationResourceResolvingStrategy and create separate SPI and impl for it
    *this breaks backward compatibility of package org.apache.sling.caconfig.resource.spi -> major version increase*
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1770249 13f79535-47bb-0310-9956-ffa450edef68
---
 .../ConfigurationResourceResolvingStrategy.java    | 31 +++++++++++++--
 .../sling/caconfig/resource/spi/package-info.java  |  4 +-
 .../spi/ConfigurationInheritanceStrategy.java      | 44 ++++++++++++++++++++++
 .../apache/sling/caconfig/spi/package-info.java    |  2 +-
 4 files changed, 75 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java b/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
index b639d3c..e161a36 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
@@ -19,6 +19,7 @@
 package org.apache.sling.caconfig.resource.spi;
 
 import java.util.Collection;
+import java.util.Iterator;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
@@ -46,7 +47,7 @@ public interface ConfigurationResourceResolvingStrategy {
      *     it's configuration data grouped in a child resource of the configuration resource. This is what
      *     we call a "bucket", and the resource name is specified with this parameter.
      * @param configName Configuration name or relative path.
-     * @return Configuration resource or {@code null}.
+     * @return Configuration resource or {@code null} if this strategy did not found matching resources.
      */
     @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
 
@@ -57,9 +58,33 @@ public interface ConfigurationResourceResolvingStrategy {
      *     it's configuration data grouped in a child resource of the configuration resource. This is what
      *     we call a "bucket", and the resource name is specified with this parameter.
      * @param configName Configuration name or relative path.
-     * @return Collection of configuration resources, the collection might be empty.
+     * @return Collection of configuration resources or {@code null} if this strategy did not found matching resources.
      */
-    @Nonnull Collection<Resource> getResourceCollection(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Collection<Resource> getResourceCollection(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+
+    /**
+     * Get a context-aware singleton configuration resource inheritance chain defined by the given configuration name.
+     * The first item of the inheritance chain it the same resource returned by {@link #getResource(Resource, String, String)}.
+     * @param resource Context resource to fetch configuration for
+     * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
+     *     it's configuration data grouped in a child resource of the configuration resource. This is what
+     *     we call a "bucket", and the resource name is specified with this parameter.
+     * @param configName Configuration name or relative path.
+     * @return Configuration resource inheritance chain or {@code null} if this strategy did not found matching resources.
+     */
+    @CheckForNull Iterator<Resource> getResourceInheritanceChain(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+
+    /**
+     * Get a collection of context-aware configuration resource inheritance chains defined by the given configuration name.
+     * The first item of each inheritance chain is the same item returned by {@link #getResourceCollection(Resource, String, String)}.
+     * @param resource Context resource to fetch configuration for
+     * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
+     *     it's configuration data grouped in a child resource of the configuration resource. This is what
+     *     we call a "bucket", and the resource name is specified with this parameter.
+     * @param configName Configuration name or relative path.
+     * @return Collection of configuration resource inheritance chains or {@code null} if this strategy did not found matching resources.
+     */
+    @CheckForNull Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
 
     /**
      * Get the configuration resource path for storing configuration data for the given context resource and configuration name.
diff --git a/src/main/java/org/apache/sling/caconfig/resource/spi/package-info.java b/src/main/java/org/apache/sling/caconfig/resource/spi/package-info.java
index 64c8fa3..28049c1 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/spi/package-info.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/spi/package-info.java
@@ -1,4 +1,4 @@
-/*
+    /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -19,5 +19,5 @@
 /**
  * SPI for applications hooking into the configuration resource infrastructure for parameterizing and customizing.
  */
-@org.osgi.annotation.versioning.Version("1.1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.caconfig.resource.spi;
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationInheritanceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationInheritanceStrategy.java
new file mode 100644
index 0000000..3ad58d7
--- /dev/null
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationInheritanceStrategy.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.caconfig.spi;
+
+import java.util.Iterator;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import org.apache.sling.api.resource.Resource;
+import org.osgi.annotation.versioning.ConsumerType;
+
+/**
+ * Defines how (and if) resources in a resource hierarchy should inherit form each other.
+ * Primary use case is property inheritance over the inheritance chain.
+ */
+@ConsumerType
+public interface ConfigurationInheritanceStrategy {
+
+    /**
+     * Pick or merge resources for inheritance.
+     * @param configResources Iterator of configuration resources that form the inheritance hierarchy.
+     *     First resource is the "closest" match, the other resources may be used to inherit from.
+     * @return Inherited resource or null if this strategy does not support the given resources
+     */
+    @CheckForNull Resource getResource(@Nonnull Iterator<Resource> configResources);
+
+}
diff --git a/src/main/java/org/apache/sling/caconfig/spi/package-info.java b/src/main/java/org/apache/sling/caconfig/spi/package-info.java
index a127939..69d6ad1 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/package-info.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/package-info.java
@@ -19,5 +19,5 @@
 /**
  * SPI for applications hooking into the configuration infrastructure for parameterizing and customizing.
  */
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("1.1.0")
 package org.apache.sling.caconfig.spi;

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 16/23: SLING-6338 keep property order

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 5a4556d476e3433f5327b4ad3e2e4ef041f065a9
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Dec 7 20:51:01 2016 +0000

    SLING-6338 keep property order
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773143 13f79535-47bb-0310-9956-ffa450edef68
---
 .../org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
index d036713..8948c8c 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
@@ -19,7 +19,7 @@
 package org.apache.sling.caconfig.spi.metadata;
 
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -47,7 +47,7 @@ public final class ConfigurationMetadata extends AbstractMetadata<ConfigurationM
     }
     
     private static Map<String,PropertyMetadata<?>> toMap(Collection<PropertyMetadata<?>> propertyMetadata) {
-        Map<String,PropertyMetadata<?>> map = new HashMap<>();
+        Map<String,PropertyMetadata<?>> map = new LinkedHashMap<>();
         for (PropertyMetadata<?> item : propertyMetadata) {
             if (map.containsKey(item.getName())) {
                 throw new IllegalArgumentException("Duplicate property name: " + item.getName());

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 08/23: SLING-6338 support nested configuration classes when detecting configuration metadata

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 45440318d107716459a816d8da4871a4b27abed3
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Mon Nov 28 22:42:33 2016 +0000

    SLING-6338 support nested configuration classes when detecting configuration metadata
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1771825 13f79535-47bb-0310-9956-ffa450edef68
---
 .../sling/caconfig/spi/metadata/PropertyMetadata.java     | 15 +++++++++++++++
 .../sling/caconfig/spi/metadata/PropertyMetadataTest.java |  5 +++++
 2 files changed, 20 insertions(+)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
index 40f3e17..447c8ec 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
@@ -52,6 +52,7 @@ public final class PropertyMetadata<T> extends AbstractMetadata {
     
     private final Class<T> type;
     private T defaultValue;
+    private ConfigurationMetadata configurationMetadata;
 
     /**
      * @param name Property name
@@ -122,6 +123,20 @@ public final class PropertyMetadata<T> extends AbstractMetadata {
     public void setDefaultValue(T value) {
         this.defaultValue = value;
     }
+    
+    /**
+     * @return Metadata for nested configuration
+     */
+    public ConfigurationMetadata getConfigurationMetadata() {
+        return configurationMetadata;
+    }
+
+    /**
+     * @param configurationMetadata Metadata for nested configuration
+     */
+    public void setConfigurationMetadata(ConfigurationMetadata configurationMetadata) {
+        this.configurationMetadata = configurationMetadata;
+    }
 
     @Override
     public String toString() {
diff --git a/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java b/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
index 63be8f2..42b1563 100644
--- a/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
@@ -19,6 +19,7 @@
 package org.apache.sling.caconfig.spi.metadata;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
 
 import java.util.Map;
 
@@ -40,10 +41,14 @@ public class PropertyMetadataTest {
         Map<String,String> props = ImmutableMap.of("p1", "v1");
         underTest.setProperties(props);
         
+        ConfigurationMetadata configMetadata = new ConfigurationMetadata("test");
+        underTest.setConfigurationMetadata(configMetadata);
+        
         assertEquals("label1", underTest.getLabel());
         assertEquals("desc1", underTest.getDescription());
         assertEquals("value1", underTest.getDefaultValue());
         assertEquals(props, underTest.getProperties());
+        assertSame(configMetadata, underTest.getConfigurationMetadata());
     }
 
     @Test

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 10/23: SLING-6347 Context-Aware Config: Access to Inheritance Properties in Management API, SPI

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit b6cb6639662175dd516d572856592855b83ad289
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Nov 30 21:00:11 2016 +0000

    SLING-6347 Context-Aware Config: Access to Inheritance Properties in Management API, SPI
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1772117 13f79535-47bb-0310-9956-ffa450edef68
---
 .../spi/ConfigurationCollectionPersistData.java    | 68 ++++++++++++++++++++++
 ...tionItem.java => ConfigurationPersistData.java} | 39 ++++++++-----
 .../spi/ConfigurationPersistenceStrategy.java      |  7 +--
 .../ConfigurationCollectionPersistDataTest.java}   | 51 +++++++---------
 .../spi/ConfigurationPersistDataTest.java}         | 47 ++++++---------
 5 files changed, 134 insertions(+), 78 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
new file mode 100644
index 0000000..dfbfa82
--- /dev/null
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.caconfig.spi;
+
+import java.util.Collection;
+import java.util.Map;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import org.osgi.annotation.versioning.ProviderType;
+
+/**
+ * Data for persisting configuration collections.
+ */
+@ProviderType
+public final class ConfigurationCollectionPersistData {
+
+    private final Collection<ConfigurationPersistData> items;
+    private Map<String,Object> properties;
+    
+    /**
+     * @param collection Collection of configuration collection items
+     */
+    public ConfigurationCollectionPersistData(@Nonnull Collection<ConfigurationPersistData> items) {
+        this.items = items;
+    }
+
+    /**
+     * @return Collection of configuration collection items
+     */
+    public @Nonnull Collection<ConfigurationPersistData> getItems() {
+        return items;
+    }
+    
+    /**
+     * @return Properties for the configuration collection itself. Does not contain configuration data, but control data e.g. for enabling collection inheritance.
+     */
+    public @CheckForNull Map<String, Object> getProperties() {
+        return properties;
+    }
+
+    /**
+     * @param properties Properties for the configuration collection itself. Does not contain configuration data, but control data e.g. for enabling collection inheritance.
+     * @return this
+     */
+    public ConfigurationCollectionPersistData properties(Map<String, Object> value) {
+        this.properties = value;
+        return this;
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java
similarity index 53%
copy from src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
copy to src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java
index ca6f37e..a062a05 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java
@@ -20,38 +20,49 @@ package org.apache.sling.caconfig.spi;
 
 import java.util.Map;
 
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
- * Name and values for persisting resource collection items.
+ * Data for persisting configuration properties.
  */
 @ProviderType
-public final class ResourceCollectionItem {
-    
-    private final String collectionItemName;
-    private final Map<String,Object> values;
+public final class ConfigurationPersistData {
+
+    private final Map<String,Object> properties;
+    private String collectionItemName;
     
     /**
      * @param collectionItemName Resource collection item name
-     * @param values Values
+     * @param properties Property values
+     */
+    public ConfigurationPersistData(@Nonnull Map<String, Object> properties) {
+        this.properties = properties;
+    }
+
+    /**
+     * @return Property values
      */
-    public ResourceCollectionItem(String collectionItemName, Map<String, Object> values) {
-        this.collectionItemName = collectionItemName;
-        this.values = values;
+    public @Nonnull Map<String, Object> getProperties() {
+        return properties;
     }
 
     /**
-     * @return Resource collection item name
+     * @return Resource collection item name. To be set only for resource collection items.
      */
-    public String getCollectionItemName() {
+    public @CheckForNull String getCollectionItemName() {
         return collectionItemName;
     }
 
     /**
-     * @return Values
+     * @param collectionItemName Resource collection item name.  To be set only for resource collection items.
+     * @return this
      */
-    public Map<String, Object> getValues() {
-        return values;
+    public ConfigurationPersistData collectionItemName(String value) {
+        this.collectionItemName = value;
+        return this;
     }
 
 }
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index c0cfc2e..eddba38 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -18,9 +18,6 @@
  */
 package org.apache.sling.caconfig.spi;
 
-import java.util.Collection;
-import java.util.Map;
-
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
@@ -61,7 +58,7 @@ public interface ConfigurationPersistenceStrategy {
      *      (but in case of error throw an exception).
      */
     boolean persist(@Nonnull ResourceResolver resourceResolver,
-            @Nonnull String configResourcePath, @Nonnull Map<String,Object> properties);
+            @Nonnull String configResourcePath, @Nonnull ConfigurationPersistData data);
     
     /**
      * Stores configuration data for a configuration resource collection.
@@ -75,6 +72,6 @@ public interface ConfigurationPersistenceStrategy {
      *      (but in case of error throw an exception).
      */
     boolean persistCollection(@Nonnull ResourceResolver resourceResolver,
-            @Nonnull String configResourceCollectionParentPath, @Nonnull Collection<ResourceCollectionItem> resourceCollectionItems);
+            @Nonnull String configResourceCollectionParentPath, @Nonnull ConfigurationCollectionPersistData data);
     
 }
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java b/src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java
similarity index 52%
copy from src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
copy to src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java
index ca6f37e..730bb7c 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java
@@ -18,40 +18,31 @@
  */
 package org.apache.sling.caconfig.spi;
 
-import java.util.Map;
+import static org.junit.Assert.assertSame;
 
-import org.osgi.annotation.versioning.ProviderType;
+import java.util.Collection;
+import java.util.Map;
 
-/**
- * Name and values for persisting resource collection items.
- */
-@ProviderType
-public final class ResourceCollectionItem {
-    
-    private final String collectionItemName;
-    private final Map<String,Object> values;
-    
-    /**
-     * @param collectionItemName Resource collection item name
-     * @param values Values
-     */
-    public ResourceCollectionItem(String collectionItemName, Map<String, Object> values) {
-        this.collectionItemName = collectionItemName;
-        this.values = values;
-    }
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
 
-    /**
-     * @return Resource collection item name
-     */
-    public String getCollectionItemName() {
-        return collectionItemName;
-    }
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigurationCollectionPersistDataTest {
 
-    /**
-     * @return Values
-     */
-    public Map<String, Object> getValues() {
-        return values;
+    @Mock
+    private Collection<ConfigurationPersistData> items;
+    @Mock
+    private Map<String,Object> props;
+    
+    @Test
+    public void testProperties() {
+        ConfigurationCollectionPersistData underTest = new ConfigurationCollectionPersistData(items)
+                .properties(props);
+        
+        assertSame(items, underTest.getItems());
+        assertSame(props, underTest.getProperties());
     }
 
 }
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java b/src/test/java/org/apache/sling/caconfig/spi/ConfigurationPersistDataTest.java
similarity index 51%
rename from src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
rename to src/test/java/org/apache/sling/caconfig/spi/ConfigurationPersistDataTest.java
index ca6f37e..01ffa2b 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/ConfigurationPersistDataTest.java
@@ -18,40 +18,29 @@
  */
 package org.apache.sling.caconfig.spi;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
 import java.util.Map;
 
-import org.osgi.annotation.versioning.ProviderType;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
 
-/**
- * Name and values for persisting resource collection items.
- */
-@ProviderType
-public final class ResourceCollectionItem {
-    
-    private final String collectionItemName;
-    private final Map<String,Object> values;
-    
-    /**
-     * @param collectionItemName Resource collection item name
-     * @param values Values
-     */
-    public ResourceCollectionItem(String collectionItemName, Map<String, Object> values) {
-        this.collectionItemName = collectionItemName;
-        this.values = values;
-    }
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigurationPersistDataTest {
 
-    /**
-     * @return Resource collection item name
-     */
-    public String getCollectionItemName() {
-        return collectionItemName;
-    }
+    @Mock
+    private Map<String,Object> props;
 
-    /**
-     * @return Values
-     */
-    public Map<String, Object> getValues() {
-        return values;
+    @Test
+    public void testGetProperties() {
+        ConfigurationPersistData underTest = new ConfigurationPersistData(props)
+                .collectionItemName("item1");
+        
+        assertSame(props, underTest.getProperties());
+        assertEquals("item1", underTest.getCollectionItemName());
     }
 
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 06/23: SLING-6137 provide configuration metadata in ConfigurationManager

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 0839db1f0c50dd1132d771c165243b393014e413
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Nov 24 21:51:50 2016 +0000

    SLING-6137 provide configuration metadata in ConfigurationManager
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1771235 13f79535-47bb-0310-9956-ffa450edef68
---
 .../org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
index e552310..c3d04c5 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
@@ -20,6 +20,7 @@ package org.apache.sling.caconfig.spi;
 
 import java.util.SortedSet;
 
+import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
@@ -42,6 +43,6 @@ public interface ConfigurationMetadataProvider {
      * @param configName Configuration name
      * @return Configuration metadata or null if none exists for the given name.
      */
-    ConfigurationMetadata getConfigurationMetadata(String configName);
+    @CheckForNull ConfigurationMetadata getConfigurationMetadata(String configName);
 
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 04/23: SLING-6060 Context-Aware Config: Configuration property override providers

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit b31b6b6e7f55df593f73c231531e2ca7bc7945a0
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Fri Nov 18 23:42:02 2016 +0000

    SLING-6060 Context-Aware Config: Configuration property override providers
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1770448 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  2 +-
 .../spi/ConfigurationMetadataProvider.java         |  2 +-
 ...der.java => ConfigurationOverrideProvider.java} | 26 ++++++++++------------
 3 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/pom.xml b/pom.xml
index 6bb7870..5009463 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,7 +54,7 @@
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.caconfig.api</artifactId>
             <version>1.0.0</version>
-            <scope>provided</scope>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>com.google.code.findbugs</groupId>
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
index 28d99b1..e552310 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
@@ -26,7 +26,7 @@ import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.osgi.annotation.versioning.ConsumerType;
 
 /**
- * Allows application to provide the necessary metadata for configurations.
+ * Allows applications to provide the necessary metadata for configurations.
  */
 @ConsumerType
 public interface ConfigurationMetadataProvider {
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationOverrideProvider.java
similarity index 61%
copy from src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
copy to src/main/java/org/apache/sling/caconfig/spi/ConfigurationOverrideProvider.java
index 28d99b1..290fa24 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationMetadataProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationOverrideProvider.java
@@ -18,30 +18,28 @@
  */
 package org.apache.sling.caconfig.spi;
 
-import java.util.SortedSet;
+import java.util.Collection;
 
 import javax.annotation.Nonnull;
 
-import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.osgi.annotation.versioning.ConsumerType;
 
 /**
- * Allows application to provide the necessary metadata for configurations.
+ * Provide information to override configuration data.
  */
 @ConsumerType
-public interface ConfigurationMetadataProvider {
+public interface ConfigurationOverrideProvider {
 
     /**
-     * Get all configuration names.
-     * @return Configuration names
+     * Get override strings. Syntax examples:
+     * <ul>
+     * <li><code>{configName}/{propertyName}={propertyJsonValue}</code></li>
+     * <li><code>{configName}={propertyJsonObject}</code></li>
+     * <li><code>[{contextPath}]{configName}/{propertyName}={propertyJsonValue}</code></li>
+     * <li><code>[{contextPath}]{configName}={propertyJsonObject}</code></li>
+     * </ul>
+     * @return Override strings
      */
-    @Nonnull SortedSet<String> getConfigurationNames();
-
-    /**
-     * Get configuration metadata.
-     * @param configName Configuration name
-     * @return Configuration metadata or null if none exists for the given name.
-     */
-    ConfigurationMetadata getConfigurationMetadata(String configName);
+    @Nonnull Collection<String> getOverrideStrings();
 
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 21/23: fix javadoc errors

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit c53d2c838a96608ca746be5645b1a79656ee6e4a
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Tue Dec 13 11:36:21 2016 +0000

    fix javadoc errors
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773951 13f79535-47bb-0310-9956-ffa450edef68
---
 .../resource/spi/ConfigurationResourceResolvingStrategy.java       | 5 +++--
 .../sling/caconfig/spi/ConfigurationCollectionPersistData.java     | 4 ++--
 .../org/apache/sling/caconfig/spi/ConfigurationPersistData.java    | 3 +--
 .../sling/caconfig/spi/ConfigurationPersistenceStrategy.java       | 7 +++----
 .../apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java  | 2 ++
 5 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java b/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
index 7b96f80..3b96ae2 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
@@ -45,6 +45,7 @@ public interface ConfigurationResourceResolvingStrategy {
      * @param resource Context resource to fetch configuration for
      * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
      *   one that has a result is included.
+     * @param configName Configuration name or relative path.
      * @return Configuration resource or {@code null} if this strategy did not found matching resources.
      */
     @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull Collection<String> bucketNames, @Nonnull String configName);
@@ -61,7 +62,7 @@ public interface ConfigurationResourceResolvingStrategy {
 
     /**
      * Get a context-aware singleton configuration resource inheritance chain defined by the given configuration name.
-     * The first item of the inheritance chain it the same resource returned by {@link #getResource(Resource, String, String)}.
+     * The first item of the inheritance chain it the same resource returned by {@link #getResource(Resource, Collection, String)}.
      * @param resource Context resource to fetch configuration for
      * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
      *   one that has a result is included.
@@ -72,7 +73,7 @@ public interface ConfigurationResourceResolvingStrategy {
 
     /**
      * Get a collection of context-aware configuration resource inheritance chains defined by the given configuration name.
-     * The first item of each inheritance chain is the same item returned by {@link #getResourceCollection(Resource, String, String)}.
+     * The first item of each inheritance chain is the same item returned by {@link #getResourceCollection(Resource, Collection, String)}.
      * @param resource Context resource to fetch configuration for
      * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
      *   one that has a result is included.
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
index 800b1ce..00dfa57 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
@@ -42,7 +42,7 @@ public final class ConfigurationCollectionPersistData {
     private Map<String,Object> properties;
     
     /**
-     * @param collection Collection of configuration collection items
+     * @param items Collection of configuration collection items
      */
     public ConfigurationCollectionPersistData(@Nonnull Collection<ConfigurationPersistData> items) {
         validateItems(items);
@@ -81,7 +81,7 @@ public final class ConfigurationCollectionPersistData {
     }
 
     /**
-     * @param properties Properties for the configuration collection itself. Does not contain configuration data, but control data e.g. for enabling collection inheritance.
+     * @param value Properties for the configuration collection itself. Does not contain configuration data, but control data e.g. for enabling collection inheritance.
      * @return this
      */
     public ConfigurationCollectionPersistData properties(Map<String, Object> value) {
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java
index a062a05..5a1f2fd 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistData.java
@@ -35,7 +35,6 @@ public final class ConfigurationPersistData {
     private String collectionItemName;
     
     /**
-     * @param collectionItemName Resource collection item name
      * @param properties Property values
      */
     public ConfigurationPersistData(@Nonnull Map<String, Object> properties) {
@@ -57,7 +56,7 @@ public final class ConfigurationPersistData {
     }
 
     /**
-     * @param collectionItemName Resource collection item name.  To be set only for resource collection items.
+     * @param value Resource collection item name.  To be set only for resource collection items.
      * @return this
      */
     public ConfigurationPersistData collectionItemName(String value) {
diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index cf88798..505ff51 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -43,7 +43,7 @@ public interface ConfigurationPersistenceStrategy {
     /**
      * Allows the strategy to transform the given configuration resource path according to it's persistent strategies,
      * e.g. fetching the data from a child resource instead of the given resource. 
-     * @param resource Configuration resource path or part of it (e.g. config name)
+     * @param resourcePath Configuration resource path or part of it (e.g. config name)
      * @return Transformed configuration resource path. If null is returned this strategy does not support the given configuration resource path.
      */
     @CheckForNull String getResourcePath(@Nonnull String resourcePath);
@@ -53,7 +53,7 @@ public interface ConfigurationPersistenceStrategy {
      * The changes are written using the given resource resolver. They are not committed, this is left to the caller.
      * @param resourceResolver Resource resolver
      * @param configResourcePath Path to store configuration data to. The resource (and it's parents) may not exist and may have to be created. 
-     * @param properties Configuration properties
+     * @param data Configuration persistence data
      * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
      *      (in case of error throw an exception).
      */
@@ -66,8 +66,7 @@ public interface ConfigurationPersistenceStrategy {
      * @param resourceResolver Resource resolver
      * @param configResourceCollectionParentPath Parent path to store configuration collection data to.
      *      The resource (and it's parents) may not exist and may have to be created. 
-     * @param resourceCollectionItems Resource collection items to be stored.
-     *      All existing collection entries on this context path level are erased and replaced with the new ones.
+     * @param data Configuration collection data. All existing collection entries on this context path level are erased and replaced with the new ones.
      * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
      *      (in case of error throw an exception).
      */
diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
index 8948c8c..bc4ef43 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
@@ -37,6 +37,8 @@ public final class ConfigurationMetadata extends AbstractMetadata<ConfigurationM
 
     /**
      * @param name Configuration name
+     * @param propertyMetadata Property metadata
+     * @param collection Collection
      */
     public ConfigurationMetadata(@Nonnull String name,
             Collection<PropertyMetadata<?>> propertyMetadata,

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 19/23: update to osgi-mock, sling-mock release versions

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 8cf38b6efc896c5c323b6abe04ace20b6be47be2
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Dec 8 21:29:19 2016 +0000

    update to osgi-mock,sling-mock release versions
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773299 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index ef6ee56..c9c457d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -81,13 +81,13 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
-            <version>2.1.1-SNAPSHOT</version>
+            <version>2.2.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-            <version>1.8.1-SNAPSHOT</version>
+            <version>1.9.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 03/23: cosmetic: add missing CheckForNull annotation

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit f4ce0cbc270f2af384ed8522d50c75930a919423
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Nov 17 18:19:45 2016 +0000

    cosmetic: add missing CheckForNull annotation
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1770255 13f79535-47bb-0310-9956-ffa450edef68
---
 .../apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java    | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index 0f3a0e1..6dfca6f 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -21,6 +21,7 @@ package org.apache.sling.caconfig.spi;
 import java.util.Collection;
 import java.util.Map;
 
+import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
 import org.apache.sling.api.resource.Resource;
@@ -40,7 +41,7 @@ public interface ConfigurationPersistenceStrategy {
      * @param resource Configuration resource
      * @return Transformed configuration resource. If null is returned this strategy does not support the given configuration resource.
      */
-    Resource getResource(@Nonnull Resource resource);
+    @CheckForNull Resource getResource(@Nonnull Resource resource);
     
     /**
      * Stores configuration data for a singleton configuration resource.

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 11/23: SLING-6338 enhance nested configuration handling refactor SPI metadata classes to make them fluent

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit b068471bb00d69708fa3fec9836a44ed5b5e30e0
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Dec 1 18:05:41 2016 +0000

    SLING-6338 enhance nested configuration handling
    refactor SPI metadata classes to make them fluent
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1772244 13f79535-47bb-0310-9956-ffa450edef68
---
 .../spi/ConfigurationPersistenceStrategy.java      |  2 +-
 .../caconfig/spi/metadata/AbstractMetadata.java    | 17 +++++++---
 .../spi/metadata/ConfigurationMetadata.java        | 39 ++++++++++++----------
 .../caconfig/spi/metadata/PropertyMetadata.java    | 19 +++++++++--
 .../spi/metadata/ConfigurationMetadataTest.java    | 35 +++++++++++++++----
 .../spi/metadata/PropertyMetadataTest.java         | 14 ++++----
 6 files changed, 87 insertions(+), 39 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index eddba38..909b7e2 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -43,7 +43,7 @@ public interface ConfigurationPersistenceStrategy {
     /**
      * Allows the strategy to transform the given configuration resource path according to it's persistent strategies,
      * e.g. fetching the data from a child resource instead of the given resource. 
-     * @param resource Configuration resource path
+     * @param resource Configuration resource path or part of it (e.g. config name)
      * @return Transformed configuration resource path. If null is returned this strategy does not support the given configuration resource path.
      */
     @CheckForNull String getResourcePath(@Nonnull String resourcePath);
diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/AbstractMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/AbstractMetadata.java
index 1db599c..dc69fb6 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/AbstractMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/AbstractMetadata.java
@@ -25,7 +25,7 @@ import javax.annotation.Nonnull;
 /**
  * Common properties for configuration and properties.
  */
-abstract class AbstractMetadata {
+abstract class AbstractMetadata<T> {
 
     private final String name;
     private String label;
@@ -55,9 +55,12 @@ abstract class AbstractMetadata {
 
     /**
      * @param label Label
+     * @return this;
      */
-    public void setLabel(String label) {
+    @SuppressWarnings("unchecked")
+    public T label(String label) {
         this.label = label;
+        return (T)this;
     }
 
     /**
@@ -69,9 +72,12 @@ abstract class AbstractMetadata {
 
     /**
      * @param description Description
+     * @return this;
      */
-    public void setDescription(String description) {
+    @SuppressWarnings("unchecked")
+    public T description(String description) {
         this.description = description;
+        return (T)this;
     }
 
     /**
@@ -83,9 +89,12 @@ abstract class AbstractMetadata {
     
     /**
      * @param properties Further properties for documentation and configuration of behavior in configuration editor.
+     * @return this;
      */
-    public void setProperties(Map<String,String> properties) {
+    @SuppressWarnings("unchecked")
+    public T properties(Map<String,String> properties) {
         this.properties = properties;
+        return (T)this;
     }
     
     @Override
diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
index d9ec56a..d036713 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadata.java
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.caconfig.spi.metadata;
 
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
@@ -28,16 +30,31 @@ import org.osgi.annotation.versioning.ProviderType;
  * Defines a configuration.
  */
 @ProviderType
-public final class ConfigurationMetadata extends AbstractMetadata {
+public final class ConfigurationMetadata extends AbstractMetadata<ConfigurationMetadata> {
 
-    private boolean collection;
-    private Map<String,PropertyMetadata<?>> propertyMetadata;
+    private final Map<String,PropertyMetadata<?>> propertyMetadata;
+    private final boolean collection;
 
     /**
      * @param name Configuration name
      */
-    public ConfigurationMetadata(@Nonnull String name) {
+    public ConfigurationMetadata(@Nonnull String name,
+            Collection<PropertyMetadata<?>> propertyMetadata,
+            boolean collection) {
         super(name);
+        this.propertyMetadata = toMap(propertyMetadata);
+        this.collection = collection;
+    }
+    
+    private static Map<String,PropertyMetadata<?>> toMap(Collection<PropertyMetadata<?>> propertyMetadata) {
+        Map<String,PropertyMetadata<?>> map = new HashMap<>();
+        for (PropertyMetadata<?> item : propertyMetadata) {
+            if (map.containsKey(item.getName())) {
+                throw new IllegalArgumentException("Duplicate property name: " + item.getName());
+            }
+            map.put(item.getName(), item);
+        }
+        return map;
     }
     
     /**
@@ -55,24 +72,10 @@ public final class ConfigurationMetadata extends AbstractMetadata {
     }
 
     /**
-     * @param isList true if configuration is collection
-     */
-    public void setCollection(boolean value) {
-        this.collection = value;
-    }
-
-    /**
      * @return Configuration properties
      */
     public Map<String,PropertyMetadata<?>> getPropertyMetadata() {
         return this.propertyMetadata;
     }
 
-    /**
-     * @param propertyMetadata Configuration properties
-     */
-    public void setPropertyMetadata(Map<String,PropertyMetadata<?>> propertyMetadata) {
-        this.propertyMetadata = propertyMetadata;
-    }
-
 }
diff --git a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
index 447c8ec..e936077 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadata.java
@@ -33,7 +33,7 @@ import org.osgi.annotation.versioning.ProviderType;
  * @param <T> Property value type
  */
 @ProviderType
-public final class PropertyMetadata<T> extends AbstractMetadata {
+public final class PropertyMetadata<T> extends AbstractMetadata<PropertyMetadata<T>> {
 
     // these are all types supported for fields of annotation classes (plus class which indicates nested configurations)
     private static final Class<?>[] SUPPORTED_TYPES_ARRAY = {
@@ -119,9 +119,11 @@ public final class PropertyMetadata<T> extends AbstractMetadata {
     
     /**
      * @param value Default value if parameter is not set for configuration
+     * @return this;
      */
-    public void setDefaultValue(T value) {
+    public PropertyMetadata<T> defaultValue(T value) {
         this.defaultValue = value;
+        return this;
     }
     
     /**
@@ -133,9 +135,20 @@ public final class PropertyMetadata<T> extends AbstractMetadata {
 
     /**
      * @param configurationMetadata Metadata for nested configuration
+     * @return this;
      */
-    public void setConfigurationMetadata(ConfigurationMetadata configurationMetadata) {
+    public PropertyMetadata<T> configurationMetadata(ConfigurationMetadata configurationMetadata) {
         this.configurationMetadata = configurationMetadata;
+        return this;
+    }
+    
+    /**
+     * @return true if this property describes a nested configuration.
+     *   In this case it is ensured configuration metadata is present, and the type is ConfigurationMetadata or ConfigurationMetadata[].
+     */
+    public boolean isNestedConfiguration() {
+        return configurationMetadata != null
+                && (this.type.equals(ConfigurationMetadata.class) || this.type.equals(ConfigurationMetadata[].class));
     }
 
     @Override
diff --git a/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java b/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java
index 6477b59..83bd8f5 100644
--- a/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/metadata/ConfigurationMetadataTest.java
@@ -26,28 +26,51 @@ import java.util.Map;
 
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 public class ConfigurationMetadataTest {
 
     @Test
     public void testProps() {
-        ConfigurationMetadata underTest = new ConfigurationMetadata("name1");
+        ConfigurationMetadata underTest = new ConfigurationMetadata("name1", ImmutableList.<PropertyMetadata<?>>of(), false);
         assertEquals("name1", underTest.getName());
         assertTrue(underTest.isSingleton());
         assertFalse(underTest.isCollection());
         
-        underTest.setLabel("label1");
-        underTest.setDescription("desc1");
-        underTest.setCollection(true);
         Map<String,String> props = ImmutableMap.of("p1", "v1");
-        underTest.setProperties(props);
+        underTest.label("label1")
+            .description("desc1")
+            .properties(props);
         
         assertEquals("label1", underTest.getLabel());
         assertEquals("desc1", underTest.getDescription());
+        assertEquals(props, underTest.getProperties());
+    }
+
+    @Test
+    public void testCollectionProps() {
+        ConfigurationMetadata underTest = new ConfigurationMetadata("name1", ImmutableList.<PropertyMetadata<?>>of(), true);
+        assertEquals("name1", underTest.getName());
         assertFalse(underTest.isSingleton());
         assertTrue(underTest.isCollection());
-        assertEquals(props, underTest.getProperties());
+    }
+
+    @Test
+    public void testPropertyMap() {
+        ConfigurationMetadata underTest = new ConfigurationMetadata("name1", ImmutableList.<PropertyMetadata<?>>of(
+                new PropertyMetadata<>("prop1", "devValue"),
+                new PropertyMetadata<>("prop2", 5)), false);
+        assertEquals(2, underTest.getPropertyMetadata().size());
+        assertTrue(underTest.getPropertyMetadata().containsKey("prop1"));
+        assertTrue(underTest.getPropertyMetadata().containsKey("prop2"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testDuplicateKey() {
+        new ConfigurationMetadata("name1", ImmutableList.<PropertyMetadata<?>>of(
+                new PropertyMetadata<>("prop1", "devValue"),
+                new PropertyMetadata<>("prop1", 5)), false);
     }
 
 }
diff --git a/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java b/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
index 42b1563..a51b948 100644
--- a/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/metadata/PropertyMetadataTest.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 public class PropertyMetadataTest {
@@ -35,14 +36,13 @@ public class PropertyMetadataTest {
         assertEquals("name1", underTest.getName());
         assertEquals(String.class, underTest.getType());
         
-        underTest.setLabel("label1");
-        underTest.setDescription("desc1");
-        underTest.setDefaultValue("value1");
+        ConfigurationMetadata configMetadata = new ConfigurationMetadata("test", ImmutableList.<PropertyMetadata<?>>of(), false);
         Map<String,String> props = ImmutableMap.of("p1", "v1");
-        underTest.setProperties(props);
-        
-        ConfigurationMetadata configMetadata = new ConfigurationMetadata("test");
-        underTest.setConfigurationMetadata(configMetadata);
+        underTest.label("label1")
+            .description("desc1")
+            .defaultValue("value1")
+            .properties(props)
+            .configurationMetadata(configMetadata);
         
         assertEquals("label1", underTest.getLabel());
         assertEquals("desc1", underTest.getDescription());

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 09/23: SLING-6338 refactor and fix handling of nested configurations in Management API and ConfigurationResourceResolver

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 8f30ae15942ce2a950da5d0202dc5e52ba201bf1
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Nov 30 15:34:44 2016 +0000

    SLING-6338 refactor and fix handling of nested configurations in Management API and ConfigurationResourceResolver
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1772057 13f79535-47bb-0310-9956-ffa450edef68
---
 .../sling/caconfig/spi/ConfigurationPersistenceStrategy.java      | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
index b9522c9..c0cfc2e 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
@@ -44,6 +44,14 @@ public interface ConfigurationPersistenceStrategy {
     @CheckForNull Resource getResource(@Nonnull Resource resource);
     
     /**
+     * Allows the strategy to transform the given configuration resource path according to it's persistent strategies,
+     * e.g. fetching the data from a child resource instead of the given resource. 
+     * @param resource Configuration resource path
+     * @return Transformed configuration resource path. If null is returned this strategy does not support the given configuration resource path.
+     */
+    @CheckForNull String getResourcePath(@Nonnull String resourcePath);
+    
+    /**
      * Stores configuration data for a singleton configuration resource.
      * The changes are written using the given resource resolver. They are not committed, this is left to the caller.
      * @param resourceResolver Resource resolver

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 15/23: SLING-6373 Context-Aware Config: Allow alternative configuration bucket names

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 393d233ef9a99830b048d6696107ffc646eb198a
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Dec 7 18:03:16 2016 +0000

    SLING-6373 Context-Aware Config: Allow alternative configuration bucket names
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773130 13f79535-47bb-0310-9956-ffa450edef68
---
 .../ConfigurationResourceResolvingStrategy.java    | 29 +++++++++-------------
 1 file changed, 12 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java b/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
index e161a36..7b96f80 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
@@ -43,48 +43,43 @@ public interface ConfigurationResourceResolvingStrategy {
     /**
      * Get a context-aware singleton configuration resource defined by the given configuration name.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
-     *     it's configuration data grouped in a child resource of the configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this parameter.
-     * @param configName Configuration name or relative path.
+     * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @return Configuration resource or {@code null} if this strategy did not found matching resources.
      */
-    @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get a collection of context-aware configuration resources defined by the given configuration name.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
-     *     it's configuration data grouped in a child resource of the configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this parameter.
+     * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @param configName Configuration name or relative path.
      * @return Collection of configuration resources or {@code null} if this strategy did not found matching resources.
      */
-    @CheckForNull Collection<Resource> getResourceCollection(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Collection<Resource> getResourceCollection(@Nonnull Resource resource, @Nonnull Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get a context-aware singleton configuration resource inheritance chain defined by the given configuration name.
      * The first item of the inheritance chain it the same resource returned by {@link #getResource(Resource, String, String)}.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
-     *     it's configuration data grouped in a child resource of the configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this parameter.
+     * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @param configName Configuration name or relative path.
      * @return Configuration resource inheritance chain or {@code null} if this strategy did not found matching resources.
      */
-    @CheckForNull Iterator<Resource> getResourceInheritanceChain(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Iterator<Resource> getResourceInheritanceChain(@Nonnull Resource resource, @Nonnull Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get a collection of context-aware configuration resource inheritance chains defined by the given configuration name.
      * The first item of each inheritance chain is the same item returned by {@link #getResourceCollection(Resource, String, String)}.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
-     *     it's configuration data grouped in a child resource of the configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this parameter.
+     * @param bucketNames Configuration "bucket" names. For each inheritance level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @param configName Configuration name or relative path.
      * @return Collection of configuration resource inheritance chains or {@code null} if this strategy did not found matching resources.
      */
-    @CheckForNull Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(@Nonnull Resource resource, @Nonnull Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get the configuration resource path for storing configuration data for the given context resource and configuration name.

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 01/23: [maven-release-plugin] prepare for next development iteration

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit 32f1d3112a776b191d6972eb7b30583857dd2a3e
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Nov 7 10:38:04 2016 +0000

    [maven-release-plugin] prepare for next development iteration
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1768490 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index fe35be9..6bb7870 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,14 +29,14 @@
     
     <artifactId>org.apache.sling.caconfig.spi</artifactId>
     <packaging>bundle</packaging>
-    <version>1.1.0</version>
+    <version>1.1.1-SNAPSHOT</version>
     <name>Apache Sling Context-Aware Configuration SPI</name>
     <description>Apache Sling Context-Aware Configuration SPI</description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.caconfig.spi-1.1.0</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.caconfig.spi-1.1.0</developerConnection>
-        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.caconfig.spi-1.1.0</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi</url>
     </scm>
     
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-caconfig-spi] 18/23: SLING-6367 validate configuration collection item names

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.caconfig.spi-1.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-spi.git

commit c20d62a203e056ebe5bdbe23fc77a79b5678628d
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Dec 8 20:48:34 2016 +0000

    SLING-6367 validate configuration collection item names
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/contextaware-config/spi@1773298 13f79535-47bb-0310-9956-ffa450edef68
---
 .../spi/ConfigurationCollectionPersistData.java    | 24 +++++++++++++
 .../ConfigurationCollectionPersistDataTest.java    | 40 ++++++++++++++++++++--
 2 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
index dfbfa82..800b1ce 100644
--- a/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
+++ b/src/main/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistData.java
@@ -19,11 +19,15 @@
 package org.apache.sling.caconfig.spi;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+import org.apache.commons.lang3.StringUtils;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -31,6 +35,8 @@ import org.osgi.annotation.versioning.ProviderType;
  */
 @ProviderType
 public final class ConfigurationCollectionPersistData {
+    
+    private static final Pattern ITEM_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_-]+$");
 
     private final Collection<ConfigurationPersistData> items;
     private Map<String,Object> properties;
@@ -39,8 +45,26 @@ public final class ConfigurationCollectionPersistData {
      * @param collection Collection of configuration collection items
      */
     public ConfigurationCollectionPersistData(@Nonnull Collection<ConfigurationPersistData> items) {
+        validateItems(items);
         this.items = items;
     }
+    
+    private void validateItems(Collection<ConfigurationPersistData> items) {
+        // ensure unique and valid key names        
+        Set<String> keyNames = new HashSet<>();
+        for (ConfigurationPersistData item : items) {
+            if (StringUtils.isBlank(item.getCollectionItemName())) {
+                throw new ConfigurationPersistenceException("Collection item name is missing.");
+            }
+            if (!ITEM_NAME_PATTERN.matcher(item.getCollectionItemName()).matches()) {
+                throw new ConfigurationPersistenceException("Invalid collection item name: " + item.getCollectionItemName());
+            }
+            if (keyNames.contains(item.getCollectionItemName())) {
+                throw new ConfigurationPersistenceException("Duplicate collection item name: " + item.getCollectionItemName());
+            }
+            keyNames.add(item.getCollectionItemName());
+        }
+    }
 
     /**
      * @return Collection of configuration collection items
diff --git a/src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java b/src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java
index 730bb7c..f62382a 100644
--- a/src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java
+++ b/src/test/java/org/apache/sling/caconfig/spi/ConfigurationCollectionPersistDataTest.java
@@ -28,16 +28,22 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
 @RunWith(MockitoJUnitRunner.class)
 public class ConfigurationCollectionPersistDataTest {
 
     @Mock
-    private Collection<ConfigurationPersistData> items;
-    @Mock
     private Map<String,Object> props;
     
     @Test
     public void testProperties() {
+        Collection<ConfigurationPersistData> items = ImmutableList.of(
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item1"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item2"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item3"));
+
         ConfigurationCollectionPersistData underTest = new ConfigurationCollectionPersistData(items)
                 .properties(props);
         
@@ -45,4 +51,34 @@ public class ConfigurationCollectionPersistDataTest {
         assertSame(props, underTest.getProperties());
     }
 
+    @Test(expected=ConfigurationPersistenceException.class)
+    public void testItemsDuplicateKeys() {
+        Collection<ConfigurationPersistData> itemList = ImmutableList.of(
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item1"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item2"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item1"));
+
+        new ConfigurationCollectionPersistData(itemList);
+    }
+
+    @Test(expected=ConfigurationPersistenceException.class)
+    public void testItemsMissingItemName() {
+        Collection<ConfigurationPersistData> itemList = ImmutableList.of(
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item1"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item2"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()));
+
+        new ConfigurationCollectionPersistData(itemList);
+    }
+
+    @Test(expected=ConfigurationPersistenceException.class)
+    public void testItemsInvalidItemNAme() {
+        Collection<ConfigurationPersistData> itemList = ImmutableList.of(
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item1"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item2"),
+                new ConfigurationPersistData(ImmutableMap.<String, Object>of()).collectionItemName("item #1"));
+
+        new ConfigurationCollectionPersistData(itemList);
+    }
+
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.