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.
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.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 @@
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 @@
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 @@
@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 @@
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 @@
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 @@
@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 @@
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 @@
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 @@
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 @@
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 @@
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);