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-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e54dca  Update services to use the latest Unpack impl
3e54dca is described below

commit 3e54dcaa70075dc741b3bfa474850f51db03a951
Author: David Bosschaert <[email protected]>
AuthorDate: Tue Aug 18 14:40:30 2020 +0100

    Update services to use the latest Unpack impl
---
 .../sling/feature/extension/unpack/Unpack.java     |  2 +-
 .../impl/BinaryArtifactExtensionHandler.java       | 21 ++-------
 .../unpack/impl/BinaryPackageInstallerPlugin.java  | 53 +++++++++-------------
 .../unpack/impl/InstallBinaryArchiveTask.java      | 31 ++++++++-----
 4 files changed, 45 insertions(+), 62 deletions(-)

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 e7dd3dc..499660a 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
@@ -72,7 +72,7 @@ public class Unpack
                 String key = this.registry.get(extension.getName()).get("key");
                 String value = 
this.registry.get(extension.getName()).get("value");
                 Map<String, Object> context = new HashMap<>();
-                context.put("artifact.id", artifact.getId().toMvnId());
+                context.put("artifact.id", artifact.getId());
                 context.put("dir", dir);
                 context.put("override", Boolean.toString(override));
                 context.put("key", key);
diff --git 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryArtifactExtensionHandler.java
 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryArtifactExtensionHandler.java
index 6b39691..8a6af56 100644
--- 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryArtifactExtensionHandler.java
+++ 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryArtifactExtensionHandler.java
@@ -28,36 +28,21 @@ import org.osgi.framework.BundleContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
 @Component
 public class BinaryArtifactExtensionHandler implements ExtensionHandler {
     static final String BINARY_EXTENSIONS_PROP = 
"org.apache.sling.feature.binary.extensions";
 
-    private final BundleContext bundleContext;
+    private final Unpack unpack;
 
     @Activate
     public BinaryArtifactExtensionHandler(BundleContext bc) {
-        bundleContext = bc;
+        unpack = Unpack.fromMapping(bc.getProperty(BINARY_EXTENSIONS_PROP));
     }
 
     @Override
     public boolean handle(ExtensionHandlerContext context, Extension 
extension, Feature feature) throws Exception {
-        Unpack unpack = 
Unpack.fromMapping(bundleContext.getProperty(BINARY_EXTENSIONS_PROP));
-
         return unpack.handle(extension, context.getArtifactProvider(),
-                (u,m) -> {
-                    // TODO maybe Unpack can use Map<String,Object> as context?
-                    Dictionary<String,Object> m2 = new Hashtable<>(m);
-                    m2.put("__unpack__", unpack);
-                    m2.put("artifact.id", ArtifactId.fromMvnId((String) 
m.get("artifact.id")));
-
-                    context.addInstallableArtifact((ArtifactId) 
m2.get("artifact.id"), u, m2);
-                }
-            );
+                (u,m) -> context.addInstallableArtifact((ArtifactId) 
m.get("artifact.id"), u, m));
     }
 }
 
diff --git 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryPackageInstallerPlugin.java
 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryPackageInstallerPlugin.java
index 375be83..3aae0d2 100644
--- 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryPackageInstallerPlugin.java
+++ 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/BinaryPackageInstallerPlugin.java
@@ -32,6 +32,8 @@ import 
org.apache.sling.installer.api.tasks.TransformationResult;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.Collections;
@@ -39,23 +41,25 @@ import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.function.Function;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
 import java.util.stream.Collectors;
 
 @Component(service = { InstallTaskFactory.class, ResourceTransformer.class })
-//@Designate(ocd = BinaryPackageInstallerPlugin.Config.class)
 public class BinaryPackageInstallerPlugin implements InstallTaskFactory, 
