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 2022/01/17 15:59:38 UTC

[jackrabbit-filevault] branch feature/JCRVLT-596 created (now 2285667)

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

reschke pushed a change to branch feature/JCRVLT-596
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git.


      at 2285667  JCRVLT-596: add OSGi config for default IdConflictPolicy

This branch includes the following new commits:

     new 2285667  JCRVLT-596: add OSGi config for default IdConflictPolicy

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[jackrabbit-filevault] 01/01: JCRVLT-596: add OSGi config for default IdConflictPolicy

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch feature/JCRVLT-596
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 22856673e283e0fede366f5a7e024d4219a31364
Author: Julian Reschke <ju...@gmx.de>
AuthorDate: Mon Jan 17 16:59:19 2022 +0100

    JCRVLT-596: add OSGi config for default IdConflictPolicy
---
 .../jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java   |  2 +-
 .../jackrabbit/vault/packaging/impl/JcrPackageImpl.java   |  1 +
 .../vault/packaging/impl/JcrPackageManagerImpl.java       |  7 ++++---
 .../jackrabbit/vault/packaging/impl/PackagingImpl.java    | 15 +++++++++++----
 .../packaging/registry/impl/AbstractPackageRegistry.java  | 11 ++++++++++-
 .../vault/packaging/registry/impl/FSPackageRegistry.java  | 11 +++++++----
 .../vault/packaging/registry/impl/JcrPackageRegistry.java |  8 +++++---
 .../registry/impl/PackageTaskOptionsSerializer.java       |  4 ++++
 .../vault/packaging/integration/PackageInstallIT.java     |  3 ++-
 9 files changed, 45 insertions(+), 17 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
index 00221ff..4854642 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
@@ -271,7 +271,7 @@ public class DocViewSAXImporter extends RejectingEntityDefaultHandler implements
                 getDescriptorValue(Repository.NODE_TYPE_MANAGEMENT_SAME_NAME_SIBLINGS_SUPPORTED).getBoolean();
         this.nsHelper = new JcrNamespaceHelper(session, null);
         this.idConflictPolicy = idConflictPolicy;
