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.
*