You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2019/01/04 19:28:23 UTC

[sling-org-apache-sling-tenant] branch org.apache.sling.tenant-1.1.3 created (now 9437233)

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

andysch pushed a change to branch org.apache.sling.tenant-1.1.3
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-tenant.git.


      at 9437233  SLING-8197 - Migrated TenantProviderImpl to OSGi R6 and moved version to 1.1.3

This branch includes the following new commits:

     new 9437233  SLING-8197 - Migrated TenantProviderImpl to OSGi R6 and moved version to 1.1.3

The 1 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.



[sling-org-apache-sling-tenant] 01/01: SLING-8197 - Migrated TenantProviderImpl to OSGi R6 and moved version to 1.1.3

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

andysch pushed a commit to branch org.apache.sling.tenant-1.1.3
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-tenant.git

commit 943723314cb5aea220c35e6c4a7398aa7082f34e
Author: Andreas Schaefer <sc...@Andreass-iMac.local>
AuthorDate: Fri Jan 4 11:23:01 2019 -0800

    SLING-8197 - Migrated TenantProviderImpl to OSGi R6 and moved version to 1.1.3
    
    This will re-introduce the OSGi services of Tenant Provider / Manager which was not created becuase the OSGi definition was still made with Felix SCR Annotations
---
 pom.xml                                            | 17 +++--
 .../sling/tenant/internal/TenantProviderImpl.java  | 88 ++++++++++++----------
 .../tenant/internal/TenantProviderImplTest.java    | 17 ++++-
 3 files changed, 75 insertions(+), 47 deletions(-)

diff --git a/pom.xml b/pom.xml
index 58827a7..81d6294 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
     </parent>
 
     <artifactId>org.apache.sling.tenant</artifactId>
-    <version>1.1.2</version>
+    <version>1.1.3-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
     <name>Apache Sling Tenant</name>
@@ -67,11 +67,6 @@
     
     <dependencies>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-            <version>1.11.0</version>
-        </dependency>
-        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
             <version>2.5.0</version>
@@ -84,6 +79,16 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.metatype.annotations</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>javax.jcr</groupId>
             <artifactId>jcr</artifactId>
         </dependency>
