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() {