Author: sseifert
Date: Tue Dec 6 11:33:47 2016
New Revision: 1772869
URL: http://svn.apache.org/viewvc?rev=1772869&view=rev
Log:
SLING-6360 support both impl 1.1 und 1.2
Modified:
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/pom.xml
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java
Modified:
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/pom.xml?rev=1772869&r1=1772868&r2=1772869&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/pom.xml
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/pom.xml
Tue Dec 6 11:33:47 2016
@@ -87,5 +87,34 @@
<scope>compile</scope>
</dependency>
</dependencies>
+
+ <profiles>
+
+ <!-- Test with Sling CAConfig Impl/SPI 1.1 -->
+ <profile>
+ <id>caconfig-1.1</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.caconfig.api</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.caconfig.spi</artifactId>
+ <version>1.1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.caconfig.impl</artifactId>
+ <version>1.1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ </profile>
+
+ </profiles>
</project>
Modified:
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java?rev=1772869&r1=1772868&r2=1772869&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
Tue Dec 6 11:33:47 2016
@@ -19,16 +19,12 @@
package org.apache.sling.testing.mock.caconfig;
import org.apache.sling.caconfig.impl.ConfigurationBuilderAdapterFactory;
-import
org.apache.sling.caconfig.impl.ConfigurationInheritanceStrategyMultiplexer;
import org.apache.sling.caconfig.impl.ConfigurationResolverImpl;
-import
org.apache.sling.caconfig.impl.def.DefaultConfigurationInheritanceStrategy;
import
org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy;
import
org.apache.sling.caconfig.impl.metadata.AnnotationClassConfigurationMetadataProvider;
import
org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
-import org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager;
import org.apache.sling.caconfig.management.impl.ConfigurationManagerImpl;
import
org.apache.sling.caconfig.management.impl.ConfigurationPersistenceStrategyMultiplexer;
-import
org.apache.sling.caconfig.management.impl.ContextPathStrategyMultiplexerImpl;
import
org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolverImpl;
import
org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolvingStrategyMultiplexer;
import
org.apache.sling.caconfig.resource.impl.def.DefaultConfigurationResourceResolvingStrategy;
@@ -40,88 +36,118 @@ import org.osgi.annotation.versioning.Pr
/**
* Mock context plugins.
+ * The plugin supports both 1.0/1.1 and 1.2+ version of the Impl/SPI.
*/
@ProviderType
public final class ContextPlugins {
- private ContextPlugins() {
- // constants only
- }
-
- /**
- * Context plugin for Sling Context-Aware Configuration.
- */
- public static final ContextPlugin<? extends SlingContextImpl> CACONFIG = new
AbstractContextPlugin<SlingContextImpl>() {
- @Override
- public void afterSetUp(SlingContextImpl context) throws Exception {
- registerConfigurationResourceResolver(context);
- registerConfigurationResolver(context);
- registerConfigurationManagement(context);
- registerConfigurationResourceResolverDefaultImpl(context);
- registerConfigurationResolverDefaultImpl(context);
+ private ContextPlugins() {
+ // constants only
+ }
+
+ /**
+ * Context plugin for Sling Context-Aware Configuration.
+ */
+ public static final ContextPlugin<? extends SlingContextImpl> CACONFIG =
new AbstractContextPlugin<SlingContextImpl>() {
+ @Override
+ public void afterSetUp(SlingContextImpl context) throws Exception {
+ registerConfigurationResourceResolver(context);
+ registerConfigurationResolver(context);
+ registerConfigurationManagement(context);
+ registerConfigurationResourceResolverDefaultImpl(context);
+ registerConfigurationResolverDefaultImpl(context);
+
+ // Scan MANIFEST.MF in the classpath and automatically register
all Configuration annotation classes found.
+
ConfigurationMetadataUtil.addAnnotationClassesForManifestEntries(context.bundleContext());
+ }
+ };
+
+ /**
+ * Context plugin for Sling Context-Aware Configuration (without the
default implementations).
+ */
+ public static final ContextPlugin<? extends SlingContextImpl>
CACONFIG_NODEF = new AbstractContextPlugin<SlingContextImpl>() {
+ @Override
+ public void afterSetUp(SlingContextImpl context) throws Exception {
+ registerConfigurationResourceResolver(context);
+ registerConfigurationResolver(context);
+ registerConfigurationManagement(context);
+ }
+ };
+
+ /**
+ * Register all services for ConfigurationResourceResolver (without the
default implementations).
+ * @param context Sling context
+ */
+ private static void registerConfigurationResourceResolver(SlingContextImpl
context) {
+
+ if (!registerByClassName(context,
"org.apache.sling.caconfig.management.impl.ContextPathStrategyMultiplexerImpl"))
{
+ // fallback to impl 1.1
+ registerByClassName(context,
"org.apache.sling.caconfig.resource.impl.ContextPathStrategyMultiplexer");
+ }
+
+ context.registerInjectActivateService(new
ConfigurationResourceResolvingStrategyMultiplexer());
+ context.registerInjectActivateService(new
ConfigurationResourceResolverImpl());
+ }
+
+ /**
+ * Register default implementations for for ConfigurationResourceResolver.
+ * @param context Sling context
+ */
+ private static void
registerConfigurationResourceResolverDefaultImpl(SlingContextImpl context) {
+ context.registerInjectActivateService(new
DefaultContextPathStrategy());
+ context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+ }
+
+ /**
+ * Register all services for ConfigurationResolver (without the default
implementations).
+ * @param context Sling context
+ */
+ private static void registerConfigurationResolver(SlingContextImpl
context) {
+ context.registerInjectActivateService(new
ConfigurationPersistenceStrategyMultiplexer());
+
+ // only required for impl 1.2+
+ registerByClassName(context,
"org.apache.sling.caconfig.impl.ConfigurationInheritanceStrategyMultiplexer");
- // Scan MANIFEST.MF in the classpath and automatically register all
Configuration annotation classes found.
-
ConfigurationMetadataUtil.addAnnotationClassesForManifestEntries(context.bundleContext());
+ // only required for impl 1.2+
+ registerByClassName(context,
"org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager");
+
+ context.registerInjectActivateService(new ConfigurationResolverImpl());
+ context.registerInjectActivateService(new
ConfigurationBuilderAdapterFactory());
+ }
+
+ /**
+ * Register default implementations for for ConfigurationResolver.
+ * @param context Sling context
+ */
+ private static void
registerConfigurationResolverDefaultImpl(SlingContextImpl context) {
+ context.registerInjectActivateService(new
DefaultConfigurationPersistenceStrategy());
+
+ // only required for impl 1.2+
+
registerByClassName(context,"org.apache.sling.caconfig.impl.def.DefaultConfigurationInheritanceStrategy");
+ }
+
+ private static void registerConfigurationManagement(SlingContextImpl
context) {
+ context.registerInjectActivateService(new
ConfigurationMetadataProviderMultiplexer());
+ context.registerInjectActivateService(new ConfigurationManagerImpl());
+ context.registerInjectActivateService(new
AnnotationClassConfigurationMetadataProvider());
+ }
+
+ private static boolean registerByClassName(SlingContextImpl context,
String className) {
+ try {
+ Class<?> clazz = Class.forName(className);
+ context.registerInjectActivateService(clazz.newInstance());
+ return true;
+ }
+ catch (ClassNotFoundException ex) {
+ return false;
+ }
+ catch (InstantiationException ex) {
+ throw new RuntimeException(ex);
+ }
+ catch (IllegalAccessException ex) {
+ throw new RuntimeException(ex);
+ }
+
}
- };
- /**
- * Context plugin for Sling Context-Aware Configuration (without the default
implentations).
- */
- public static final ContextPlugin<? extends SlingContextImpl> CACONFIG_NODEF
= new AbstractContextPlugin<SlingContextImpl>() {
- @Override
- public void afterSetUp(SlingContextImpl context) throws Exception {
- registerConfigurationResourceResolver(context);
- registerConfigurationResolver(context);
- registerConfigurationManagement(context);
- }
- };
-
- /**
- * Register all services for ConfigurationResourceResolver (without the
default implementations).
- * @param context Sling context
- */
- private static void registerConfigurationResourceResolver(SlingContextImpl
context) {
- context.registerInjectActivateService(new
ContextPathStrategyMultiplexerImpl());
- context.registerInjectActivateService(new
ConfigurationResourceResolvingStrategyMultiplexer());
- context.registerInjectActivateService(new
ConfigurationResourceResolverImpl());
- }
-
- /**
- * Register default implementations for for ConfigurationResourceResolver.
- * @param context Sling context
- */
- private static void
registerConfigurationResourceResolverDefaultImpl(SlingContextImpl context) {
- context.registerInjectActivateService(new DefaultContextPathStrategy());
- context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
- }
-
-
- /**
- * Register all services for ConfigurationResolver (without the default
implementations).
- * @param context Sling context
- */
- private static void registerConfigurationResolver(SlingContextImpl context) {
- context.registerInjectActivateService(new
ConfigurationPersistenceStrategyMultiplexer());
- context.registerInjectActivateService(new
ConfigurationInheritanceStrategyMultiplexer());
- context.registerInjectActivateService(new
ConfigurationOverrideManager());
- context.registerInjectActivateService(new ConfigurationResolverImpl());
- context.registerInjectActivateService(new
ConfigurationBuilderAdapterFactory());
- }
-
- /**
- * Register default implementations for for ConfigurationResolver.
- * @param context Sling context
- */
- private static void
registerConfigurationResolverDefaultImpl(SlingContextImpl context) {
- context.registerInjectActivateService(new
DefaultConfigurationPersistenceStrategy());
- context.registerInjectActivateService(new
DefaultConfigurationInheritanceStrategy());
- }
-
- private static void registerConfigurationManagement(SlingContextImpl
context) {
- context.registerInjectActivateService(new
ConfigurationMetadataProviderMultiplexer());
- context.registerInjectActivateService(new ConfigurationManagerImpl());
- context.registerInjectActivateService(new
AnnotationClassConfigurationMetadataProvider());
- }
-
}
Modified:
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java?rev=1772869&r1=1772868&r2=1772869&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/test/java/org/apache/sling/testing/mock/caconfig/ContextPluginsTest.java
Tue Dec 6 11:33:47 2016
@@ -22,11 +22,13 @@ import static org.apache.sling.testing.m
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import java.lang.reflect.Method;
+import java.util.Map;
+
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.caconfig.ConfigurationBuilder;
import org.apache.sling.caconfig.management.ConfigurationManager;
-import org.apache.sling.caconfig.spi.ConfigurationPersistData;
import org.apache.sling.testing.mock.caconfig.example.SimpleConfig;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.apache.sling.testing.mock.sling.junit.SlingContextBuilder;
@@ -54,12 +56,44 @@ public class ContextPluginsTest {
MockContextAwareConfig.registerAnnotationClasses(context.bundleContext(),
SimpleConfig.class);
// write config
- ConfigurationManager configManager =
context.getService(ConfigurationManager.class);
- configManager.persistConfiguration(contextResource, CONFIG_NAME,
- new ConfigurationPersistData(ImmutableMap.<String, Object>of(
+ writeConfig(contextResource, CONFIG_NAME, ImmutableMap.<String,
Object>of(
"stringParam", "value1",
"intParam", 123,
- "boolParam", true)));
+ "boolParam", true));
+ }
+
+ /**
+ * Write configuration for impl 1.2
+ */
+ private void writeConfig(Resource contextResource, String configName,
Map<String,Object> props) {
+ try {
+ Class<?> configurationPersistDataClass;
+ try {
+ configurationPersistDataClass =
Class.forName("org.apache.sling.caconfig.spi.ConfigurationPersistData");
+ }
+ catch (ClassNotFoundException e) {
+ // fallback to caconfig impl 1.1
+ writeConfigImpl11(contextResource, configName, props);
+ return;
+ }
+
+ Object persistData =
configurationPersistDataClass.getConstructor(Map.class).newInstance(props);
+ ConfigurationManager configManager =
context.getService(ConfigurationManager.class);
+ Method persistMethod =
ConfigurationManager.class.getMethod("persistConfiguration", Resource.class,
String.class, configurationPersistDataClass);
+ persistMethod.invoke(configManager, contextResource, configName,
persistData);
+ }
+ catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ /**
+ * Fallback: Write configuration for impl 1.1
+ */
+ private void writeConfigImpl11(Resource contextResource, String
configName, Map<String,Object> props) throws Exception {
+ ConfigurationManager configManager =
context.getService(ConfigurationManager.class);
+ Method persistMethod = ConfigurationManager.class.getMethod("persist",
Resource.class, String.class, Map.class);
+ persistMethod.invoke(configManager, contextResource, configName,
props);
}
@Test