You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2018/11/07 11:45:37 UTC

[sling-org-apache-sling-feature-apiregions] 17/19: Enable api-regions runtime support via a framework property

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

davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-apiregions.git

commit 955105cc0debde29c7b61db218aa44cd2dcf290c
Author: David Bosschaert <bo...@adobe.com>
AuthorDate: Tue Nov 6 16:21:25 2018 +0000

    Enable api-regions runtime support via a framework property
    
    Framework property org.apache.sling.feature.apiregions.regions must be
    set to enable api-regions runtime support.
---
 .../org/apache/sling/feature/apiregions/impl/Activator.java  |  8 +++++++-
 .../apache/sling/feature/apiregions/impl/RegionEnforcer.java |  7 ++++++-
 .../sling/feature/apiregions/impl/ResolverHookImpl.java      |  2 +-
 .../apache/sling/feature/apiregions/impl/ActivatorTest.java  |  1 +
 .../sling/feature/apiregions/impl/RegionEnforcerTest.java    | 12 ++++++------
 5 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java b/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
index 6ced921..95f5cc7 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
@@ -26,10 +26,16 @@ import java.util.Dictionary;
 import java.util.Hashtable;
 
 public class Activator implements BundleActivator {
+    static final String REGIONS_PROPERTY_NAME = "org.apache.sling.feature.apiregions.regions";
+
     @Override
     public synchronized void start(BundleContext context) throws Exception {
+        String regions = context.getProperty(REGIONS_PROPERTY_NAME);
+        if (regions == null)
+            return; // Component not enabled
+
         Dictionary<String, Object> props = new Hashtable<>();
-        RegionEnforcer enforcer = new RegionEnforcer(props);
+        RegionEnforcer enforcer = new RegionEnforcer(props, regions);
         context.registerService(ResolverHookFactory.class, enforcer, props);
     }
 
diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java b/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
index 56a5b74..cf20e0d 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
@@ -53,8 +53,9 @@ class RegionEnforcer implements ResolverHookFactory {
     final Map<String, Set<String>> bundleFeatureMap;
     final Map<String, Set<String>> featureRegionMap;
     final Map<String, Set<String>> regionPackageMap;
+    final Set<String> enabledRegions;
 
-    public RegionEnforcer(Dictionary<String, Object> regProps) throws IOException {
+    RegionEnforcer(Dictionary<String, Object> regProps, String regionsProp) throws IOException {
         File idbsnverFile = getDataFile(IDBSNVER_FILENAME);
         bsnVerMap = populateBSNVerMap(idbsnverFile);
         if (idbsnverFile != null) {
@@ -78,6 +79,8 @@ class RegionEnforcer implements ResolverHookFactory {
         if (regionsFile != null) {
             regProps.put(REGION_PACKAGE_FILENAME, regionsFile.getAbsolutePath());
         }
+
+        enabledRegions = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(regionsProp.split(","))));
     }
 
     private Map<Map.Entry<String, Version>, List<String>> populateBSNVerMap(File idbsnverFile) throws IOException {
@@ -151,6 +154,8 @@ class RegionEnforcer implements ResolverHookFactory {
 
     @Override
     public ResolverHook begin(Collection<BundleRevision> triggers) {
+        if (enabledRegions.size() == 0)
+            return null;
         return new ResolverHookImpl(bsnVerMap, bundleFeatureMap, featureRegionMap, regionPackageMap);
     }
 }
diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/ResolverHookImpl.java b/src/main/java/org/apache/sling/feature/apiregions/impl/ResolverHookImpl.java
index dc1d08d..e754c31 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/ResolverHookImpl.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/ResolverHookImpl.java
@@ -46,7 +46,7 @@ class ResolverHookImpl implements ResolverHook {
     final Map<String, Set<String>> featureRegionMap;
     final Map<String, Set<String>> regionPackageMap;
 
-    public ResolverHookImpl(Map<Entry<String, Version>, List<String>> bsnVerMap, Map<String, Set<String>> bundleFeatureMap,
+    ResolverHookImpl(Map<Entry<String, Version>, List<String>> bsnVerMap, Map<String, Set<String>> bundleFeatureMap,
             Map<String, Set<String>> featureRegionMap, Map<String, Set<String>> regionPackageMap) {
         this.bsnVerMap = bsnVerMap;
         this.bundleFeatureMap = bundleFeatureMap;
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
index fc19bc5..20924c9 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
@@ -56,6 +56,7 @@ public class ActivatorTest {
         expectedProps.put(FEATURE_REGION_FILENAME, f);
 
         BundleContext bc = Mockito.mock(BundleContext.class);
+        Mockito.when(bc.getProperty(Activator.REGIONS_PROPERTY_NAME)).thenReturn("*");
 
         Activator a = new Activator();
         a.start(bc);
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
index 96d33b3..5d3fa22 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
@@ -55,7 +55,7 @@ public class RegionEnforcerTest {
 
     @Test
     public void testRegionEnforcerNoConfiguration() throws Exception {
-        RegionEnforcer re = new RegionEnforcer(new Hashtable<>());
+        RegionEnforcer re = new RegionEnforcer(new Hashtable<>(), "*");
         assertEquals(0, re.bsnVerMap.size());
         assertEquals(0, re.bundleFeatureMap.size());
         assertEquals(0, re.featureRegionMap.size());
@@ -68,7 +68,7 @@ public class RegionEnforcerTest {
         System.setProperty(PROPERTIES_FILE_PREFIX + IDBSNVER_FILENAME, f);
 
         Hashtable<String, Object> props = new Hashtable<>();
-        RegionEnforcer re = new RegionEnforcer(props);
+        RegionEnforcer re = new RegionEnforcer(props, "*");
         assertEquals(2, re.bsnVerMap.size());
         assertEquals(Collections.singletonList("g:b1:1"),
                 re.bsnVerMap.get(new AbstractMap.SimpleEntry<String,Version>("b1", new Version(1,0,0))));
@@ -83,7 +83,7 @@ public class RegionEnforcerTest {
         System.setProperty(PROPERTIES_FILE_PREFIX + BUNDLE_FEATURE_FILENAME, f);
 
         Hashtable<String, Object> props = new Hashtable<>();
-        RegionEnforcer re = new RegionEnforcer(props);
+        RegionEnforcer re = new RegionEnforcer(props, "*");
         assertEquals(3, re.bundleFeatureMap.size());
         assertEquals(Collections.singleton("org.sling:something:1.2.3:slingosgifeature:myclassifier"),
                 re.bundleFeatureMap.get("org.sling:b1:1"));
@@ -100,7 +100,7 @@ public class RegionEnforcerTest {
         System.setProperty(PROPERTIES_FILE_PREFIX + FEATURE_REGION_FILENAME, f);
 
         Hashtable<String, Object> props = new Hashtable<>();
-        RegionEnforcer re = new RegionEnforcer(props);
+        RegionEnforcer re = new RegionEnforcer(props, "*");
         assertEquals(2, re.featureRegionMap.size());
         assertEquals(Collections.singleton("global"),
                 re.featureRegionMap.get("an.other:feature:123"));
@@ -115,7 +115,7 @@ public class RegionEnforcerTest {
         System.setProperty(PROPERTIES_FILE_PREFIX + REGION_PACKAGE_FILENAME, f);
 
         Hashtable<String, Object> props = new Hashtable<>();
-        RegionEnforcer re = new RegionEnforcer(props);
+        RegionEnforcer re = new RegionEnforcer(props, "*");
         assertEquals(2, re.regionPackageMap.size());
         assertEquals(Collections.singleton("xyz"),
                 re.regionPackageMap.get("internal"));
@@ -135,7 +135,7 @@ public class RegionEnforcerTest {
         System.setProperty(PROPERTIES_FILE_PREFIX + REGION_PACKAGE_FILENAME,
                 getClass().getResource("/regions1.properties").getFile());
 
-        RegionEnforcer re = new RegionEnforcer(new Hashtable<>());
+        RegionEnforcer re = new RegionEnforcer(new Hashtable<>(), "*");
         assertTrue(re.bsnVerMap.size() > 0);
         assertTrue(re.bundleFeatureMap.size() > 0);
         assertTrue(re.featureRegionMap.size() > 0);