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

pauls pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new d3e9215  SLING-9670: add a new unpack extension for the feature model.
d3e9215 is described below

commit d3e9215a37acb8a353c6ff43411189cf5807bdf0
Author: Karl Pauls <[email protected]>
AuthorDate: Mon Aug 17 17:30:53 2020 +0200

    SLING-9670: add a new unpack extension for the feature model.
---
 .../sling/feature/extension/unpack/Unpack.java     | 36 +++++++++++++++++++++-
 .../extension/unpack/UnpackLauncherExtension.java  |  4 +++
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/Unpack.java
 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/Unpack.java
index 93b3583..43b8c89 100644
--- 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/Unpack.java
+++ 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/Unpack.java
@@ -69,9 +69,13 @@ public class Unpack
                 String dir = this.registry.get(extension.getName()).get("dir");
                 boolean override = 
Boolean.parseBoolean(this.registry.get(extension.getName()).get("override"));
                 URL url = provider.provide(artifact.getId());
+                String key = this.registry.get(extension.getName()).get("key");
+                String value = 
this.registry.get(extension.getName()).get("value");
                 Map<String, String> context = new HashMap<>();
                 context.put("dir", dir);
                 context.put("override", Boolean.toString(override));
+                context.put("key", key);
+                context.put("value", value);
                 handler.accept(url, context);
             }
             return true;
@@ -80,6 +84,36 @@ public class Unpack
         }
     }
 
+    public boolean handle(URL url, Map<String, String> context) {
+        String dir = context.get("dir");
+        String key;
+        String value;
+        if (dir == null && this.defaultMapping != null){
+            dir = this.registry.get(defaultMapping).get("dir");
+            key = this.registry.get(defaultMapping).get("key");
+            value = this.registry.get(defaultMapping).get("value");
+        }
+        else {
+            key = context.get("key");
+            value = this.registry.get(defaultMapping).get("value");
+        }
+        if (dir == null) {
+            return false;
+        }
+        if (key != null)
+        {
+            try (JarFile jarFile = IOUtils.getJarFileFromURL(url, true, null))
+            {
+                return 
jarFile.getManifest().getMainAttributes().containsKey(key) && 
jarFile.getManifest().getMainAttributes().getValue(key).equalsIgnoreCase(value);
+            }
+            catch (IOException ex)
+            {
+                throw new UncheckedIOException(ex);
+            }
+        }
+        return false;
+    }
+
     public void unpack(URL url, Map<String, String> context) {
         try
         {
@@ -106,7 +140,7 @@ public class Unpack
     {
         Map<String, Map<String, String>> registry = new HashMap<>();
 
-        // Syntax: 
system-fonts;dir:=abc;overwrite:=true,customer-fonts;dir:=eft;default=true
+        // Syntax: 
system-fonts;dir:=abc;overwrite:=true,customer-fonts;dir:=eft;default=true;key=foobar;value=baz
         Clause[] extClauses = Parser.parseHeader(mapping);
         for (Clause c : extClauses) {
             Map<String,String> cfg = new HashMap<>();
diff --git 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/UnpackLauncherExtension.java
 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/UnpackLauncherExtension.java
index 1d9d912..7301312 100644
--- 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/UnpackLauncherExtension.java
+++ 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/UnpackLauncherExtension.java
@@ -40,6 +40,10 @@ public class UnpackLauncherExtension implements 
ExtensionHandler
         {
             String mapping = 
extensionContext.getFrameworkProperties().get(UNPACK_MAPPING_KEY);
 
+            if (mapping == null || mapping.isEmpty()) {
+                mapping = System.getProperty(UNPACK_MAPPING_KEY);
+            }
+
             if (mapping != null && !mapping.isEmpty())
             {
                 return Unpack.fromMapping(mapping).handle(extension, new 
ArtifactProvider() {

Reply via email to