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