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