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 <[email protected]> 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);