ResourceTransformer {
     public static final String BINARY_ARCHIVE_VERSION_HEADER = 
"Binary-Archive-Version";
     public static final String TYPE_BINARY_ARCHIVE = "binaryarchive";
 
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    private final Unpack unpack;
+
     @Activate
-    private BundleContext bundleContext;
+    public BinaryPackageInstallerPlugin(BundleContext bc) {
+        unpack = 
Unpack.fromMapping(bc.getProperty(BinaryArtifactExtensionHandler.BINARY_EXTENSIONS_PROP));
+    }
 
     @Override
     public TransformationResult[] transform(RegisteredResource resource) {
         if (!InstallableResource.TYPE_FILE.equals(resource.getType())) {
-//                || !handledExtension(resource.getURL())) {
             return null;
         }
 
@@ -64,31 +68,22 @@ public class BinaryPackageInstallerPlugin implements 
InstallTaskFactory, Resourc
             dict = new Hashtable<>();
         }
 
-        Unpack unpack = (Unpack) dict.get("__unpack__");
-        if (unpack == null) {
-            unpack = 
Unpack.fromMapping(bundleContext.getProperty(bundleContext.getProperty(
-                BinaryArtifactExtensionHandler.BINARY_EXTENSIONS_PROP)));
-            dict.put("__unpack__", unpack);
-        }
-
-        // Should be something like
-//        if (!unpack.handles(resource.getInputStream())) {
-//            return null;
-//        }
+        Map<String,Object> context = Collections.list(dict.keys()).stream()
+                .collect(Collectors.toMap(Function.identity(), dict::get));
 
-        try (JarInputStream jis = new 
JarInputStream(resource.getInputStream())) {
-            Manifest mf = jis.getManifest();
-            if 
(!"1".equals(mf.getMainAttributes().getValue(BINARY_ARCHIVE_VERSION_HEADER))) {
+        try {
+            if (!unpack.handles(resource.getInputStream(), context)) {
                 return null;
             }
         } catch (IOException e) {
-            // Couldn't read the manifest, maybe not a Jar file
+            logger.warn("Unable to read stream from {}", resource.getURL(), e);
             return null;
         }
-
         try {
             ArtifactId aid = (ArtifactId) dict.get("artifact.id");
             if (aid == null) {
+                // If aid is not set, the archive doesn't come from a feature 
model, and we'd have
+                // to generate some sort of ID for it...
                 String u = resource.getURL();
                 int idx = u.lastIndexOf('/');
                 String name = u.substring(idx + 1);
@@ -103,18 +98,14 @@ public class BinaryPackageInstallerPlugin implements 
InstallTaskFactory, Resourc
             tr.setResourceType(TYPE_BINARY_ARCHIVE);
             tr.setId(aid.getGroupId() + ":" + aid.getArtifactId());
             tr.setInputStream(resource.getInputStream());
-            Map<String,Object> attrs = Collections.list(dict.keys()).stream()
-                       .collect(Collectors.toMap(Function.identity(), 
dict::get));
-            tr.setAttributes(attrs);
-            tr.getAttributes().put("context", attrs);
+            tr.setAttributes(context);
+            tr.getAttributes().put("context", context);
 
             return new TransformationResult [] {tr};
         } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            logger.warn("Problem processing {}", resource.getURL(), e);
+            return null;
         }
-
-        return null;
     }
 
     @Override
@@ -124,11 +115,11 @@ public class BinaryPackageInstallerPlugin implements 
InstallTaskFactory, Resourc
             return null;
         }
         if (tr.getState() == ResourceState.UNINSTALL) {
-            // TODO
+            // TODO do we need to delete it?
             return null;
         }
 
-        return new InstallBinaryArchiveTask(group);
+        return new InstallBinaryArchiveTask(group, unpack, logger);
     }
 
 }
diff --git 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/InstallBinaryArchiveTask.java
 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/InstallBinaryArchiveTask.java
index 44507ff..cb53971 100644
--- 
a/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/InstallBinaryArchiveTask.java
+++ 
b/featuremodel-unpack-extension/src/main/java/org/apache/sling/feature/extension/unpack/impl/InstallBinaryArchiveTask.java
@@ -22,33 +22,40 @@ import org.apache.sling.feature.extension.unpack.Unpack;
 import org.apache.sling.installer.api.tasks.InstallTask;
 import org.apache.sling.installer.api.tasks.InstallationContext;
 import org.apache.sling.installer.api.tasks.TaskResourceGroup;
+import org.slf4j.Logger;
 
+import java.io.IOException;
 import java.util.Map;
 
 public class InstallBinaryArchiveTask extends InstallTask {
 
-    public InstallBinaryArchiveTask(TaskResourceGroup erl) {
+    private final Logger logger;
+    private final Unpack unpack;
+
+    public InstallBinaryArchiveTask(TaskResourceGroup erl, Unpack unpack, 
Logger logger) {
         super(erl);
+
+        this.logger = logger;
+        this.unpack = unpack;
     }
 
     @Override
     public void execute(InstallationContext ctx) {
-        Unpack unpack = (Unpack) getResource().getAttribute("__unpack__");
-        if (unpack == null)
-            return;
-
         Map<String,Object> context = (Map<String, Object>) 
getResource().getAttribute("context");
-        unpack.unpack(null, context);
-//        unpack.unpack(url, context); // TODO I only have an Inputstream
-
-        // TODO handle 'Font-Archive-Contents' (or 'Binary-Archive-Contents')?
+        if (context == null)
+            return;
 
+        try {
+            // TODO handle 'Font-Archive-Contents' (or 
'Binary-Archive-Contents')?
+            unpack.unpack(getResource().getInputStream(), context);
+        } catch (IOException e) {
+            logger.error("Problem unpacking {}", getResource().getURL(), e);
+        }
     }
 
     @Override
     public String getSortKey() {
-        // TODO Auto-generated method stub
-        return "999";
+        // TODO is this right?
+        return getResource().getEntityId();
     }
-
 }

Reply via email to