You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2021/10/27 14:46:03 UTC

[jackrabbit-filevault] branch bugfix/JCRVLT-557-conf-implicit-nt-calc updated: JCRVLT-577: move flag into ImportOptions

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

reschke pushed a commit to branch bugfix/JCRVLT-557-conf-implicit-nt-calc
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git


The following commit(s) were added to refs/heads/bugfix/JCRVLT-557-conf-implicit-nt-calc by this push:
     new 479d4d5  JCRVLT-577: move flag into ImportOptions
479d4d5 is described below

commit 479d4d551a7bd9be108731a796c2f4e64b63ea75
Author: Julian Reschke <ju...@gmx.de>
AuthorDate: Wed Oct 27 15:44:36 2021 +0100

    JCRVLT-577: move flag into ImportOptions
---
 .../vault/fs/impl/io/FolderArtifactHandler.java    | 32 +++++++++++-----------
 .../jackrabbit/vault/fs/io/ImportOptions.java      | 31 +++++++++++++++++++--
 .../apache/jackrabbit/vault/fs/io/Importer.java    |  1 +
 .../jackrabbit/vault/fs/io/package-info.java       |  2 +-
 4 files changed, 47 insertions(+), 19 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
index e1ffe16..a593c2b 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
@@ -40,8 +40,6 @@ import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.util.EffectiveNodeType;
 import org.apache.jackrabbit.vault.util.JcrConstants;
 import org.jetbrains.annotations.NotNull;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Handles artifact sets with just a directory.
