You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/07/10 10:03:13 UTC
[sling-org-apache-sling-feature-cpconverter] branch SLING-8569
updated: SLING-8569 - Detect & reports PackageTypes and nesting structures
during conversion
This is an automated email from the ASF dual-hosted git repository.
simonetripodi pushed a commit to branch SLING-8569
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git
The following commit(s) were added to refs/heads/SLING-8569 by this push:
new 1cc6f81 SLING-8569 - Detect & reports PackageTypes and nesting structures during conversion
1cc6f81 is described below
commit 1cc6f813bc70d80abf924c0e44953f446c66da82
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Wed Jul 10 12:03:05 2019 +0200
SLING-8569 - Detect & reports PackageTypes and nesting structures during
conversion
improved generated CSV adding the absolute path column
added columns description
---
.../vltpkg/DefaultPackagesEventsEmitter.java | 43 +++++++++++++++-------
.../vltpkg/PackagesEventsEmitterTest.java | 20 +++++++---
2 files changed, 44 insertions(+), 19 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
index a37ad08..30d1d49 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
@@ -16,6 +16,8 @@
*/
package org.apache.sling.feature.cpconverter.vltpkg;
+import static java.util.stream.Collectors.joining;
+
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -26,6 +28,7 @@ import java.util.Stack;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.PackageType;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
@@ -36,6 +39,8 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter
private static final String FILENAME = "content-packages.csv";
+ private static final String PATH_SEPARATOR_CHAR = "!";
+
public static DefaultPackagesEventsEmitter open(File featureModelsOutputDirectory) throws IOException {
if (!featureModelsOutputDirectory.exists()) {
featureModelsOutputDirectory.mkdirs();
@@ -45,56 +50,68 @@ public final class DefaultPackagesEventsEmitter implements PackagesEventsEmitter
return new DefaultPackagesEventsEmitter(new FileWriter(contentPackagesFiles));
}
- private final Stack<VaultPackage> hierarchy = new Stack<>();
+ private final Stack<String> paths = new Stack<>();
+
+ private final Stack<PackageId> hierarchy = new Stack<>();
private final PrintWriter writer;
+ private VaultPackage current;
+
protected DefaultPackagesEventsEmitter(Writer writer) {
this.writer = new PrintWriter(writer, true);
}
@Override
public void start() {
- writer.printf("# File created on %s by the Apache Sling Content Package to Sling Feature converter%n", new Date());
+ writer.printf("# File created on %s by the Apache Sling Content Package to Sling Feature converter%n", new Date())
+ .printf("# content-package path, content-package ID, content-package type, content-package parent ID, path in parent content-package, absolute path%n");
}
@Override
public void end() {
writer.close();
+ paths.clear();
+ hierarchy.clear();
}
@Override
public void startPackage(VaultPackage vaultPackage) {
- hierarchy.add(vaultPackage);
+ paths.add(vaultPackage.getFile().getAbsolutePath());
+ hierarchy.add(vaultPackage.getId());
+ current = vaultPackage;
- writer.printf("%s,%s,%s,,%n",
- vaultPackage.getFile(),
- vaultPackage.getId(),
+ writer.printf("%s,%s,%s,,,%n",
+ paths.peek(),
+ hierarchy.peek(),
detectPackageType(vaultPackage));
}
@Override
public void endPackage() {
+ paths.pop();
hierarchy.pop();
}
@Override
public void startSubPackage(String path, VaultPackage vaultPackage) {
- VaultPackage parent = hierarchy.peek();
+ paths.add(path);
+ String absolutePath = paths.stream().collect(joining(PATH_SEPARATOR_CHAR));
- writer.printf("%s,%s,%s,%s,%s%n",
- parent.getFile(),
+ writer.printf("%s,%s,%s,%s,%s,%s%n",
+ current.getFile().getAbsolutePath(),
vaultPackage.getId(),
detectPackageType(vaultPackage),
- parent.getId(),
- path);
+ hierarchy.peek(),
+ path,
+ absolutePath);
- hierarchy.add(vaultPackage);
+ hierarchy.add(vaultPackage.getId());
}
@Override
public void endSubPackage() {
- hierarchy.pop();
+ endPackage();
}
private static PackageType detectPackageType(VaultPackage vaultPackage) {
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
index 0f1ef7c..7bf35bf 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
@@ -46,23 +46,31 @@ public class PackagesEventsEmitterTest {
when(contentChild.getPackageType()).thenReturn(PackageType.CONTENT);
when(contentChild.getId()).thenReturn(new PackageId("apache/sling", "content-child", "1.0.0"));
emitter.startSubPackage("/jcr_root/etc/packages/org/apache/sling/content-child-1.0.zip", contentChild);
- emitter.endPackage();
+ emitter.endSubPackage();
VaultPackage applicationChild = mock(VaultPackage.class);
when(applicationChild.getPackageType()).thenReturn(PackageType.APPLICATION);
when(applicationChild.getId()).thenReturn(new PackageId("apache/sling", "application-child", "1.0.0"));
emitter.startSubPackage("/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip", applicationChild);
- emitter.endPackage();
+
+ VaultPackage nestedChild = mock(VaultPackage.class);
+ when(nestedChild.getPackageType()).thenReturn(PackageType.CONTAINER);
+ when(nestedChild.getId()).thenReturn(new PackageId("apache/sling", "nested-child", "1.0.0"));
+ emitter.startSubPackage("/jcr_root/etc/packages/org/apache/sling/nested-child-1.0.zip", nestedChild);
+ emitter.endSubPackage();
+
+ // applicationChild
+ emitter.endSubPackage();
emitter.endPackage();
emitter.end();
String actual = stringWriter.toString();
- String expected = "/org/apache/sling/content-package.zip,apache/sling:parent:1.0.0,MIXED,,\n" +
- "/org/apache/sling/content-package.zip,apache/sling:content-child:1.0.0,CONTENT,apache/sling:parent:1.0.0,/jcr_root/etc/packages/org/apache/sling/content-child-1.0.zip\n" +
- "/org/apache/sling/content-package.zip,apache/sling:application-child:1.0.0,APPLICATION,apache/sling:parent:1.0.0,/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip\n";
-
+ String expected = "/org/apache/sling/content-package.zip,apache/sling:parent:1.0.0,MIXED,,,\n" +
+ "/org/apache/sling/content-package.zip,apache/sling:content-child:1.0.0,CONTENT,apache/sling:parent:1.0.0,/jcr_root/etc/packages/org/apache/sling/content-child-1.0.zip,/org/apache/sling/content-package.zip!/jcr_root/etc/packages/org/apache/sling/content-child-1.0.zip\n" +
+ "/org/apache/sling/content-package.zip,apache/sling:application-child:1.0.0,APPLICATION,apache/sling:parent:1.0.0,/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip,/org/apache/sling/content-package.zip!/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip\n" +
+ "/org/apache/sling/content-package.zip,apache/sling:nested-child:1.0.0,CONTAINER,apache/sling:application-child:1.0.0,/jcr_root/etc/packages/org/apache/sling/nested-child-1.0.zip,/org/apache/sling/content-package.zip!/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip!/jcr_root/etc/packages/org/apache/sling/nested-child-1.0.zip\n";
assertTrue(actual.endsWith(expected));
}