You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2018/08/28 04:24:59 UTC
svn commit: r1839405 - in
/jackrabbit/commons/filevault-package-maven-plugin/trunk: ./
src/main/java/org/apache/jackrabbit/filevault/maven/packaging/
src/main/resources/META-INF/m2e/
Author: tripod
Date: Tue Aug 28 04:24:59 2018
New Revision: 1839405
URL: http://svn.apache.org/viewvc?rev=1839405&view=rev
Log:
JCRVLT-288 add mojo to format docview xml files (Closes #15)
Added:
jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/FormatDocviewXmlMojo.java
Modified:
jackrabbit/commons/filevault-package-maven-plugin/trunk/pom.xml
jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractPackageMojo.java
jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
Modified: jackrabbit/commons/filevault-package-maven-plugin/trunk/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault-package-maven-plugin/trunk/pom.xml?rev=1839405&r1=1839404&r2=1839405&view=diff
==============================================================================
--- jackrabbit/commons/filevault-package-maven-plugin/trunk/pom.xml (original)
+++ jackrabbit/commons/filevault-package-maven-plugin/trunk/pom.xml Tue Aug 28 04:24:59 2018
@@ -275,7 +275,7 @@
<dependency>
<groupId>org.apache.jackrabbit.vault</groupId>
<artifactId>org.apache.jackrabbit.vault</artifactId>
- <version>3.1.42</version>
+ <version>3.2.0</version>
</dependency>
<dependency>
<groupId>javax.jcr</groupId>
Modified: jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractPackageMojo.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractPackageMojo.java?rev=1839405&r1=1839404&r2=1839405&view=diff
==============================================================================
--- jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractPackageMojo.java (original)
+++ jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractPackageMojo.java Tue Aug 28 04:24:59 2018
@@ -192,5 +192,14 @@ public abstract class AbstractPackageMoj
filters.load(getFilterFile());
return filters;
}
+
+ static File getFirstExistingDirectory(File[] directories) {
+ for (File dir: directories) {
+ if (dir.exists() && dir.isDirectory()) {
+ return dir;
+ }
+ }
+ return null;
+ }
}
Added: jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/FormatDocviewXmlMojo.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/FormatDocviewXmlMojo.java?rev=1839405&view=auto
==============================================================================
--- jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/FormatDocviewXmlMojo.java (added)
+++ jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/FormatDocviewXmlMojo.java Tue Aug 28 04:24:59 2018
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.filevault.maven.packaging;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.jackrabbit.vault.fs.io.DocViewFormat;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.codehaus.plexus.util.Scanner;
+import org.sonatype.plexus.build.incremental.BuildContext;
+
+/**
+ * Maven goal which either checks only the formatting of the Docview XML files to comply with the
+ * formatting rules from FileVault or also reformats those files.
+ */
+@Mojo(
+ name = "format-xml",
+ defaultPhase = LifecyclePhase.PROCESS_SOURCES
+)
+public class FormatDocviewXmlMojo extends AbstractMojo {
+
+ @Parameter(
+ property = "vault.jcrRootSourceDirectory",
+ required = true,
+ defaultValue =
+ "${project.basedir}/jcr_root," +
+ "${project.basedir}/src/main/jcr_root," +
+ "${project.basedir}/src/main/content/jcr_root," +
+ "${project.basedir}/src/content/jcr_root," +
+ "${project.build.outputDirectory}"
+ )
+ private File[] jcrRootSourceDirectory;
+
+ /**
+ * Include patterns for files to include. If not set defaults to [**\/*.xml].
+ * <p>
+ * Note: includes have precedences over excludes.
+ * Each pattern can either be an <a href="https://ant.apache.org/manual/dirtasks.html#patterns">Ant-like pattern</a> or
+ * a regular expression if it is starting with {@code %regex[} and ending with {@code ]}.
+ */
+ @Parameter
+ protected Set<String> includes = new HashSet<>();
+
+ /**
+ * Exclude patterns for files to exclude. If not set defaults to [].
+ * <p>
+ * Note: includes have precedences over excludes.
+ * Each pattern can either be an <a href="https://ant.apache.org/manual/dirtasks.html#patterns">Ant-like pattern</a> or
+ * a regular expression if it is starting with {@code %regex[} and ending with {@code ]}.
+ */
+ @Parameter
+ protected Set<String> excludes = new HashSet<>();
+
+ /**
+ * If set to {@code true} then fails the build if it encounters XML files which don't follow the
+ * formatting rules for XML Docview files.
+ * If set to {@code false} will reformat all XML Docview files.
+ */
+ @Parameter(defaultValue = "false")
+ private boolean validateOnly;
+
+ @Component
+ protected BuildContext buildContext;
+
+ private static final String MSG_MALFORMED_FILE = "Malformed according to DocView format";
+ private static final String MSG_COUNTERMEASURE = "Use either your IDE with JCR-VLT integration to sync files with the repository or use vlt-cli to apply the docview format " +
+ "(http://jackrabbit.apache.org/filevault/usage.html).";
+
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ File jcrSourceDirectory = AbstractPackageMojo.getFirstExistingDirectory(jcrRootSourceDirectory);
+ executeInternal(jcrSourceDirectory);
+ }
+
+ protected void executeInternal(File sourceDirectory)
+ throws MojoExecutionException, MojoFailureException {
+
+ if (includes.isEmpty()) {
+ includes.add("**/*.xml");
+ }
+
+ Log log = getLog();
+ List<File> malformedFiles = new LinkedList<>();
+ DocViewFormat docViewFormat = new DocViewFormat();
+ Scanner directoryScanner = buildContext.newScanner(sourceDirectory);
+ directoryScanner.setIncludes(includes.toArray(new String[includes.size()]));
+ directoryScanner.setExcludes(excludes.toArray(new String[excludes.size()]));
+ directoryScanner.scan();
+
+ for (String subpath : directoryScanner.getIncludedFiles()) {
+ File toCheck = new File(sourceDirectory, subpath);
+ try {
+ if (docViewFormat.format(toCheck, validateOnly)) {
+ if (validateOnly) {
+ // collect all malformed files to emit one failure at the end
+ malformedFiles.add(toCheck);
+ // emit violations for m2e (https://www.eclipse.org/m2e/documentation/m2e-making-maven-plugins-compat.html)
+ buildContext.addMessage(toCheck, 0, 0, MSG_MALFORMED_FILE + ". " + MSG_COUNTERMEASURE, BuildContext.SEVERITY_ERROR, null);
+ log.error(MSG_MALFORMED_FILE + ":" + toCheck);
+ } else {
+ log.info("Reformatted file '" + toCheck + "'.");
+ }
+ } else {
+ buildContext.removeMessages(toCheck);
+ }
+ } catch (IOException ex) {
+ throw new MojoExecutionException("Failed to read " + toCheck, ex);
+ }
+ }
+
+ if (!malformedFiles.isEmpty()) {
+ String message = "Found " + malformedFiles.size() + " files being malformed according to DocView format: Please check error message emitted above." +
+ "\n\n" + MSG_COUNTERMEASURE;
+ throw new MojoFailureException(message);
+ }
+ }
+}
Modified: jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java?rev=1839405&r1=1839404&r2=1839405&view=diff
==============================================================================
--- jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java (original)
+++ jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java Tue Aug 28 04:24:59 2018
@@ -530,10 +530,15 @@ public class GenerateMetadataMojo extend
getLog().info("Merging inline filters.");
mergeFilters(sourceFilters, filters);
}
- filters.getFilterSets().clear();
- filters.getFilterSets().addAll(sourceFilters.getFilterSets());
- filters.getPropertyFilterSets().clear();
- filters.getPropertyFilterSets().addAll(sourceFilters.getPropertyFilterSets());
+
+ // now copy everything from sourceFilter to filters (as the latter is supposed to contain the final filter rules)!
+ sourceFilters.resetSource();
+ // there is no suitable clone nor constructor, therefore use a serialization/deserialization approach
+ try (InputStream serializedFilters = sourceFilters.getSource()) {
+ filters.load(serializedFilters);
+ } catch (ConfigurationException e) {
+ throw new IllegalStateException("cloning filters failed.", e);
+ }
// reset source filters for later. this looks a bit complicated but is needed to keep the same
// filter order as in previous versions
Modified: jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java?rev=1839405&r1=1839404&r2=1839405&view=diff
==============================================================================
--- jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java (original)
+++ jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java Tue Aug 28 04:24:59 2018
@@ -178,12 +178,7 @@ public class VaultMojo extends AbstractP
getLog().warn("The 'builtContentDirectory' is deprecated. Please use the new 'jcrRootSourceDirectory' instead.");
jcrSourceDirectory = builtContentDirectory;
} else {
- for (File dir: jcrRootSourceDirectory) {
- if (dir.exists() && dir.isDirectory()) {
- jcrSourceDirectory = dir;
- break;
- }
- }
+ jcrSourceDirectory = getFirstExistingDirectory(jcrRootSourceDirectory);
}
if (jcrSourceDirectory != null) {
getLog().info("packaging content from " + jcrSourceDirectory.getPath());
Modified: jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml?rev=1839405&r1=1839404&r2=1839405&view=diff
==============================================================================
--- jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml (original)
+++ jackrabbit/commons/filevault-package-maven-plugin/trunk/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml Tue Aug 28 04:24:59 2018
@@ -41,5 +41,18 @@
</execute>
</action>
</pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <goals>
+ <goal>format-xml</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <execute>
+ <runOnIncremental>true</runOnIncremental>
+ <runOnConfiguration>false</runOnConfiguration>
+ </execute>
+ </action>
+ </pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
\ No newline at end of file