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 2017/11/06 17:11:49 UTC
[sling-org-apache-sling-caconfig-impl] branch master updated:
SLING-7230 CAConfig Impl: Allow to configure alterantive lookup resource
names for configuration collection properties
This is an automated email from the ASF dual-hosted git repository.
sseifert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-impl.git
The following commit(s) were added to refs/heads/master by this push:
new 3e2166c SLING-7230 CAConfig Impl: Allow to configure alterantive lookup resource names for configuration collection properties
3e2166c is described below
commit 3e2166c03caa92eaacfc16daa099670b5b10030b
Author: sseifert <ss...@pro-vision.de>
AuthorDate: Mon Nov 6 18:11:42 2017 +0100
SLING-7230 CAConfig Impl: Allow to configure alterantive lookup resource names for configuration collection properties
---
.../management/ConfigurationManagementSettings.java | 6 ++++++
.../impl/ConfigurationManagementSettingsImpl.java | 21 +++++++++++++++++++++
.../management/impl/ConfigurationManagerImpl.java | 8 +++++++-
.../sling/caconfig/management/package-info.java | 2 +-
.../ConfigurationManagementSettingsImplTest.java | 14 +++++++-------
...figurationManagerImplCustomPersistence2Test.java | 14 ++++++++++++++
.../impl/ConfigurationManagerImplTest.java | 14 ++++++++++++--
.../CustomConfigurationPersistenceStrategy2.java | 3 ++-
8 files changed, 70 insertions(+), 12 deletions(-)
diff --git a/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java b/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java
index 7a0fc82..0b865cf 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java
@@ -18,6 +18,7 @@
*/
package org.apache.sling.caconfig.management;
+import java.util.Collection;
import java.util.Set;
import org.osgi.annotation.versioning.ProviderType;
@@ -34,5 +35,10 @@ public interface ConfigurationManagementSettings {
* @return Property names that should be ignored/filtered out from the given set of property names.
*/
Set<String> getIgnoredPropertyNames(Set<String> propertyNames);
+
+ /**
+ * @return Config collection parent properties resource names.
+ */
+ Collection<String> getConfigCollectionPropertiesResourceNames();
}
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java
index 11807df..94a99e0 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java
@@ -19,6 +19,9 @@
package org.apache.sling.caconfig.management.impl;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -48,11 +51,17 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
"^jcr:.+$"
};
+ @AttributeDefinition(name="Config collection parent properties resource names",
+ description = "Names of resource to try to look up configuration collection properties in. If list is empty only the collection parent resource is checked." +
+ " If the list is not empty than only those listed resources are used for look up. If you want to include the collection parent resource you can use a dot for the value.")
+ String[] configCollectionPropertiesResourceNames();
+
}
private static final Logger log = LoggerFactory.getLogger(ConfigurationManagementSettingsImpl.class);
private Pattern[] ignorePropertyNameRegex;
+ private Collection<String> configCollectionPropertiesResourceNames;
@Activate
@@ -66,7 +75,14 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
log.warn("Ignoring invalid regex pattern: " + patternString, ex);
}
}
+
this.ignorePropertyNameRegex = patterns.toArray(new Pattern[patterns.size()]);
+
+ String[] configCollectionPropertiesResourceNames = config.configCollectionPropertiesResourceNames();
+ if (configCollectionPropertiesResourceNames == null || configCollectionPropertiesResourceNames.length == 0) {
+ configCollectionPropertiesResourceNames = new String[] { "." };
+ }
+ this.configCollectionPropertiesResourceNames = Collections.unmodifiableList(Arrays.asList(configCollectionPropertiesResourceNames));
}
@Override
@@ -83,4 +99,9 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
return ignoredPropertyNames;
}
+ @Override
+ public Collection<String> getConfigCollectionPropertiesResourceNames() {
+ return configCollectionPropertiesResourceNames;
+ }
+
}
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
index 0fc6d9e..615d195 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
@@ -216,7 +216,13 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
if (writebackConfigResourceCollectionParentPath != null) {
Resource writebackConfigResourceCollectionParent = resource.getResourceResolver().getResource(writebackConfigResourceCollectionParentPath);
if (writebackConfigResourceCollectionParent != null) {
- resourceCollectionParentProps = writebackConfigResourceCollectionParent.getValueMap();
+ for (String resourceName : configurationManagementSettings.getConfigCollectionPropertiesResourceNames()) {
+ Resource propsResource = writebackConfigResourceCollectionParent.getChild(resourceName);
+ if (propsResource != null) {
+ resourceCollectionParentProps = propsResource.getValueMap();
+ break;
+ }
+ }
}
}
diff --git a/src/main/java/org/apache/sling/caconfig/management/package-info.java b/src/main/java/org/apache/sling/caconfig/management/package-info.java
index 432ec29..adde79c 100644
--- a/src/main/java/org/apache/sling/caconfig/management/package-info.java
+++ b/src/main/java/org/apache/sling/caconfig/management/package-info.java
@@ -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("2.2.0")
+@org.osgi.annotation.versioning.Version("2.3.0")
package org.apache.sling.caconfig.management;
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java
index 2cd5e06..cacb4de 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java
@@ -22,10 +22,10 @@ import static org.junit.Assert.assertEquals;
import org.apache.sling.caconfig.management.ConfigurationManagementSettings;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
-import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
public class ConfigurationManagementSettingsImplTest {
@@ -33,11 +33,6 @@ public class ConfigurationManagementSettingsImplTest {
@Rule
public SlingContext context = new SlingContext();
- @Before
- public void setUp() {
-
- }
-
@Test
public void testDefault() {
ConfigurationManagementSettings underTest = context.registerInjectActivateService(new ConfigurationManagementSettingsImpl());
@@ -45,16 +40,21 @@ public class ConfigurationManagementSettingsImplTest {
assertEquals(ImmutableSet.<String>of(), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of()));
assertEquals(ImmutableSet.<String>of(), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "def")));
assertEquals(ImmutableSet.<String>of("jcr:xyz", "jcr:def"), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "jcr:xyz", "jcr:def")));
+
+ assertEquals(ImmutableList.of("."), underTest.getConfigCollectionPropertiesResourceNames());
}
@Test
public void testCustomConfig() {
ConfigurationManagementSettings underTest = context.registerInjectActivateService(new ConfigurationManagementSettingsImpl(),
- "ignorePropertyNameRegex", new String[] { "^.*e.*$", "^.*b.*$" });
+ "ignorePropertyNameRegex", new String[] { "^.*e.*$", "^.*b.*$" },
+ "configCollectionPropertiesResourceNames", new String[] { "a", "b" });
assertEquals(ImmutableSet.<String>of(), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of()));
assertEquals(ImmutableSet.<String>of("abc", "def"), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "def")));
assertEquals(ImmutableSet.<String>of("abc", "jcr:def"), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "jcr:xyz", "jcr:def")));
+
+ assertEquals(ImmutableList.of("a", "b"), underTest.getConfigCollectionPropertiesResourceNames());
}
}
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence2Test.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence2Test.java
index a548cb3..11605e2 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence2Test.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence2Test.java
@@ -20,12 +20,16 @@ package org.apache.sling.caconfig.management.impl;
import static org.apache.sling.caconfig.management.impl.CustomConfigurationPersistenceStrategy2.containsJcrContent;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.framework.Constants;
+import org.osgi.service.cm.ConfigurationAdmin;
/**
* Test {@link ConfigurationManagerImpl} with custom persistence.
@@ -33,6 +37,16 @@ import org.osgi.framework.Constants;
@RunWith(MockitoJUnitRunner.class)
public class ConfigurationManagerImplCustomPersistence2Test extends ConfigurationManagerImplTest {
+ @Override
+ protected void provideCustomOsgiConfig() throws Exception {
+ // provide custom lookup resource name for collection properties
+ ConfigurationAdmin configAdmin = context.getService(ConfigurationAdmin.class);
+ org.osgi.service.cm.Configuration mgmtSettingsConfig = configAdmin.getConfiguration(ConfigurationManagementSettingsImpl.class.getName());
+ Dictionary<String, Object> mgmtSettings = new Hashtable<>();
+ mgmtSettings.put("configCollectionPropertiesResourceNames", new String[] { "colPropsResource", "." });
+ mgmtSettingsConfig.update(mgmtSettings);
+ }
+
@Before
public void setUpCustomPersistence() {
// custom strategy which redirects all config resources to a jcr:content subnode
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
index fbed72f..8017ebd 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
@@ -81,7 +81,9 @@ public class ConfigurationManagerImplTest {
private static final String CONFIG_NESTED_NAME = "testConfigNested";
@Before
- public void setUp() {
+ public void setUp() throws Exception {
+ provideCustomOsgiConfig();
+
context.registerService(ConfigurationMetadataProvider.class, configurationMetadataProvider);
ConfigurationTestUtils.registerConfigurationResolver(context,
"configBucketNames", getAlternativeBucketNames());
@@ -196,6 +198,10 @@ public class ConfigurationManagerImplTest {
when(configurationMetadataProvider.getConfigurationNames()).thenReturn(ImmutableSortedSet.of(CONFIG_NAME, CONFIG_COL_NAME, CONFIG_NESTED_NAME));
}
+ protected void provideCustomOsgiConfig() throws Exception {
+ // may be overwritten by sublcasses
+ }
+
protected String getConfigResolvePath(String path) {
return path;
}
@@ -590,7 +596,8 @@ public class ConfigurationManagerImplTest {
new ConfigurationCollectionPersistData(ImmutableList.of(
new ConfigurationPersistData(ImmutableMap.<String, Object>of("prop1", "value1")).collectionItemName("0"),
new ConfigurationPersistData(ImmutableMap.<String, Object>of("prop2", 5)).collectionItemName("1"))
- ));
+ ).properties(ImmutableMap.<String, Object>of("sling:configCollectionInherit", true))
+ );
context.resourceResolver().commit();
String configPath0 = getConfigCollectionItemPersistPath(getConfigCollectionParentPersistPath("/conf/testNoConfig/sling:configs/" + CONFIG_COL_NAME) + "/0");
@@ -600,6 +607,9 @@ public class ConfigurationManagerImplTest {
String configPath1 = getConfigCollectionItemPersistPath(getConfigCollectionParentPersistPath("/conf/testNoConfig/sling:configs/" + CONFIG_COL_NAME) + "/1");
ValueMap props1 = context.resourceResolver().getResource(configPath1).getValueMap();
assertEquals((Integer)5, props1.get("prop2"));
+
+ ConfigurationCollectionData colData = underTest.getConfigurationCollection(contextResourceNoConfig, CONFIG_COL_NAME);
+ assertEquals(true, colData.getProperties().get("sling:configCollectionInherit"));
}
@Test
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
index 733495c..da64c00 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
@@ -158,7 +158,8 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
// if resource collection parent properties are given replace them as well
if (data.getProperties() != null) {
- replaceProperties(configResourceParent, data.getProperties());
+ Resource propsResource = getOrCreateResource(resourceResolver, parentPath + "/colPropsResource", ValueMap.EMPTY);
+ replaceProperties(propsResource, data.getProperties());
}
commit(resourceResolver);
--
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].