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/12/06 11:33:47 UTC
svn commit: r1772869 - in
/sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin:
./ src/main/java/org/apache/sling/testing/mock/caconfig/
src/test/java/org/apache/sling/testing/mock/caconfig/
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