@@ -49,19 +47,10 @@ import org.slf4j.LoggerFactory;
  */
 public class FolderArtifactHandler extends AbstractArtifactHandler {
 
-    private static final Logger LOG = LoggerFactory.getLogger(FolderArtifactHandler.class);
-
-    private static boolean IMPLICIT_NODETYPE_CALCULATION;
-    static {
-        boolean t = true;
-        String key = "org.apache.jackrabbit.filevault.fs.impl.io.FolderArtifactHandler.IMPLICIT_NODETYPE_CALCULATION";
-        String sp = System.getProperty(key);
-        if (sp != null) {
-            LOG.info(key + " set to: '" + sp + "' (default is '" + t + "')");
-            t = Boolean.parseBoolean(sp);
-        }
-        IMPLICIT_NODETYPE_CALCULATION = t;
-    }
+    /**
+     * whether correct primary type should be enforced upon creation 
+     */
+    private boolean enforceCorrectPrimaryType = true;
 
     /**
      * qualified names of those default node types which should not be used for intermediate nodes (as they come with too many restrictions)
@@ -89,6 +78,17 @@ public class FolderArtifactHandler extends AbstractArtifactHandler {
         this.nodeType = nodeType;
     }
 
+    /**
+     * Sets whether correct primary type should be enforced upon creation
+     * 
+     * @param enforceCorrectPrimaryType
+     *            set to "false" to disable the default behavior of enforcing
+     *            the primary node type
+     */
+    public void setEnforceCorrectPrimaryType(boolean enforceCorrectPrimaryType) {
+        this.enforceCorrectPrimaryType = enforceCorrectPrimaryType;
+    }
+
     private Node createIntermediateNode(Node parent, String intermediateNodeName) throws RepositoryException {
         // preferably use default (=primary) node type for intermediate nodes
         Optional<String> defaultPrimaryChildNodeType = EffectiveNodeType.ofNode(parent).getDefaultPrimaryChildNodeTypeName(parent, intermediateNodeName);
@@ -139,7 +139,7 @@ public class FolderArtifactHandler extends AbstractArtifactHandler {
             }
 
             Node node = parent.getNode(dir.getRelativePath());
-            if (IMPLICIT_NODETYPE_CALCULATION
+            if (enforceCorrectPrimaryType
                     && wspFilter.contains(node.getPath()) && wspFilter.getImportMode(node.getPath()) == ImportMode.REPLACE && !nodeType.equals(node.getPrimaryNodeType().getName())) {
                 modifyPrimaryType(node, info);
             }
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ImportOptions.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ImportOptions.java
index 82a6f64..20489dd 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ImportOptions.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ImportOptions.java
@@ -29,12 +29,16 @@ import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.packaging.DependencyHandling;
 import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Option that control the package import.
  */
 public class ImportOptions {
 
+    private static final Logger log = LoggerFactory.getLogger(ImportOptions.class);
+
     private Boolean strict;
 
     private ProgressTrackerListener listener;
@@ -69,6 +73,20 @@ public class ImportOptions {
 
     private @NotNull IdConflictPolicy idConflictPolicy = IdConflictPolicy.FAIL;
 
+    private static boolean DEFAULT_ENFORCE_CORRECT_PRIMARY_NODETYPE;
+    static {
+        boolean t = true;
+        String key = "org.apache.jackrabbit.vault.fs.io.ImportOptions.DEFAULT_ENFORCE_CORRECT_PRIMARY_NODETYPE";
+        String sp = System.getProperty(key);
+        if (sp != null) {
+            log.info(key + " set to: '" + sp + "' (default is '" + t + "')");
+            t = Boolean.parseBoolean(sp);
+        }
+        DEFAULT_ENFORCE_CORRECT_PRIMARY_NODETYPE = t;
+    }
+
+    private boolean enforceCorrectPrimaryType = DEFAULT_ENFORCE_CORRECT_PRIMARY_NODETYPE;
+
     /**
      * Default constructor.
      */
@@ -100,6 +118,7 @@ public class ImportOptions {
             pathMapping = base.pathMapping;
             dependencyHandling = base.dependencyHandling;
             idConflictPolicy = base.idConflictPolicy;
+            enforceCorrectPrimaryType = base.enforceCorrectPrimaryType;
         }
     }
 
@@ -126,6 +145,7 @@ public class ImportOptions {
         ret.pathMapping = pathMapping;
         ret.dependencyHandling = dependencyHandling;
         ret.idConflictPolicy = idConflictPolicy;
+        ret.enforceCorrectPrimaryType = enforceCorrectPrimaryType;
         return ret;
     }
 
@@ -261,6 +281,10 @@ public class ImportOptions {
         this.cugHandling = cugHandling;
     }
 
+    public boolean getEnforceCorrectPrimaryType() {
+        return enforceCorrectPrimaryType;
+    }
+
     /**
      * Defines the package installation should recursively install sub packages. Note that if this flag is enabled,
      * the {@link org.apache.jackrabbit.vault.packaging.SubPackageHandling} configuration has no effect, as sub packages
@@ -465,6 +489,8 @@ public class ImportOptions {
         result = prime * result + ((pathMapping == null) ? 0 : pathMapping.hashCode());
         result = prime * result + ((idConflictPolicy == null) ? 0 : idConflictPolicy.hashCode());
         result = prime * result + (strict ? 1231 : 1237);
+        result = prime * result + (enforceCorrectPrimaryType ? 1231 : 1237);
+
         return result;
     }
 
@@ -530,6 +556,8 @@ public class ImportOptions {
             return false;
         if (strict != other.strict)
             return false;
+        if (enforceCorrectPrimaryType != other.enforceCorrectPrimaryType)
+            return false;
         if (!idConflictPolicy.equals(other.idConflictPolicy))
             return false;
         return true;
@@ -548,8 +576,7 @@ public class ImportOptions {
                 + (hookClassLoader != null ? "hookClassLoader=" + hookClassLoader + ", " : "")
                 + (pathMapping != null ? "pathMapping=" + pathMapping + ", " : "")
                 + (dependencyHandling != null ? "dependencyHandling=" + dependencyHandling + ", " : "")
+                + "enforceCorrectPrimaryType=" + enforceCorrectPrimaryType + ", "
                 + "idConflictPolicy=" + idConflictPolicy + "]";
     }
-    
-    
 }
\ No newline at end of file
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
index 4777004..f1d0a9b 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
@@ -400,6 +400,7 @@ public class Importer {
         genericHandler.setCugHandling(opts.getCugHandling());
         folderHandler.setAcHandling(opts.getAccessControlHandling());
         folderHandler.setCugHandling(opts.getCugHandling());
+        folderHandler.setEnforceCorrectPrimaryType(opts.getEnforceCorrectPrimaryType());
 
         filter = opts.getFilter();
         if (filter == null) {
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java
index 06a5dbd..2be7b2f 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("2.11.0")
+@Version("2.12.0")
 package org.apache.jackrabbit.vault.fs.io;
 
 import org.osgi.annotation.versioning.Version;