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:31 UTC

[sling-org-apache-sling-feature-apiregions] 11/19: Rename whitelisting to apiregions

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 379d1d8b2a6aec7114d4d1a3be89bf5701e22fd7
Author: David Bosschaert <bo...@adobe.com>
AuthorDate: Mon Nov 5 13:46:46 2018 +0000

    Rename whitelisting to apiregions
    
    Also register resolver hook service with properties that point at the
    properties files used
---
 .../sling/feature/apiregions/impl/Activator.java   |  8 +++-
 .../feature/apiregions/impl/RegionEnforcer.java    | 50 +++++++++++++++-------
 .../feature/apiregions/impl/ResolverHookImpl.java  | 28 ++++++------
 .../feature/apiregions/impl/ActivatorTest.java     | 31 +++++++++++++-
 .../apiregions/impl/RegionEnforcerTest.java        | 21 ++++++---
 5 files changed, 100 insertions(+), 38 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 7d77d5e..6ced921 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
@@ -22,11 +22,15 @@ import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.hooks.resolver.ResolverHookFactory;
 
+import java.util.Dictionary;
+import java.util.Hashtable;
+
 public class Activator implements BundleActivator {
     @Override
     public synchronized void start(BundleContext context) throws Exception {
-        RegionEnforcer enforcer = new RegionEnforcer();
-        context.registerService(ResolverHookFactory.class, enforcer, null);
+        Dictionary<String, Object> props = new Hashtable<>();
+        RegionEnforcer enforcer = new RegionEnforcer(props);
+        context.registerService(ResolverHookFactory.class, enforcer, props);
     }
 
     @Override
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 fe30277..56a5b74 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
@@ -32,6 +32,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -42,7 +43,7 @@ import java.util.Set;
 class RegionEnforcer implements ResolverHookFactory {
     public static String GLOBAL_REGION = "global";
 
-    static final String PROPERTIES_FILE_PREFIX = "whitelisting.";
+    static final String PROPERTIES_FILE_PREFIX = "apiregions.";
     static final String IDBSNVER_FILENAME = "idbsnver.properties";
     static final String BUNDLE_FEATURE_FILENAME = "bundles.properties";
     static final String FEATURE_REGION_FILENAME = "features.properties";
@@ -53,15 +54,33 @@ class RegionEnforcer implements ResolverHookFactory {
     final Map<String, Set<String>> featureRegionMap;
     final Map<String, Set<String>> regionPackageMap;
 
-    public RegionEnforcer() throws IOException {
-        bsnVerMap = populateBSNVerMap();
-        bundleFeatureMap = populateBundleFeatureMap();
-        featureRegionMap = populateFeatureRegionMap();
-        regionPackageMap = populateRegionPackageMap();
+    public RegionEnforcer(Dictionary<String, Object> regProps) throws IOException {
+        File idbsnverFile = getDataFile(IDBSNVER_FILENAME);
+        bsnVerMap = populateBSNVerMap(idbsnverFile);
+        if (idbsnverFile != null) {
+            regProps.put(IDBSNVER_FILENAME, idbsnverFile.getAbsolutePath());
+        }
+
+        File bundlesFile = getDataFile(BUNDLE_FEATURE_FILENAME);
+        bundleFeatureMap = populateBundleFeatureMap(bundlesFile);
+        if (bundlesFile != null) {
+            regProps.put(BUNDLE_FEATURE_FILENAME, bundlesFile.getAbsolutePath());
+        }
+
+        File featuresFile = getDataFile(FEATURE_REGION_FILENAME);
+        featureRegionMap = populateFeatureRegionMap(featuresFile);
+        if (featuresFile != null) {
+            regProps.put(FEATURE_REGION_FILENAME, featuresFile.getAbsolutePath());
+        }
+
+        File regionsFile = getDataFile(REGION_PACKAGE_FILENAME);
+        regionPackageMap = populateRegionPackageMap(regionsFile);
+        if (regionsFile != null) {
+            regProps.put(REGION_PACKAGE_FILENAME, regionsFile.getAbsolutePath());
+        }
     }
 
-    private Map<Map.Entry<String, Version>, List<String>> populateBSNVerMap() throws IOException {
-        File idbsnverFile = getDataFile(IDBSNVER_FILENAME);
+    private Map<Map.Entry<String, Version>, List<String>> populateBSNVerMap(File idbsnverFile) throws IOException {
         if (idbsnverFile != null && idbsnverFile.exists()) {
             Map<Map.Entry<String, Version>, List<String>> m = new HashMap<>();
 
@@ -93,22 +112,21 @@ class RegionEnforcer implements ResolverHookFactory {
         }
     }
 
-    private Map<String, Set<String>> populateBundleFeatureMap() throws IOException {
-        return loadMap(BUNDLE_FEATURE_FILENAME);
+    private Map<String, Set<String>> populateBundleFeatureMap(File bundlesFile) throws IOException {
+        return loadMap(bundlesFile);
     }
 
-    private Map<String, Set<String>> populateFeatureRegionMap() throws IOException {
-        return loadMap(FEATURE_REGION_FILENAME);
+    private Map<String, Set<String>> populateFeatureRegionMap(File featuresFile) throws IOException {
+        return loadMap(featuresFile);
     }
 
-    private Map<String, Set<String>> populateRegionPackageMap() throws IOException {
-        return loadMap(REGION_PACKAGE_FILENAME);
+    private Map<String, Set<String>> populateRegionPackageMap(File regionsFile) throws IOException {
+        return loadMap(regionsFile);
     }
 
-    private Map<String, Set<String>> loadMap(String fileName) throws IOException {
+    private Map<String, Set<String>> loadMap(File propsFile) throws IOException {
         Map<String, Set<String>> m = new HashMap<>();
 
-        File propsFile = getDataFile(fileName);
         if (propsFile != null && propsFile.exists()) {
             Properties p = new Properties();
             try (InputStream is = new FileInputStream(propsFile)) {
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 caecb76..4939961 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
@@ -75,22 +75,24 @@ class ResolverHookImpl implements ResolverHook {
         String reqBundleName = reqBundle.getSymbolicName();
         Version reqBundleVersion = reqBundle.getVersion();
 
-        List<String> aids = bsnVerMap.get(new AbstractMap.SimpleEntry<String, Version>(reqBundleName, reqBundleVersion));
-        if (aids == null)
-            return; // TODO what to do?
         List<String> reqFeatures = new ArrayList<>();
-        for (String aid : aids) {
-            Set<String> fid = bundleFeatureMap.get(aid);
-            if (fid != null)
-                reqFeatures.addAll(fid);
-        }
-
         Set<String> reqRegions = new HashSet<>();
-        for (String feature : reqFeatures) {
-            Set<String> fr = featureRegionMap.get(feature);
-            if (fr != null) {
-                reqRegions.addAll(fr);
+        List<String> aids = bsnVerMap.get(new AbstractMap.SimpleEntry<String, Version>(reqBundleName, reqBundleVersion));
+        if (aids != null) {
+            for (String aid : aids) {
+                Set<String> fid = bundleFeatureMap.get(aid);
+                if (fid != null)
+                    reqFeatures.addAll(fid);
+            }
+
+            for (String feature : reqFeatures) {
+                Set<String> fr = featureRegionMap.get(feature);
+                if (fr != null) {
+                    reqRegions.addAll(fr);
+                }
             }
+        } else {
+            // Bundle is not coming from a feature
         }
 
         Set<BundleCapability> coveredCaps = new HashSet<>();
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 3577535..fc19bc5 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
@@ -18,14 +18,43 @@
  */
 package org.apache.sling.feature.apiregions.impl;
 
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.hooks.resolver.ResolverHookFactory;
 
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Properties;
+
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.FEATURE_REGION_FILENAME;
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_FILE_PREFIX;
+
 public class ActivatorTest {
+    private Properties savedProps;
+
+    @Before
+    public void setup() {
+        savedProps = new Properties(); // note that new Properties(props) doesn't copy
+        savedProps.putAll(System.getProperties());
+    }
+
+    @After
+    public void teardown() {
+        System.setProperties(savedProps);
+        savedProps = null;
+    }
+
     @Test
     public void testStart() throws Exception {
+        String f = getClass().getResource("/features1.properties").getFile();
+        System.setProperty(PROPERTIES_FILE_PREFIX + FEATURE_REGION_FILENAME, f);
+
+        Dictionary<String, Object> expectedProps = new Hashtable<>();
+        expectedProps.put(FEATURE_REGION_FILENAME, f);
+
         BundleContext bc = Mockito.mock(BundleContext.class);
 
         Activator a = new Activator();
@@ -34,6 +63,6 @@ public class ActivatorTest {
         Mockito.verify(bc, Mockito.times(1)).registerService(
                 Mockito.eq(ResolverHookFactory.class),
                 Mockito.isA(RegionEnforcer.class),
-                Mockito.isNull());
+                Mockito.eq(expectedProps));
     }
 }
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 3e33075..96d33b3 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
@@ -27,6 +27,7 @@ import java.util.AbstractMap;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Hashtable;
 import java.util.Properties;
 
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.BUNDLE_FEATURE_FILENAME;
@@ -54,7 +55,7 @@ public class RegionEnforcerTest {
 
     @Test
     public void testRegionEnforcerNoConfiguration() throws Exception {
-        RegionEnforcer re = new RegionEnforcer();
+        RegionEnforcer re = new RegionEnforcer(new Hashtable<>());
         assertEquals(0, re.bsnVerMap.size());
         assertEquals(0, re.bundleFeatureMap.size());
         assertEquals(0, re.featureRegionMap.size());
@@ -66,12 +67,14 @@ public class RegionEnforcerTest {
         String f = getClass().getResource("/idbsnver1.properties").getFile();
         System.setProperty(PROPERTIES_FILE_PREFIX + IDBSNVER_FILENAME, f);
 
-        RegionEnforcer re = new RegionEnforcer();
+        Hashtable<String, Object> props = new Hashtable<>();
+        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))));
         assertEquals(new HashSet<>(Arrays.asList("g:b2:1.2.3", "g2:b2:1.2.4")),
                 new HashSet<>(re.bsnVerMap.get(new AbstractMap.SimpleEntry<String,Version>("b2", new Version(1,2,3)))));
+        assertEquals(f, props.get(IDBSNVER_FILENAME));
     }
 
     @Test
@@ -79,7 +82,8 @@ public class RegionEnforcerTest {
         String f = getClass().getResource("/bundles1.properties").getFile();
         System.setProperty(PROPERTIES_FILE_PREFIX + BUNDLE_FEATURE_FILENAME, f);
 
-        RegionEnforcer re = new RegionEnforcer();
+        Hashtable<String, Object> props = new Hashtable<>();
+        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"));
@@ -87,6 +91,7 @@ public class RegionEnforcerTest {
                 re.bundleFeatureMap.get("org.sling:b2:1"));
         assertEquals(new HashSet<>(Arrays.asList("some.other:feature:123", "org.sling:something:1.2.3:slingosgifeature:myclassifier")),
                 re.bundleFeatureMap.get("org.sling:b3:1"));
+        assertEquals(f, props.get(BUNDLE_FEATURE_FILENAME));
     }
 
     @Test
@@ -94,12 +99,14 @@ public class RegionEnforcerTest {
         String f = getClass().getResource("/features1.properties").getFile();
         System.setProperty(PROPERTIES_FILE_PREFIX + FEATURE_REGION_FILENAME, f);
 
-        RegionEnforcer re = new RegionEnforcer();
+        Hashtable<String, Object> props = new Hashtable<>();
+        RegionEnforcer re = new RegionEnforcer(props);
         assertEquals(2, re.featureRegionMap.size());
         assertEquals(Collections.singleton("global"),
                 re.featureRegionMap.get("an.other:feature:123"));
         assertEquals(new HashSet<>(Arrays.asList("global", "internal")),
                 re.featureRegionMap.get("org.sling:something:1.2.3"));
+        assertEquals(f, props.get(FEATURE_REGION_FILENAME));
     }
 
     @Test
@@ -107,12 +114,14 @@ public class RegionEnforcerTest {
         String f = getClass().getResource("/regions1.properties").getFile();
         System.setProperty(PROPERTIES_FILE_PREFIX + REGION_PACKAGE_FILENAME, f);
 
-        RegionEnforcer re = new RegionEnforcer();
+        Hashtable<String, Object> props = new Hashtable<>();
+        RegionEnforcer re = new RegionEnforcer(props);
         assertEquals(2, re.regionPackageMap.size());
         assertEquals(Collections.singleton("xyz"),
                 re.regionPackageMap.get("internal"));
         assertEquals(new HashSet<>(Arrays.asList("a.b.c", "d.e.f", "test")),
                 re.regionPackageMap.get("global"));
+        assertEquals(f, props.get(REGION_PACKAGE_FILENAME));
     }
 
     @Test
@@ -126,7 +135,7 @@ public class RegionEnforcerTest {
         System.setProperty(PROPERTIES_FILE_PREFIX + REGION_PACKAGE_FILENAME,
                 getClass().getResource("/regions1.properties").getFile());
 
-        RegionEnforcer re = new RegionEnforcer();
+        RegionEnforcer re = new RegionEnforcer(new Hashtable<>());
         assertTrue(re.bsnVerMap.size() > 0);
         assertTrue(re.bundleFeatureMap.size() > 0);
         assertTrue(re.featureRegionMap.size() > 0);