This is an automated email from the ASF dual-hosted git repository. daim pushed a commit to branch OAK-11605 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 4fe6d6a25cb787349897f4e33d61632086cfc960 Author: Rishabh Kumar <[email protected]> AuthorDate: Mon Mar 17 14:30:53 2025 +0530 OAK-11605 : removed usage of Guava's ImmutableSet.copyOf with LinkedSet --- .../authorization/cug/impl/CugAccessControlManager.java | 2 +- .../security/authorization/cug/impl/CugExcludeImpl.java | 3 ++- oak-doc/src/site/markdown/security/user/default.md | 2 +- .../index/lucene/directory/CopyOnReadDirectory.java | 3 ++- .../oak/plugins/index/lucene/directory/OakDirectory.java | 3 ++- .../lucene/property/UniquenessConstraintValidator.java | 4 +++- .../oak/spi/security/ConfigurationParameters.java | 7 ++++--- .../oak/spi/security/authentication/AuthInfoImpl.java | 3 ++- .../credentials/SimpleCredentialsSupport.java | 4 ++-- .../oak/spi/security/authorization/accesscontrol/ACE.java | 3 ++- .../restriction/AbstractRestrictionProvider.java | 3 ++- .../oak/spi/security/privilege/PrivilegeBitsProvider.java | 5 +++-- .../jackrabbit/oak/composite/CompositeNodeStore.java | 3 ++- .../composite/checks/NodeTypeMountedNodeStoreChecker.java | 6 ++++-- .../jackrabbit/oak/upgrade/RepositorySidegrade.java | 11 ++++++----- .../apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java | 15 ++++++++------- 16 files changed, 46 insertions(+), 31 deletions(-) diff --git a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java index 5d40860b78..499d41031e 100644 --- a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java +++ b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java @@ -374,7 +374,7 @@ class CugAccessControlManager extends AbstractAccessControlManager implements Cu Tree cug = CugUtil.getCug(t); PropertyState pNames = (cug == null) ? null : cug.getProperty(REP_PRINCIPAL_NAMES); if (pNames != null) { - if (!Collections.disjoint(ImmutableSet.copyOf(principalNames), ImmutableSet.copyOf(pNames.getValue(Type.STRINGS)))) { + if (!Collections.disjoint(Collections.unmodifiableSet(SetUtils.toLinkedSet(principalNames)), Collections.unmodifiableSet(SetUtils.toLinkedSet(pNames.getValue(Type.STRINGS))))) { candidates.add(path); } nestedCugPaths(cug).forEach(eval::add); diff --git a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java index d92d3bb4f9..8947d622d3 100644 --- a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java +++ b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.commons.PropertiesUtil; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude; import org.jetbrains.annotations.NotNull; import org.osgi.service.component.annotations.Activate; @@ -80,6 +81,6 @@ public class CugExcludeImpl extends CugExclude.Default { } private void setPrincipalNames(@NotNull Map<String, Object> properties) { - this.principalNames = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("principalNames"), new String[0])); + this.principalNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("principalNames"), new String[0]))); } } diff --git a/oak-doc/src/site/markdown/security/user/default.md b/oak-doc/src/site/markdown/security/user/default.md index 3bb9817370..2ddcaddbaa 100644 --- a/oak-doc/src/site/markdown/security/user/default.md +++ b/oak-doc/src/site/markdown/security/user/default.md @@ -326,7 +326,7 @@ implementation. //------------------------------------------------< SCR Integration >--- @Activate private void activate(Map<String, Object> properties) { - ids = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("ids"), new String[0])); + ids = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("ids"), new String[0]))); } } diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java index ce29ff52c9..2e0c69327b 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java @@ -35,6 +35,7 @@ import java.util.stream.Collectors; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.commons.PerfLogger; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.plugins.index.lucene.IndexCopier; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FilterDirectory; @@ -332,7 +333,7 @@ public class CopyOnReadDirectory extends FilterDirectory { Set<String> filesToBeDeleted = // Files present locally - ImmutableSet.copyOf(local.listAll()).stream() + SetUtils.toLinkedSet(local.listAll()).stream() // but not in my view .filter(name -> !remoteFiles.contains(name)) // and also older than a safe timestamp (deleteBeforeTS) diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java index f2fc6a88d6..ad353e0916 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java @@ -20,6 +20,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.security.SecureRandom; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -341,7 +342,7 @@ public class OakDirectory extends Directory { if (fileNames == null){ fileNames = directoryBuilder.getChildNodeNames(); } - Set<String> result = ImmutableSet.copyOf(fileNames); + Set<String> result = Collections.unmodifiableSet(SetUtils.toLinkedSet(fileNames)); PERF_LOGGER.end(start, 100, "Directory listing performed. Total {} files", result.size()); return result; } diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java index 2df17786a5..f7e13e93d9 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugins.index.lucene.property; +import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -31,6 +32,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.commons.collections.IterableUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStateUtils; @@ -68,7 +70,7 @@ public class UniquenessConstraintValidator { String propertyRelativePath = e.getKey(); String value = e.getValue(); Iterable<String> indexedPaths = getIndexedPaths(propertyRelativePath, value); - Set<String> allPaths = ImmutableSet.copyOf(indexedPaths); + Set<String> allPaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(indexedPaths)); //If more than one match found then filter out stale paths if (allPaths.size() > 1) { diff --git a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java index 63406d872e..89827a9069 100644 --- a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java +++ b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java @@ -29,6 +29,7 @@ import java.util.regex.Pattern; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.commons.PropertiesUtil; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; @@ -306,13 +307,13 @@ public final class ConfigurationParameters implements Map<String, Object> { if (configProperty instanceof Set) { return (Set) configProperty; } else if (configProperty instanceof Collection<?>) { - return ImmutableSet.copyOf((Collection<?>) configProperty); + return Collections.unmodifiableSet(SetUtils.toLinkedSet((Collection<?>) configProperty)); } else if (configProperty.getClass().isArray()) { - return ImmutableSet.copyOf((Object[]) configProperty); + return Collections.unmodifiableSet(SetUtils.toLinkedSet((Object[]) configProperty)); } else { String[] arr = PropertiesUtil.toStringArray(configProperty); if (arr != null) { - return ImmutableSet.copyOf(arr); + return Collections.unmodifiableSet(SetUtils.toLinkedSet(arr)); } else { String str = configProperty.toString(); log.warn("Unsupported target type {} for value {}", clazz.getName(), str); diff --git a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java index 19ad19ecc9..ecbaea7dc3 100644 --- a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java +++ b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java @@ -27,6 +27,7 @@ import javax.security.auth.Subject; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.api.AuthInfo; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,7 +49,7 @@ public final class AuthInfoImpl implements AuthInfo { @Nullable Iterable<? extends Principal> principals) { this.userID = userID; this.attributes = (attributes == null) ? Collections.emptyMap() : attributes; - this.principals = (principals == null) ? Collections.emptySet() : ImmutableSet.copyOf(principals); + this.principals = (principals == null) ? Collections.emptySet() : Collections.unmodifiableSet(SetUtils.toLinkedSet(principals)); } public static AuthInfo createFromSubject(@NotNull Subject subject) { diff --git a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java index 1b12c44982..d3bc5b76f1 100644 --- a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java +++ b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java @@ -26,6 +26,7 @@ import javax.jcr.SimpleCredentials; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.guava.common.collect.Maps; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -65,8 +66,7 @@ public final class SimpleCredentialsSupport implements CredentialsSupport { public Map<String, ?> getAttributes(@NotNull Credentials credentials) { if (credentials instanceof SimpleCredentials) { final SimpleCredentials sc = (SimpleCredentials) credentials; - return Maps.asMap(ImmutableSet.copyOf(sc.getAttributeNames()), - input -> sc.getAttribute(input)); + return Maps.asMap(Collections.unmodifiableSet(SetUtils.toLinkedSet(sc.getAttributeNames())), sc::getAttribute); } else { return Collections.emptyMap(); } diff --git a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java index c590a7b0f2..a630b918ab 100644 --- a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java +++ b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry; import org.apache.jackrabbit.api.security.authorization.PrivilegeCollection; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory; import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction; @@ -76,7 +77,7 @@ public abstract class ACE implements JackrabbitAccessControlEntry { this.principal = principal; this.privilegeBits = privilegeBits; this.isAllow = isAllow; - this.restrictions = (restrictions == null) ? Collections.emptySet() : ImmutableSet.copyOf(restrictions); + this.restrictions = (restrictions == null) ? Collections.emptySet() : Collections.unmodifiableSet(SetUtils.toLinkedSet(restrictions)); this.namePathMapper = namePathMapper; this.valueFactory = new PartialValueFactory(namePathMapper); } diff --git a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java index b811eb00bf..18194f3999 100644 --- a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java +++ b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java @@ -35,6 +35,7 @@ import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.api.Type; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.plugins.memory.PropertyStates; import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants; import org.apache.jackrabbit.oak.plugins.tree.TreeUtil; @@ -70,7 +71,7 @@ public abstract class AbstractRestrictionProvider implements RestrictionProvider if (isUnsupportedPath(oakPath)) { return Collections.emptySet(); } else { - return ImmutableSet.copyOf(supported.values()); + return Collections.unmodifiableSet(SetUtils.toLinkedSet(supported.values())); } } diff --git a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java index a0cfc44cbb..635c0904f2 100644 --- a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java +++ b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java @@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.commons.collections.IterableUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.namepath.NameMapper; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -202,7 +203,7 @@ public final class PrivilegeBitsProvider implements PrivilegeConstants { privilegeNames = bitsToNames.get(pb); } else { privilegeNames = collectPrivilegeNames(privilegesTree, pb); - bitsToNames.put(pb, ImmutableSet.copyOf(privilegeNames)); + bitsToNames.put(pb, Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames))); } return privilegeNames; } @@ -251,7 +252,7 @@ public final class PrivilegeBitsProvider implements PrivilegeConstants { return extractAggregatedPrivileges(Collections.singleton(privName)); } } else { - Set<String> pNames = ImmutableSet.copyOf(privilegeNames); + Set<String> pNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames)); if (NON_AGGREGATE_PRIVILEGES.containsAll(pNames)) { return pNames; } else { diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java index 557d3a51a3..f0ab65e57a 100644 --- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java +++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java @@ -22,6 +22,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.commons.collections.IterableUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.commons.collections.StreamUtils; import org.apache.jackrabbit.oak.composite.checks.NodeStoreChecks; import org.apache.jackrabbit.oak.spi.commit.ChangeDispatcher; @@ -293,7 +294,7 @@ public class CompositeNodeStore implements NodeStore, PrefetchNodeStore, Observa } private String getPartialCheckpointName(MountedNodeStore nodeStore, String globalCheckpoint, Map<String, String> globalCheckpointProperties, boolean resolveByName) { - Set<String> validCheckpointNames = ImmutableSet.copyOf(nodeStore.getNodeStore().checkpoints()); + Set<String> validCheckpointNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(nodeStore.getNodeStore().checkpoints())); String result = globalCheckpointProperties.get(CHECKPOINT_METADATA_MOUNT + nodeStore.getMount().getName()); if (result != null && validCheckpointNames.contains(result)) { return result; diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java index 0ee31a4a48..43f29d016b 100644 --- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java +++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java @@ -18,8 +18,10 @@ package org.apache.jackrabbit.oak.composite.checks; import static java.util.Objects.requireNonNull; +import java.util.Collections; import java.util.Set; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.ComponentPropertyType; import org.osgi.service.component.annotations.ConfigurationPolicy; @@ -81,13 +83,13 @@ public class NodeTypeMountedNodeStoreChecker implements public NodeTypeMountedNodeStoreChecker(String invalidNodeType, String errorLabel, String... excludedNodeTypes) { this.invalidNodeType = invalidNodeType; this.errorLabel = errorLabel; - this.excludedNodeTypes = ImmutableSet.copyOf(excludedNodeTypes); + this.excludedNodeTypes = Collections.unmodifiableSet(SetUtils.toLinkedSet(excludedNodeTypes)); } protected void activate(ComponentContext ctx) { invalidNodeType = requireNonNull(PropertiesUtil.toString(ctx.getProperties().get(INVALID_NODE_TYPE), null), INVALID_NODE_TYPE); errorLabel = requireNonNull(PropertiesUtil.toString(ctx.getProperties().get(ERROR_LABEL), null), ERROR_LABEL); - excludedNodeTypes = ImmutableSet.copyOf(PropertiesUtil.toStringArray(ctx.getProperties().get(EXCLUDED_NODE_TYPES), new String[0])); + excludedNodeTypes = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(ctx.getProperties().get(EXCLUDED_NODE_TYPES), new String[0]))); } @Override diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java index 6689186f04..1b3b2b349f 100755 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.upgrade; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -34,6 +35,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.commons.collections.ListUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.plugins.document.DocumentNodeState; import org.apache.jackrabbit.oak.plugins.migration.FilteringNodeState; import org.apache.jackrabbit.oak.plugins.migration.NodeStateCopier; @@ -69,7 +71,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static java.util.Objects.requireNonNull; -import static org.apache.jackrabbit.guava.common.collect.ImmutableSet.copyOf; import static org.apache.jackrabbit.guava.common.collect.Sets.union; import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; @@ -217,7 +218,7 @@ public class RepositorySidegrade { * @param includes Paths to be included in the copy. */ public void setIncludes(@NotNull String... includes) { - this.includePaths = copyOf(requireNonNull(includes)); + this.includePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(includes))); } /** @@ -227,7 +228,7 @@ public class RepositorySidegrade { * @param excludes Paths to be excluded from the copy. */ public void setExcludes(@NotNull String... excludes) { - this.excludePaths = copyOf(requireNonNull(excludes)); + this.excludePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(excludes))); } /** @@ -237,7 +238,7 @@ public class RepositorySidegrade { * @param merges Paths to be merged during copy. */ public void setMerges(@NotNull String... merges) { - this.mergePaths = copyOf(requireNonNull(merges)); + this.mergePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(merges))); } public void setFilterLongNames(boolean filterLongNames) { @@ -472,7 +473,7 @@ public class RepositorySidegrade { } excludes.add("/:async"); - final Set<String> merges = union(copyOf(this.mergePaths), Set.of("/jcr:system")); + final Set<String> merges = union(Collections.unmodifiableSet(SetUtils.toLinkedSet(this.mergePaths)), Set.of("/jcr:system")); NodeStateCopier.builder() .include(includes) .exclude(excludes.build()) diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java index e67fc9239c..827bc7eabc 100644 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java @@ -17,7 +17,6 @@ package org.apache.jackrabbit.oak.upgrade; import static java.util.Objects.requireNonNull; -import static org.apache.jackrabbit.guava.common.collect.ImmutableSet.copyOf; import static org.apache.jackrabbit.guava.common.collect.Sets.union; import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; import static org.apache.jackrabbit.oak.plugins.migration.FilteringNodeState.ALL; @@ -35,6 +34,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -77,6 +77,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.commons.PathUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.plugins.document.util.Utils; @@ -321,7 +322,7 @@ public class RepositoryUpgrade { * @param includes Paths to be included in the copy. */ public void setIncludes(@NotNull String... includes) { - this.includePaths = copyOf(requireNonNull(includes)); + this.includePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(includes))); } /** @@ -331,7 +332,7 @@ public class RepositoryUpgrade { * @param excludes Paths to be excluded from the copy. */ public void setExcludes(@NotNull String... excludes) { - this.excludePaths = copyOf(requireNonNull(excludes)); + this.excludePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(excludes))); } /** @@ -341,7 +342,7 @@ public class RepositoryUpgrade { * @param merges Paths to be merged during copy. */ public void setMerges(@NotNull String... merges) { - this.mergePaths = copyOf(requireNonNull(merges)); + this.mergePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(merges))); } /** @@ -939,8 +940,8 @@ public class RepositoryUpgrade { private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, String workspaceName) throws RepositoryException { final Set<String> includes = calculateEffectiveIncludePaths(includePaths, sourceRoot); - final Set<String> excludes = union(copyOf(this.excludePaths), Set.of("/jcr:system/jcr:versionStorage")); - final Set<String> merges = union(copyOf(this.mergePaths), Set.of("/jcr:system")); + final Set<String> excludes = union(Collections.unmodifiableSet(SetUtils.toLinkedSet(this.excludePaths)), Set.of("/jcr:system/jcr:versionStorage")); + final Set<String> merges = union(Collections.unmodifiableSet(SetUtils.toLinkedSet(this.mergePaths)), Set.of("/jcr:system")); logger.info("Copying workspace {} [i: {}, e: {}, m: {}]", workspaceName, includes, excludes, merges); @@ -959,7 +960,7 @@ public class RepositoryUpgrade { static Set<String> calculateEffectiveIncludePaths(Set<String> includePaths, NodeState sourceRoot) { if (!includePaths.contains("/")) { - return copyOf(includePaths); + return Collections.unmodifiableSet(SetUtils.toLinkedSet(includePaths)); } // include child nodes from source individually to avoid deleting other initialized content
