You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2022/04/08 14:01:51 UTC

[jackrabbit-filevault-package-maven-plugin] 01/01: JCRVLT-621 add "builtWith" property in package definition serialization

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/JCRVLT-621-add-builtWIth-property
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault-package-maven-plugin.git

commit e8c740165652b198f9e435bb82d084c75958be74
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Fri Apr 8 16:01:41 2022 +0200

    JCRVLT-621 add "builtWith" property in package definition serialization
---
 pom.xml                                            |  2 +-
 .../maven/packaging/mojo/GenerateMetadataMojo.java | 60 ++++++++++++++++------
 2 files changed, 46 insertions(+), 16 deletions(-)

diff --git a/pom.xml b/pom.xml
index e1ec1cc..6560d0e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
         <groupId>org.apache.jackrabbit.vault</groupId>
         <artifactId>parent</artifactId>
         <relativePath />
-        <version>3.6.0</version>
+        <version>3.6.1-SNAPSHOT</version>
     </parent>
 
     <!-- ====================================================================== -->
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java
index 7400bff..1d16bfb 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java
@@ -27,8 +27,10 @@ import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -48,6 +50,11 @@ import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
+import javax.jcr.NamespaceException;
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
 import org.apache.commons.io.FilenameUtils;
 import org.apache.jackrabbit.filevault.maven.packaging.ArtifactCoordinates;
 import org.apache.jackrabbit.filevault.maven.packaging.Embedded;
@@ -55,6 +62,11 @@ import org.apache.jackrabbit.filevault.maven.packaging.Filters;
 import org.apache.jackrabbit.filevault.maven.packaging.MavenBasedPackageDependency;
 import org.apache.jackrabbit.filevault.maven.packaging.SubPackage;
 import org.apache.jackrabbit.filevault.maven.packaging.SubPackageHandlingEntry;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceMapping;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
 import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
@@ -62,18 +74,24 @@ import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
+import org.apache.jackrabbit.vault.fs.io.DocViewFormat;
 import org.apache.jackrabbit.vault.packaging.Dependency;
+import org.apache.jackrabbit.vault.packaging.JcrPackage;
 import org.apache.jackrabbit.vault.packaging.PackageId;
 import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.PackageType;
 import org.apache.jackrabbit.vault.packaging.SubPackageHandling;
 import org.apache.jackrabbit.vault.util.Constants;
+import org.apache.jackrabbit.vault.util.DocViewNode2;
+import org.apache.jackrabbit.vault.util.DocViewProperty2;
+import org.apache.jackrabbit.vault.util.xml.serialize.FormattingXmlStreamWriter;
 import org.apache.maven.archiver.ManifestConfiguration;
 import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -558,27 +576,39 @@ public class GenerateMetadataMojo extends AbstractMetadataPackageMojo {
             writeFilters(sourceFilters);
             copyFile("/vault/config.xml", new File(vaultDir, Constants.CONFIG_XML));
             copyFile("/vault/settings.xml", new File(vaultDir, Constants.SETTINGS_XML));
-            
-            // add package thumbnail
-            if (thumbnailImage != null && thumbnailImage.exists()) {
-                File vaultDefinitionFolder = new File(vaultDir, "definition");
-                if (!vaultDefinitionFolder.exists()) {
-                    vaultDefinitionFolder.mkdir();
-                }
-                copyFile("/vault/definition/.content.xml", new File(vaultDefinitionFolder, ".content.xml"));
-                // copy thumbnail image only when it's not already placed in the source META-INF directory
-                if (!thumbnailImage.equals(new File(metaInfDirectory, "/definition/thumbnail.png"))) {
-                    FileUtils.copyFile(thumbnailImage, new File(vaultDefinitionFolder, "thumbnail.png"));
-                }
+            File packageDefinitionXml = new File(vaultDir, Constants.PACKAGE_DEFINITION_XML);
+            if (!packageDefinitionXml.getParentFile().exists()) {
+                packageDefinitionXml.getParentFile().mkdir();
+            }
+            try (OutputStream output = new FileOutputStream( packageDefinitionXml )) {
+                writePackageDefinition(output);
+            }
+            // copy thumbnail image only when it's not already placed in the source META-INF directory
+            if (thumbnailImage != null && thumbnailImage.exists() && !thumbnailImage.equals(new File(metaInfDirectory, "/definition/thumbnail.png"))) {
+                FileUtils.copyFile(thumbnailImage, new File(packageDefinitionXml.getParentFile(), "thumbnail.png"));
             }
-
             writeManifest(getGeneratedManifestFile(true), dependenciesString, dependenciesLocations, vaultProperties);
-        } catch (IOException | ManifestException | DependencyResolutionRequiredException | ConfigurationException e) {
+        } catch (IOException | ManifestException | DependencyResolutionRequiredException | ConfigurationException | NamespaceException | XMLStreamException e) {
             throw new MojoExecutionException(e.toString(), e);
         }
         buildContext.refresh(vaultDir);
     }
 
+    void writePackageDefinition(OutputStream outputStream) throws XMLStreamException, FactoryConfigurationError, NamespaceException {
+        NamespaceMapping namespaceResolver = new NamespaceMapping(); // no namespaces necessary
+        namespaceResolver.setMapping(Name.NS_EMPTY_PREFIX, Name.NS_DEFAULT_URI);
+        namespaceResolver.setMapping(Name.NS_JCR_PREFIX, Name.NS_JCR_URI);
+        try (FormattingXmlStreamWriter xmlWriter = FormattingXmlStreamWriter.create(outputStream, new DocViewFormat().getXmlOutputFormat())) {
+            Collection<DocViewProperty2> properties = new ArrayList<>();
+            properties.add(new DocViewProperty2(NameConstants.JCR_PRIMARYTYPE, JcrPackage.NT_VLT_PACKAGE_DEFINITION));
+            properties.add(new DocViewProperty2(NameFactoryImpl.getInstance().create(Name.NS_DEFAULT_URI, "builtWith"), "filevault-package-maven-plugin"));
+            DocViewNode2 docViewNode = new DocViewNode2(NameConstants.JCR_ROOT, properties);
+            docViewNode.writeStart(xmlWriter, namespaceResolver, Collections.emptySet());
+            DocViewNode2.writeEnd(xmlWriter);
+        }
+        
+    }
+
     void writeManifest(File file, String dependenciesString, String dependenciesLocations, final Properties vaultProperties)
             throws ManifestException, DependencyResolutionRequiredException, IOException, FileNotFoundException {
         // generate manifest file
@@ -589,7 +619,7 @@ public class GenerateMetadataMojo extends AbstractMetadataPackageMojo {
             manifest.write(out);
         }
     }
-    
+
     /**
      * Computes the package filters.
      *