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/07/12 21:01:22 UTC

[sling-org-apache-sling-feature-launcher] branch features-service updated: Configure WhitelistServiceFactory

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

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


The following commit(s) were added to refs/heads/features-service by this push:
     new 12142b7  Configure WhitelistServiceFactory
12142b7 is described below

commit 12142b79aa41af556286eb6a0ad036a9c48516ea
Author: David Bosschaert <bo...@adobe.com>
AuthorDate: Thu Jul 12 23:01:08 2018 +0200

    Configure WhitelistServiceFactory
---
 .../feature/launcher/impl/FeatureProcessor.java    | 41 ++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index 053f7d0..4ed9916 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -33,17 +33,22 @@ import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.StringReader;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonObject;
 import javax.json.JsonReader;
+import javax.json.JsonString;
+import javax.json.JsonValue;
 
 public class FeatureProcessor {
     private static final String FEATURES_SERVICE_FACTORY = "org.apache.sling.feature.service.FeaturesFactory";
-    private static final String WHITELIST_ENFORCER_PID = "org.apache.sling.feature.whitelist.impl.WhitelistEnforcer";
+    private static final String WHITELIST_SERVICE_FACTORY = "org.apache.sling.feature.whitelist.WhitelistServiceFactory";
 
     /**
      * Initialize the launcher
@@ -143,11 +148,26 @@ public class FeatureProcessor {
                     config.getInstallation().addConfiguration(cfg.getName(), cfg.getFactoryPid(), cfg.getProperties());
             } else if ( ext.getName().equals("bundle-feature-mapping") ) {
                 try (JsonReader reader = Json.createReader(new StringReader(ext.getJSON()))) {
-
                     JsonArray array = reader.readArray();
                     JsonObject jo = array.getJsonObject(0);
                     config.getInstallation().getAdditionalOptions().put(FEATURES_SERVICE_FACTORY, jo);
                 }
+            } else if ( ext.getName().equals("feature-region-mapping") ) {
+                try (JsonReader reader = Json.createReader(new StringReader(ext.getJSON()))) {
+                    JsonArray array = reader.readArray();
+                    JsonObject jo = array.getJsonObject(0);
+
+                    Map<String, Map<String, Set<String>>> m = new HashMap<>();
+                    JsonValue pv = jo.get("packages");
+                    if (pv instanceof JsonObject) {
+                        m.put("packages", convertToMapOfSet(pv));
+                    }
+                    JsonValue rv = jo.get("regions");
+                    if (rv instanceof JsonObject) {
+                        m.put("regions", convertToMapOfSet(rv));
+                    }
+                    config.getInstallation().getAdditionalOptions().put(WHITELIST_SERVICE_FACTORY, m);
+                }
             } else {
                 if ( ext.isRequired() ) {
                     throw new Exception("Unknown required extension " + ext.getName());
@@ -169,4 +189,21 @@ public class FeatureProcessor {
             }
         }
     }
+
+    private static Map<String, Set<String>> convertToMapOfSet(JsonValue jv) {
+        Map<String, Set<String>> mapping = new HashMap<>();
+        for (Map.Entry<String, JsonValue> entry : ((JsonObject) jv).entrySet()) {
+            Set<String> valSet = new HashSet<>();
+            JsonValue val = entry.getValue();
+            if (val instanceof JsonArray) {
+                for (JsonValue v : ((JsonArray) val)) {
+                    if (v instanceof JsonString) {
+                        valSet.add(((JsonString) v).getString());
+                    }
+                }
+            }
+            mapping.put(entry.getKey(), valSet);
+        }
+        return mapping;
+    }
 }