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();
}
-
}