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:39 UTC
[jackrabbit-filevault] 01/01: JCRVLT-596: add OSGi config for default IdConflictPolicy
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"));