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 2019/03/12 12:51:05 UTC
[sling-org-apache-sling-feature-apiregions] branch master updated:
Fix the region reporting on removed candidates.
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
The following commit(s) were added to refs/heads/master by this push:
new e30351b Fix the region reporting on removed candidates.
e30351b is described below
commit e30351b395b94a0a9f6f4823ed82a407a9f1fb08
Author: David Bosschaert <bo...@adobe.com>
AuthorDate: Tue Mar 12 12:50:37 2019 +0000
Fix the region reporting on removed candidates.
---
.../feature/apiregions/impl/ResolverHookImpl.java | 38 +++++++++++++++++++---
.../apiregions/impl/ResolverHookImplTest.java | 26 +++++++++++++++
2 files changed, 59 insertions(+), 5 deletions(-)
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 0bdda79..0ec8c16 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
@@ -95,7 +95,8 @@ class ResolverHookImpl implements ResolverHook {
Set<BundleCapability> coveredCaps = new HashSet<>();
- Map<BundleCapability, Set<String>> bcRegionMap = new HashMap<>();
+ Map<BundleCapability, String> bcFeatureMap = new HashMap<>();
+ String packageName = null;
nextCapability:
for (BundleCapability bc : candidates) {
BundleRevision rev = bc.getRevision();
@@ -153,7 +154,7 @@ class ResolverHookImpl implements ResolverHook {
coveredCaps.add(bc);
continue nextCapability;
}
- bcRegionMap.put(bc, capRegions);
+ bcFeatureMap.put(bc, capFeat);
List<String> sharedRegions = new ArrayList<>(reqRegions);
sharedRegions.retainAll(capRegions);
@@ -177,9 +178,9 @@ class ResolverHookImpl implements ResolverHook {
Object pkg = bc.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE);
if (pkg instanceof String) {
- String packageName = (String) pkg;
+ packageName = (String) pkg;
- Set<String> globalPackages = regionPackageMap.get("global");
+ Set<String> globalPackages = regionPackageMap.get(RegionEnforcer.GLOBAL_REGION);
if (globalPackages != null && globalPackages.contains(packageName)) {
// If the export is in the global region everyone can access
coveredCaps.add(bc);
@@ -215,7 +216,7 @@ class ResolverHookImpl implements ResolverHook {
sb.append(bc.toString());
sb.append("[Regions: ");
- sb.append(bcRegionMap.get(bc));
+ sb.append(getRegionsForPackage(packageName, bcFeatureMap.get(bc)));
sb.append("]");
}
@@ -225,6 +226,33 @@ class ResolverHookImpl implements ResolverHook {
}
}
+ List<String> getRegionsForPackage(String packageName, String feature) {
+ if (packageName == null)
+ return Collections.emptyList();
+
+ Set<String> regions = featureRegionMap.get(feature);
+ if (regions == null)
+ return Collections.emptyList();
+
+ List<String> res = new ArrayList<>();
+ boolean found = false;
+ for (String region : regions) {
+ Set<String> packages = regionPackageMap.get(region);
+ if (packages == null)
+ continue;
+
+ if (found) {
+ // Since later regions inherit from earlier ones, if the package has been found before
+ // it also applies to this region.
+ res.add(region);
+ } else if (packages.contains(packageName)) {
+ res.add(region);
+ found = true;
+ }
+ }
+ return res;
+ }
+
@Override
public void end() {
// Nothing to do
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java
index f22c212..2315267 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java
@@ -272,6 +272,32 @@ public class ResolverHookImplTest {
assertEquals(Collections.singletonList(bc13), c13);
}
+ @Test
+ public void testGetRegionsForPackage() {
+ Set<String> regions = new HashSet<>(Arrays.asList("r1", "r2", "r3"));
+ Map<String, Set<String>> featureRegionMap = Collections.singletonMap("f2", regions);
+ Map<String, Set<String>> regionPackageMap = new HashMap<>();
+
+ regionPackageMap.put("r2", Collections.singleton("a.b.c"));
+ Set<String> pkgs = new HashSet<>();
+ pkgs.add("org.foo.bar");
+ pkgs.add("org.foo.zar");
+ regionPackageMap.put("r3", pkgs);
+
+ ResolverHookImpl rh = new ResolverHookImpl(
+ Collections.<Map.Entry<String, Version>, List<String>>emptyMap(),
+ Collections.<String, Set<String>>emptyMap(), featureRegionMap, regionPackageMap);
+
+ assertEquals(Collections.emptyList(), rh.getRegionsForPackage(null, "f1"));
+ assertEquals(Collections.emptyList(), rh.getRegionsForPackage("org.foo", "f1"));
+ assertEquals(Collections.emptyList(), rh.getRegionsForPackage(null, "f2"));
+
+ assertEquals(Collections.singletonList("r3"),
+ rh.getRegionsForPackage("org.foo.bar", "f2"));
+ assertEquals(Arrays.asList("r2", "r3"),
+ rh.getRegionsForPackage("a.b.c", "f2"));
+ }
+
private BundleCapability mockCapability(String pkgName, String bid, Map<Entry<String, Version>, List<String>> bsnvermap) {
for (Map.Entry<Map.Entry<String, Version>, List<String>> entry : bsnvermap.entrySet()) {
if (entry.getValue().contains(bid)) {