You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/11/19 11:37:44 UTC
svn commit: r1770484 - in
/sling/trunk/contrib/extensions/contextaware-config:
impl/src/main/java/org/apache/sling/caconfig/impl/def/
impl/src/main/java/org/apache/sling/caconfig/management/
impl/src/main/java/org/apache/sling/caconfig/management/impl/...
Author: sseifert
Date: Sat Nov 19 11:37:44 2016
New Revision: 1770484
URL: http://svn.apache.org/viewvc?rev=1770484&view=rev
Log:
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
Added:
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java (with props)
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/package-info.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
sling/trunk/contrib/extensions/contextaware-config/integration-tests/src/test/java/org/apache/sling/caconfig/it/ConfigurationManagerIT.java
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/package-info.java
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java Sat Nov 19 11:37:44 2016
@@ -31,6 +31,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
@@ -83,16 +84,15 @@ public class DefaultConfigurationPersist
@Override
public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
- Collection<Map<String,Object>> propertiesCollection) {
+ Collection<ResourceCollectionItem> resourceCollectionItems) {
if (!config.enabled()) {
return false;
}
Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, ValueMap.EMPTY);
deleteChildren(configResourceParent);
- int index = 0;
- for (Map<String,Object> properties : propertiesCollection) {
- String path = configResourceParent.getPath() + "/" + (index++);
- getOrCreateResource(resourceResolver, path, properties);
+ for (ResourceCollectionItem item : resourceCollectionItems) {
+ String path = configResourceParent.getPath() + "/" + item.getCollectionItemName();
+ getOrCreateResource(resourceResolver, path, item.getValues());
}
return true;
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java Sat Nov 19 11:37:44 2016
@@ -33,6 +33,18 @@ import org.osgi.annotation.versioning.Pr
public interface ConfigurationData {
/**
+ * Get configuration name.
+ * @return Configuration name
+ */
+ @Nonnull String getConfigName();
+
+ /**
+ * In case of configuration resource collection, this returns the collection item resource name.
+ * @return Item resource name or null if it is a singleton resource.
+ */
+ @CheckForNull String getCollectionItemName();
+
+ /**
* Path of the configuration resource. The resource may not exist, in this case
* inherited or default values may be returned.
* If the configuration data is saved, this path is used.
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java Sat Nov 19 11:37:44 2016
@@ -25,6 +25,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.osgi.annotation.versioning.ProviderType;
/**
@@ -63,15 +64,18 @@ public interface ConfigurationManager {
* Write configuration data collection using the inner-most context path as reference.
* @param resource Context resource
* @param configName Configuration name
- * @param values Value collection to be stored. All existing collection entries on this context path level are erased and replaced with the new ones.
+ * @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.
*/
- void persistCollection(@Nonnull Resource resource, @Nonnull String configName, @Nonnull Collection<Map<String,Object>> values);
+ void persistCollection(@Nonnull Resource resource, @Nonnull String configName,
+ @Nonnull Collection<ResourceCollectionItem> resourceCollectionItems);
/**
* Creates a new empty configuration data item for a configuration data collection for the given configuration name.
+ * @param resource Context resource
* @param configName Configuration name
* @return Configuration data. Is null when no configuration metadata exists.
*/
- @CheckForNull ConfigurationData newCollectionItem(@Nonnull String configName);
+ @CheckForNull ConfigurationData newCollectionItem(@Nonnull Resource resource, @Nonnull String configName);
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java Sat Nov 19 11:37:44 2016
@@ -45,12 +45,14 @@ final class ConfigurationDataImpl implem
private final Resource contextResource;
private final String configName;
private final ConfigurationOverrideManager configurationOverrideManager;
+ private final boolean configResourceCollection;
@SuppressWarnings("unchecked")
public ConfigurationDataImpl(ConfigurationMetadata configMetadata,
Resource resolvedConfigurationResource, Resource writebackConfigurationResource,
Iterator<Resource> configurationResourceInheritanceChain,
- Resource contextResource, String configName, ConfigurationOverrideManager configurationOverrideManager) {
+ Resource contextResource, String configName, ConfigurationOverrideManager configurationOverrideManager,
+ boolean configResourceCollection) {
this.configMetadata = configMetadata;
this.resolvedConfigurationResource = resolvedConfigurationResource;
this.writebackConfigurationResource = writebackConfigurationResource;
@@ -59,12 +61,26 @@ final class ConfigurationDataImpl implem
this.contextResource = contextResource;
this.configName = configName;
this.configurationOverrideManager = configurationOverrideManager;
+ this.configResourceCollection = configResourceCollection;
}
public ConfigurationDataImpl(ConfigurationMetadata configMetadata,
- Resource contextResource, String configName, ConfigurationOverrideManager configurationOverrideManager) {
+ Resource contextResource, String configName, ConfigurationOverrideManager configurationOverrideManager,
+ boolean configResourceCollection) {
this(configMetadata, null, null, null,
- contextResource, configName, configurationOverrideManager);
+ contextResource, configName, configurationOverrideManager,
+ configResourceCollection);
+ }
+
+ @Override
+ public String getConfigName() {
+ return configName;
+ }
+
+ @Override
+ public String getCollectionItemName() {
+ return (configResourceCollection && resolvedConfigurationResource != null)
+ ? resolvedConfigurationResource.getName() : null;
}
@Override
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java Sat Nov 19 11:37:44 2016
@@ -38,6 +38,7 @@ import org.apache.sling.caconfig.managem
import org.apache.sling.caconfig.management.ConfigurationManager;
import org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolvingStrategyMultiplexer;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@@ -77,12 +78,12 @@ public class ConfigurationManagerImpl im
resettableConfigResourceInheritanceChain.reset();
return new ConfigurationDataImpl(configMetadata, configResource, writebackConfigResource,
applyPersistence(resettableConfigResourceInheritanceChain),
- resource, configName, configurationOverrideManager);
+ resource, configName, configurationOverrideManager, false);
}
if (configMetadata != null) {
// if no config resource found but config metadata exist return empty config data with default values
return new ConfigurationDataImpl(configMetadata,
- resource, configName, configurationOverrideManager);
+ resource, configName, configurationOverrideManager, false);
}
return null;
}
@@ -114,7 +115,7 @@ public class ConfigurationManagerImpl im
resettableConfigResourceInheritanceChain.reset();
configData.add(new ConfigurationDataImpl(configMetadata, configResource, writebackConfigResource,
applyPersistence(resettableConfigResourceInheritanceChain),
- resource, configName, configurationOverrideManager));
+ resource, configName, configurationOverrideManager, true));
}
}
return configData;
@@ -161,22 +162,22 @@ public class ConfigurationManagerImpl im
}
@Override
- public void persistCollection(Resource resource, String configName, Collection<Map<String,Object>> values) {
+ public void persistCollection(Resource resource, String configName, Collection<ResourceCollectionItem> resourceCollectionItems) {
String configResourceParentPath = configurationResourceResolvingStrategy.getResourceCollectionParentPath(resource, CONFIGS_PARENT_NAME, configName);
if (configResourceParentPath == null) {
throw new ConfigurationPersistenceException("Unable to persist configuration collection: Configuration resolving strategy returned no parent path.");
}
- if (!configurationPersistenceStrategy.persistCollection(resource.getResourceResolver(), configResourceParentPath, values)) {
+ if (!configurationPersistenceStrategy.persistCollection(resource.getResourceResolver(), configResourceParentPath, resourceCollectionItems)) {
throw new ConfigurationPersistenceException("Unable to persist configuration: No persistence strategy found.");
}
}
@Override
- public ConfigurationData newCollectionItem(String configName) {
+ public ConfigurationData newCollectionItem(Resource resource, String configName) {
ConfigurationMetadata configMetadata = configurationMetadataProvider.getConfigurationMetadata(configName);
if (configMetadata != null) {
return new ConfigurationDataImpl(configMetadata,
- null, configName, configurationOverrideManager);
+ resource, configName, configurationOverrideManager, true);
}
return null;
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java Sat Nov 19 11:37:44 2016
@@ -24,6 +24,7 @@ import java.util.Map;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.apache.sling.commons.osgi.Order;
import org.apache.sling.commons.osgi.RankedServices;
import org.osgi.service.component.annotations.Component;
@@ -87,9 +88,9 @@ public class ConfigurationPersistenceStr
*/
@Override
public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
- Collection<Map<String,Object>> propertiesCollection) {
+ Collection<ResourceCollectionItem> resourceCollectionItems) {
for (ConfigurationPersistenceStrategy item : items) {
- if (item.persistCollection(resourceResolver, configResourceCollectionParentPath, propertiesCollection)) {
+ if (item.persistCollection(resourceResolver, configResourceCollectionParentPath, resourceCollectionItems)) {
return true;
}
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/package-info.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/package-info.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/package-info.java Sat Nov 19 11:37:44 2016
@@ -21,5 +21,5 @@
* This API is only indented for advanced use cases like writing a configuration editor,
* not for "normal" applications just reading configuration.
*/
-@org.osgi.annotation.versioning.Version("1.1.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
package org.apache.sling.caconfig.management;
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java Sat Nov 19 11:37:44 2016
@@ -24,11 +24,10 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
-import java.util.Map;
-
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.junit.Rule;
import org.junit.Test;
@@ -79,9 +78,9 @@ public class DefaultConfigurationPersist
ConfigurationPersistenceStrategy underTest = context.registerInjectActivateService(new DefaultConfigurationPersistenceStrategy());
// store new config collection items
- assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/test", ImmutableList.<Map<String,Object>>of(
- ImmutableMap.<String,Object>of("prop1", "value1"),
- ImmutableMap.<String,Object>of("prop2", 5)
+ assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/test", ImmutableList.of(
+ new ResourceCollectionItem("0", ImmutableMap.<String,Object>of("prop1", "value1")),
+ new ResourceCollectionItem("1", ImmutableMap.<String,Object>of("prop2", 5))
)));
context.resourceResolver().commit();
@@ -93,7 +92,7 @@ public class DefaultConfigurationPersist
assertEquals((Integer)5, props1.get("prop2", Integer.class));
// remove config collection items
- assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/test", ImmutableList.<Map<String,Object>>of()));
+ assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/test", ImmutableList.<ResourceCollectionItem>of()));
context.resourceResolver().commit();
resource = context.resourceResolver().getResource("/conf/test");
@@ -109,7 +108,7 @@ public class DefaultConfigurationPersist
assertNull(underTest.getResource(resource));
assertFalse(underTest.persist(context.resourceResolver(), "/conf/test", ImmutableMap.<String,Object>of()));
- assertFalse(underTest.persistCollection(context.resourceResolver(), "/conf/test", ImmutableList.<Map<String,Object>>of()));
+ assertFalse(underTest.persistCollection(context.resourceResolver(), "/conf/test", ImmutableList.<ResourceCollectionItem>of()));
}
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImplTest.java Sat Nov 19 11:37:44 2016
@@ -68,7 +68,10 @@ public class ConfigurationDataImplTest {
@Test
public void testWithResourceMetadata() {
ConfigurationData underTest = new ConfigurationDataImpl(configMetadata, configResource, configResource, null,
- contextResource, "test", configurationOverrideManager);
+ contextResource, "test", configurationOverrideManager, true);
+
+ assertEquals("test", underTest.getConfigName());
+ assertEquals(configResource.getName(), underTest.getCollectionItemName());
assertEquals(configResource.getPath(), underTest.getResourcePath());
assertEquals(ImmutableSet.of("prop1", "prop2", "prop3", "prop4"), underTest.getPropertyNames());
@@ -104,7 +107,10 @@ public class ConfigurationDataImplTest {
@Test
public void testWithResourceOnly() {
ConfigurationData underTest = new ConfigurationDataImpl(null, configResource, configResource, null,
- contextResource, "test", configurationOverrideManager);
+ contextResource, "test", configurationOverrideManager, false);
+
+ assertEquals("test", underTest.getConfigName());
+ assertNull(underTest.getCollectionItemName());
assertEquals(ImmutableSet.of("prop1", "prop4"), underTest.getPropertyNames());
@@ -130,7 +136,10 @@ public class ConfigurationDataImplTest {
@Test
public void testMetadataOnly() {
ConfigurationData underTest = new ConfigurationDataImpl(configMetadata,
- contextResource, "test", configurationOverrideManager);
+ contextResource, "test", configurationOverrideManager, false);
+
+ assertEquals("test", underTest.getConfigName());
+ assertNull(underTest.getCollectionItemName());
assertEquals(ImmutableSet.of("prop1", "prop2", "prop3"), underTest.getPropertyNames());
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java Sat Nov 19 11:37:44 2016
@@ -30,7 +30,6 @@ import static org.junit.Assert.assertTru
import static org.mockito.Mockito.when;
import java.util.List;
-import java.util.Map;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
@@ -41,6 +40,7 @@ import org.apache.sling.caconfig.managem
import org.apache.sling.caconfig.management.ConfigurationManager;
import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
@@ -432,9 +432,9 @@ public class ConfigurationManagerImplTes
@Test
public void testPersistCollection() throws Exception {
- underTest.persistCollection(contextResourceNoConfig, CONFIG_COL_NAME, ImmutableList.<Map<String,Object>>of(
- ImmutableMap.<String, Object>of("prop1", "value1"),
- ImmutableMap.<String, Object>of("prop2", 5)
+ underTest.persistCollection(contextResourceNoConfig, CONFIG_COL_NAME, ImmutableList.of(
+ new ResourceCollectionItem("0", ImmutableMap.<String, Object>of("prop1", "value1")),
+ new ResourceCollectionItem("1", ImmutableMap.<String, Object>of("prop2", 5))
));
context.resourceResolver().commit();
@@ -449,7 +449,7 @@ public class ConfigurationManagerImplTes
@Test
public void testNewCollectionItem() {
- ConfigurationData newItem = underTest.newCollectionItem(CONFIG_COL_NAME);
+ ConfigurationData newItem = underTest.newCollectionItem(contextResource, CONFIG_COL_NAME);
assertNotNull(newItem);
assertEquals((Integer)5, newItem.getEffectiveValues().get("prop3", 0));
}
@@ -458,7 +458,7 @@ public class ConfigurationManagerImplTes
public void testNewCollectionItem_NoConfigMetadata() {
when(configurationMetadataProvider.getConfigurationMetadata(CONFIG_COL_NAME)).thenReturn(null);
- ConfigurationData newItem = underTest.newCollectionItem(CONFIG_COL_NAME);
+ ConfigurationData newItem = underTest.newCollectionItem(contextResource, CONFIG_COL_NAME);
assertNull(newItem);
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java Sat Nov 19 11:37:44 2016
@@ -30,6 +30,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.junit.Before;
import org.junit.Rule;
@@ -59,8 +60,9 @@ public class ConfigurationPersistenceStr
public void testWithNoStrategies() {
assertNull(underTest.getResource(resource1));
assertFalse(underTest.persist(context.resourceResolver(), "/conf/test1", resource1.getValueMap()));
- assertFalse(underTest.persistCollection(context.resourceResolver(), "/conf/testCol",
- ImmutableList.<Map<String,Object>>of(resource1.getValueMap(), resource2.getValueMap())));
+ assertFalse(underTest.persistCollection(context.resourceResolver(), "/conf/testCol", ImmutableList.of(
+ new ResourceCollectionItem(resource1.getName(), resource1.getValueMap()),
+ new ResourceCollectionItem(resource2.getName(), resource2.getValueMap()))));
}
@Test
@@ -70,8 +72,9 @@ public class ConfigurationPersistenceStr
Resource result = underTest.getResource(resource1);
assertSame(resource1, result);
assertTrue(underTest.persist(context.resourceResolver(), "/conf/test1", resource1.getValueMap()));
- assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/testCol",
- ImmutableList.<Map<String,Object>>of(resource1.getValueMap(), resource2.getValueMap())));
+ assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/testCol", ImmutableList.of(
+ new ResourceCollectionItem(resource1.getName(), resource1.getValueMap()),
+ new ResourceCollectionItem(resource2.getName(), resource2.getValueMap()))));
}
@Test
@@ -89,7 +92,7 @@ public class ConfigurationPersistenceStr
}
@Override
public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
- Collection<Map<String,Object>> propertiesCollection) {
+ Collection<ResourceCollectionItem> resourceCollectionItems) {
return false;
}
}, Constants.SERVICE_RANKING, 2000);
@@ -106,7 +109,7 @@ public class ConfigurationPersistenceStr
}
@Override
public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
- Collection<Map<String,Object>> propertiesCollection) {
+ Collection<ResourceCollectionItem> resourceCollectionItems) {
return true;
}
@@ -115,9 +118,9 @@ public class ConfigurationPersistenceStr
Resource result = underTest.getResource(resource1);
assertSame(resource2, result);
assertTrue(underTest.persist(context.resourceResolver(), "/conf/test1", resource1.getValueMap()));
- assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/testCol",
- ImmutableList.<Map<String,Object>>of(resource1.getValueMap(), resource2.getValueMap())));
+ assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/testCol", ImmutableList.of(
+ new ResourceCollectionItem(resource1.getName(), resource1.getValueMap()),
+ new ResourceCollectionItem(resource2.getName(), resource2.getValueMap()))));
}
-
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java Sat Nov 19 11:37:44 2016
@@ -32,6 +32,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceException;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
/**
* This is a variant of {@link org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy}
@@ -54,13 +55,12 @@ public class CustomConfigurationPersiste
@Override
public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
- Collection<Map<String,Object>> propertiesCollection) {
+ Collection<ResourceCollectionItem> resourceCollectionItems) {
Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, ValueMap.EMPTY);
deleteChildren(configResourceParent);
- int index = 0;
- for (Map<String,Object> properties : propertiesCollection) {
- String path = configResourceParent.getPath() + "/" + (index++) + "/jcr:content";
- getOrCreateResource(resourceResolver, path, properties);
+ for (ResourceCollectionItem item : resourceCollectionItems) {
+ String path = configResourceParent.getPath() + "/" + item.getCollectionItemName() + "/jcr:content";
+ getOrCreateResource(resourceResolver, path, item.getValues());
}
return true;
}
Modified: sling/trunk/contrib/extensions/contextaware-config/integration-tests/src/test/java/org/apache/sling/caconfig/it/ConfigurationManagerIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/integration-tests/src/test/java/org/apache/sling/caconfig/it/ConfigurationManagerIT.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/integration-tests/src/test/java/org/apache/sling/caconfig/it/ConfigurationManagerIT.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/integration-tests/src/test/java/org/apache/sling/caconfig/it/ConfigurationManagerIT.java Sat Nov 19 11:37:44 2016
@@ -38,6 +38,7 @@ import org.apache.sling.caconfig.Configu
import org.apache.sling.caconfig.it.example.SimpleConfig;
import org.apache.sling.caconfig.management.ConfigurationData;
import org.apache.sling.caconfig.management.ConfigurationManager;
+import org.apache.sling.caconfig.spi.ResourceCollectionItem;
import org.apache.sling.junit.rules.TeleporterRule;
import org.apache.sling.resourcebuilder.api.ResourceBuilder;
import org.apache.sling.resourcebuilder.api.ResourceBuilderFactory;
@@ -138,10 +139,10 @@ public class ConfigurationManagerIT {
Map<String,Object> values2 = new HashMap<>();
values2.put("intParam", 55);
values2.put("boolParam", true);
- List<Map<String,Object>> values = new ArrayList<>();
- values.add(values1);
- values.add(values2);
- configManager.persistCollection(resourcePage1, CONFIG_NAME, values);
+ List<ResourceCollectionItem> items = new ArrayList<>();
+ items.add(new ResourceCollectionItem("item1", values1));
+ items.add(new ResourceCollectionItem("item2", values2));
+ configManager.persistCollection(resourcePage1, CONFIG_NAME, items);
resourceResolver.commit();
// read config via configuration resolver
Modified: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java Sat Nov 19 11:37:44 2016
@@ -49,7 +49,8 @@ public interface ConfigurationPersistenc
* @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 ConfigurationPersistenc
* 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);
}
Added: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java?rev=1770484&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java (added)
+++ sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java Sat Nov 19 11:37:44 2016
@@ -0,0 +1,57 @@
+/*
+ * 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.Map;
+
+import org.osgi.annotation.versioning.ProviderType;
+
+/**
+ * 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;
+ }
+
+ /**
+ * @return Resource collection item name
+ */
+ public String getCollectionItemName() {
+ return collectionItemName;
+ }
+
+ /**
+ * @return Values
+ */
+ public Map<String, Object> getValues() {
+ return values;
+ }
+
+}
Propchange: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sat Nov 19 11:37:44 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ResourceCollectionItem.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/package-info.java?rev=1770484&r1=1770483&r2=1770484&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/package-info.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/package-info.java Sat Nov 19 11:37:44 2016
@@ -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;