diff --git a/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java b/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java
index cff472e..8371471 100644
--- a/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java
+++ b/src/main/java/org/apache/sling/tenant/internal/TenantProviderImpl.java
@@ -29,16 +29,6 @@ import java.util.Map.Entry;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.PropertyUnbounded;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
-import org.apache.felix.scr.annotations.References;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.PersistenceException;
@@ -59,6 +49,15 @@ import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,24 +65,26 @@ import org.slf4j.LoggerFactory;
  * Resource based Tenant Provider implementation.
  */
 @Component(
-        metatype = true,
-        label = "Apache Sling Tenant Provider",
-        description = "Service responsible for providing Tenants",
-        immediate = true)
-@Service(value = {TenantProvider.class, TenantManager.class})
-@Property(name = Constants.SERVICE_DESCRIPTION, value = "Apache Sling Tenant Provider")
-@References({
-    @Reference(
-        name = "tenantSetup",
-        referenceInterface = TenantCustomizer.class,
-        cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
-        policy = ReferencePolicy.DYNAMIC),
-    @Reference(
-            name = "hook",
-            referenceInterface = TenantManagerHook.class,
-            cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
-            policy = ReferencePolicy.DYNAMIC)
-})
+    service = {TenantProvider.class, TenantManager.class},
+    property = {
+            Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+            Constants.SERVICE_DESCRIPTION + "=Apache Sling Tenant Provider"
+    },
+    immediate = true,
+    reference = {
+        @Reference(
+            name = "tenantSetup",
+            service = TenantCustomizer.class,
+            cardinality = ReferenceCardinality.MULTIPLE,
+            policy = ReferencePolicy.DYNAMIC),
+        @Reference(
+                name = "hook",
+                service = TenantManagerHook.class,
+                cardinality = ReferenceCardinality.MULTIPLE,
+                policy = ReferencePolicy.DYNAMIC)
+    }
+)
+@Designate(ocd = TenantProviderImpl.Configuration.class)
 public class TenantProviderImpl implements TenantProvider, TenantManager {
 
     /** default log */
@@ -94,8 +95,22 @@ public class TenantProviderImpl implements TenantProvider, TenantManager {
      */
     private static final String RESOURCE_TENANT_ROOT = "/etc/tenants";
 
-    @Property(value = RESOURCE_TENANT_ROOT, label = "Tenants Root Path", description = "Defines tenants root path")
-    private static final String TENANT_ROOT = "tenant.root";
+    @ObjectClassDefinition(name = "Apache Sling Tenant Provider",
+            description = "Service responsible for providing Tenants.")
+    public @interface Configuration {
+
+        @AttributeDefinition(
+            name = "Tenants Root Path",
+            description = "Defines tenants root path",
+            defaultValue = RESOURCE_TENANT_ROOT
+        )
+        String tenant_root();
+        @AttributeDefinition(
+            name = "Tenants Path Matcher",
+            description = "Defines tenants path matcher i.e. /content/sample/([^/]+)/*, used while resolving path to tenant"
+        )
+        String[] tenant_path_matcher();
+    }
 
     private static final String[] DEFAULT_PATH_MATCHER = {};
 
@@ -105,13 +120,6 @@ public class TenantProviderImpl implements TenantProvider, TenantManager {
     private SortedMap<Comparable<Object>, TenantManagerHook> registeredHooks = new TreeMap<Comparable<Object>, TenantManagerHook>(
             Collections.reverseOrder());
 
-    @Property(
-            value = {},
-            unbounded = PropertyUnbounded.ARRAY,
-            label = "Tenants Path Matcher",
-            description = "Defines tenants path matcher i.e. /content/sample/([^/]+)/*, used while resolving path to tenant")
-    private static final String TENANT_PATH_MATCHER = "tenant.path.matcher";
-
     private String tenantRootPath = RESOURCE_TENANT_ROOT;
 
     @Reference
@@ -122,9 +130,9 @@ public class TenantProviderImpl implements TenantProvider, TenantManager {
     private WebConsolePlugin plugin;
 
     @Activate
-    protected void activate(final BundleContext bundleContext, final Map<String, Object> properties) {
-        this.tenantRootPath = PropertiesUtil.toString(properties.get(TENANT_ROOT), RESOURCE_TENANT_ROOT);
-        this.adapterFactory = new TenantAdapterFactory(bundleContext, this, PropertiesUtil.toStringArray(properties.get(TENANT_PATH_MATCHER), DEFAULT_PATH_MATCHER));
+    protected void activate(final BundleContext bundleContext, final Configuration configuration) {
+        this.tenantRootPath = PropertiesUtil.toString(configuration.tenant_root(), RESOURCE_TENANT_ROOT);
+        this.adapterFactory = new TenantAdapterFactory(bundleContext, this, PropertiesUtil.toStringArray(configuration.tenant_path_matcher(), DEFAULT_PATH_MATCHER));
         this.plugin = new WebConsolePlugin(bundleContext, this);
     }
 
diff --git a/src/test/java/org/apache/sling/tenant/internal/TenantProviderImplTest.java b/src/test/java/org/apache/sling/tenant/internal/TenantProviderImplTest.java
index c3ff612..1628fe5 100644
--- a/src/test/java/org/apache/sling/tenant/internal/TenantProviderImplTest.java
+++ b/src/test/java/org/apache/sling/tenant/internal/TenantProviderImplTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.tenant.internal;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -41,7 +42,21 @@ public class TenantProviderImplTest {
         Mockito.when(rrf.getServiceResourceResolver(
                 Mockito.anyMapOf(String.class, Object.class))).thenReturn(rr);
         set(provider, "factory", rrf);
-        provider.activate(context, new HashMap<String, Object>());
+        TenantProviderImpl.Configuration configuration = new TenantProviderImpl.Configuration() {
+            @Override
+            public Class<? extends Annotation> annotationType() {
+                return null;
+            }
+            @Override
+            public String tenant_root() {
+                return "/etc/tenants";
+            }
+            @Override
+            public String[] tenant_path_matcher() {
+                return new String[] {};
+            }
+        };
+        provider.activate(context, configuration);
         Iterator<Tenant> tenants = provider.getTenants();
         TestCase.assertNotNull(tenants);
         TestCase.assertFalse(tenants.hasNext());