-
+        log.debug("idConflictPolicy: {}", idConflictPolicy);
         String rootPath = parentNode.getPath();
         if (!rootPath.equals("/")) {
             rootPath += "/";
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
index aecdaac..ee5320c 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
@@ -386,6 +386,7 @@ public class JcrPackageImpl implements JcrPackage {
             // MAX_VALUE disables saving completely, therefore we have to use a lower value!
             opts.setAutoSaveThreshold(Integer.MAX_VALUE - 1);
         }
+        opts.setIdConflictPolicy(mgr.getDefaultIdConflictPolicy());
         InstallContextImpl ctx = pack.prepareExtract(node.getSession(), opts, mgr.getSecurityConfig(), mgr.isStrictByDefault(),
                 mgr.overwritePrimaryTypesOfFoldersByDefault());
         JcrPackage snap = null;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
index 4e5d477..19723cf 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
@@ -38,6 +38,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
@@ -96,10 +97,10 @@ public class JcrPackageManagerImpl extends PackageManagerImpl implements JcrPack
     }
 
     public JcrPackageManagerImpl(@NotNull Session session, @Nullable String[] roots, @Nullable String[] authIdsForHookExecution,
-            @Nullable String[] authIdsForRootInstallation, boolean isStrict, boolean overwritePrimaryTypesOfFoldersByDefault) {
+            @Nullable String[] authIdsForRootInstallation, boolean isStrict, boolean overwritePrimaryTypesOfFoldersByDefault, IdConflictPolicy idConflictPolicy) {
         this(new JcrPackageRegistry(session,
                 new AbstractPackageRegistry.SecurityConfig(authIdsForHookExecution, authIdsForRootInstallation), isStrict,
-                overwritePrimaryTypesOfFoldersByDefault, roots));
+                overwritePrimaryTypesOfFoldersByDefault, idConflictPolicy, roots));
     }
 
     protected JcrPackageManagerImpl(JcrPackageRegistry registry) {
@@ -116,7 +117,7 @@ public class JcrPackageManagerImpl extends PackageManagerImpl implements JcrPack
     public PackageRegistry getRegistry() {
         return registry;
     }
-    
+
     public JcrPackageRegistry getInternalRegistry() {
         return registry;
     }
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
index cc1d50e..d38fe84 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagingImpl.java
@@ -24,6 +24,7 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.packaging.JcrPackage;
 import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
 import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
@@ -81,7 +82,6 @@ public class PackagingImpl implements Packaging {
     Config config;
 
     public PackagingImpl() {
-        
     }
 
     @ObjectClassDefinition(
@@ -106,6 +106,9 @@ public class PackagingImpl implements Packaging {
 
         @AttributeDefinition(description = "Whether to overwrite the primary type of folders")
         boolean overwritePrimaryTypesOfFolders() default true;
+
+        @AttributeDefinition(description = "Default IdConflictPolicy")
+        String defaultIdConflictPolicy() default "FAIL";
     }
 
     @Activate
@@ -126,7 +129,9 @@ public class PackagingImpl implements Packaging {
      * {@inheritDoc}
      */
     public JcrPackageManager getPackageManager(Session session) {
-        JcrPackageManagerImpl mgr = new JcrPackageManagerImpl(session, config.packageRoots(), config.authIdsForHookExecution(), config.authIdsForRootInstallation(), config.isStrict(), config.overwritePrimaryTypesOfFolders());
+        JcrPackageManagerImpl mgr = new JcrPackageManagerImpl(session, config.packageRoots(), config.authIdsForHookExecution(),
+                config.authIdsForRootInstallation(), config.isStrict(), config.overwritePrimaryTypesOfFolders(),
+                IdConflictPolicy.valueOf(config.defaultIdConflictPolicy()));
         mgr.setDispatcher(eventDispatcher);
         setBaseRegistry(mgr.getInternalRegistry(), registries);
         return mgr;
@@ -173,14 +178,16 @@ public class PackagingImpl implements Packaging {
         return getJcrPackageRegistry(session, true);
     }
 
-    
     @Override
     public PackageRegistry getJcrBasedPackageRegistry(Session session) {
         return getJcrPackageRegistry(session);
     }
 
     private JcrPackageRegistry getJcrPackageRegistry(Session session, boolean useBaseRegistry) {
-        JcrPackageRegistry registry = new JcrPackageRegistry(session, new AbstractPackageRegistry.SecurityConfig(config.authIdsForHookExecution(), config.authIdsForRootInstallation()), config.isStrict(), config.overwritePrimaryTypesOfFolders(), config.packageRoots());
+        JcrPackageRegistry registry = new JcrPackageRegistry(session,
+                new AbstractPackageRegistry.SecurityConfig(config.authIdsForHookExecution(), config.authIdsForRootInstallation()),
+                config.isStrict(), config.overwritePrimaryTypesOfFolders(),
+                IdConflictPolicy.valueOf(config.defaultIdConflictPolicy()), config.packageRoots());
         registry.setDispatcher(eventDispatcher);
         if (useBaseRegistry) {
             setBaseRegistry(registry, registries);
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/AbstractPackageRegistry.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/AbstractPackageRegistry.java
index fcc2492..5453dc7 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/AbstractPackageRegistry.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/AbstractPackageRegistry.java
@@ -27,6 +27,7 @@ import java.util.UUID;
 
 import javax.jcr.Session;
 
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.packaging.Dependency;
 import org.apache.jackrabbit.vault.packaging.NoSuchPackageException;
@@ -85,7 +86,10 @@ public abstract class AbstractPackageRegistry implements PackageRegistry, Intern
 
     private final boolean overwritePrimaryTypesOfFoldersByDefault;
 
-    public AbstractPackageRegistry(SecurityConfig securityConfig, boolean isStrictByDefault, boolean overwritePrimaryTypesOfFoldersByDefault) {
+    private final IdConflictPolicy defaultIdConflictPolicy;
+
+    public AbstractPackageRegistry(SecurityConfig securityConfig, boolean isStrictByDefault,
+            boolean overwritePrimaryTypesOfFoldersByDefault, IdConflictPolicy defaultIdConflictPolicy) {
         if (securityConfig != null) {
             this.securityConfig = securityConfig;
         } else {
@@ -93,6 +97,7 @@ public abstract class AbstractPackageRegistry implements PackageRegistry, Intern
         }
         this.isStrictByDefault = isStrictByDefault;
         this.overwritePrimaryTypesOfFoldersByDefault = overwritePrimaryTypesOfFoldersByDefault;
+        this.defaultIdConflictPolicy = defaultIdConflictPolicy;
     }
 
     public boolean isStrictByDefault() {
@@ -103,6 +108,10 @@ public abstract class AbstractPackageRegistry implements PackageRegistry, Intern
         return overwritePrimaryTypesOfFoldersByDefault;
     }
 
+    public IdConflictPolicy getDefaultIdConflictPolicy() {
+        return defaultIdConflictPolicy;
+    }
+
     /**
      * {@inheritDoc}
      */
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java
index 27f1e34..e049e90 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java
@@ -36,6 +36,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
 import org.apache.jackrabbit.util.Text;
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
@@ -137,11 +138,13 @@ public class FSPackageRegistry extends AbstractPackageRegistry {
      */
     @Deprecated
     public FSPackageRegistry(@NotNull File homeDir, InstallationScope scope, @Nullable AbstractPackageRegistry.SecurityConfig securityConfig) throws IOException {
-        this(homeDir, scope, securityConfig, false, true);
+        this(homeDir, scope, securityConfig, false, true, IdConflictPolicy.FAIL);
     }
 
-    public FSPackageRegistry(@NotNull File homeDir, InstallationScope scope, @Nullable AbstractPackageRegistry.SecurityConfig securityConfig, boolean isStrict, boolean overwritePrimaryTypesOfFolders) throws IOException {
-        super(securityConfig, isStrict, overwritePrimaryTypesOfFolders);
+    public FSPackageRegistry(@NotNull File homeDir, InstallationScope scope,
+            @Nullable AbstractPackageRegistry.SecurityConfig securityConfig, boolean isStrict,
+            boolean overwritePrimaryTypesOfFolders, IdConflictPolicy defaultIdConflictPolicy) throws IOException {
+        super(securityConfig, isStrict, overwritePrimaryTypesOfFolders, defaultIdConflictPolicy);
         log.info("Jackrabbit Filevault FS Package Registry initialized with home location {}", homeDir.getPath());
         this.scope = scope;
         this.stateCache = new FSInstallStateCache(homeDir.toPath());
@@ -152,7 +155,7 @@ public class FSPackageRegistry extends AbstractPackageRegistry {
      * @throws IOException 
      */
     public FSPackageRegistry() throws IOException {
-        super(null, false, true); // set security config delayed (i.e. only after activate())
+        super(null, false, true, IdConflictPolicy.FAIL); // set security config delayed (i.e. only after activate())
     }
 
     @Activate
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java
index 1a2a080..e33c014 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java
@@ -37,6 +37,7 @@ import javax.jcr.nodetype.NodeType;
 import org.apache.commons.io.input.NullInputStream;
 import org.apache.jackrabbit.commons.JcrUtils;
 import org.apache.jackrabbit.util.Text;
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.config.MetaInf;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
@@ -117,12 +118,13 @@ public class JcrPackageRegistry extends AbstractPackageRegistry {
      * @param roots the root paths to store the packages.
      */
     public JcrPackageRegistry(@NotNull Session session, @Nullable String ... roots) {
-        this(session, null, false, true, roots);
+        this(session, null, false, true, IdConflictPolicy.FAIL, roots);
     }
 
     public JcrPackageRegistry(@NotNull Session session, @Nullable AbstractPackageRegistry.SecurityConfig securityConfig,
-            boolean isStrict, boolean overwritePrimaryTypesOfFoldersByDefault, @Nullable String... roots) {
-        super(securityConfig, isStrict, overwritePrimaryTypesOfFoldersByDefault);
+            boolean isStrict, boolean overwritePrimaryTypesOfFoldersByDefault, IdConflictPolicy defaultIdConflictPolicy,
+            @Nullable String... roots) {
+        super(securityConfig, isStrict, overwritePrimaryTypesOfFoldersByDefault, defaultIdConflictPolicy);
         this.session = session;
         if (roots == null || roots.length == 0) {
             packRootPaths = new String[]{DEFAULT_PACKAGE_ROOT_PATH};
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/PackageTaskOptionsSerializer.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/PackageTaskOptionsSerializer.java
index a5653ef..7e3429b 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/PackageTaskOptionsSerializer.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/PackageTaskOptionsSerializer.java
@@ -21,6 +21,7 @@ import java.util.function.Consumer;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
@@ -43,6 +44,7 @@ public class PackageTaskOptionsSerializer {
     private static final String TAG_DRY_RUN = "dryRun";
     private static final String TAG_IMPORT_MODE = "importMode";
     private static final String TAG_OVERWRITE_PRIMARY_TYPES_OF_FOLDERS = "overwritePrimaryTypesOfFolders";
+    private static final String TAG_ID_CONFLICT_POLICY = "idConflictPolicy";
 
     enum Type {
         ImportOptions;
@@ -98,6 +100,7 @@ public class PackageTaskOptionsSerializer {
         writeOption(writer, TAG_DRY_RUN, Boolean.class, importOptions.isDryRun());
         writeOption(writer, TAG_IMPORT_MODE, ImportMode.class, importOptions.getImportMode());
         writeOption(writer, TAG_OVERWRITE_PRIMARY_TYPES_OF_FOLDERS, Boolean.class, importOptions.overwritePrimaryTypesOfFolders());
+        writeOption(writer, TAG_ID_CONFLICT_POLICY, IdConflictPolicy.class, importOptions.getIdConflictPolicy());
     }
 
     public ImportOptionsPackageTaskOption loadImportOptions(Element element) {
@@ -111,6 +114,7 @@ public class PackageTaskOptionsSerializer {
         readOption(element, TAG_DRY_RUN, Boolean.class,  options::setDryRun);
         readOption(element, TAG_IMPORT_MODE, ImportMode.class,  options::setImportMode);
         readOption(element, TAG_OVERWRITE_PRIMARY_TYPES_OF_FOLDERS, Boolean.class,  options::setOverwritePrimaryTypesOfFolders);
+        readOption(element, TAG_ID_CONFLICT_POLICY, IdConflictPolicy.class, options::setIdConflictPolicy);
         return new ImportOptionsPackageTaskOption(options);
     }
 
diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/PackageInstallIT.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/PackageInstallIT.java
index 676e35d..089488b 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/PackageInstallIT.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/PackageInstallIT.java
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
+import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
 import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.packaging.Dependency;
@@ -289,7 +290,7 @@ public class PackageInstallIT extends IntegrationTestBase {
         
         Session userSession = repository.login(new SimpleCredentials(userId, userPwd.toCharArray()));
         try {
-            packMgr = new JcrPackageManagerImpl(userSession, new String[0], new String[] {"user1"}, null, false, true);
+            packMgr = new JcrPackageManagerImpl(userSession, new String[0], new String[] {"user1"}, null, false, true, IdConflictPolicy.FAIL);
     
             PackageEventDispatcherImpl dispatcher = new PackageEventDispatcherImpl();
             dispatcher.bindPackageEventListener(new ActivityLog(), Collections.singletonMap("component.id", (Object) "1234"));