From 2285d82ec7261a3399b1fa28683c9511aa237936 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Thu, 13 Mar 2025 15:50:14 +0530 Subject: [PATCH 1/3] OAK-11602 : removed usage of Guava's ImmutableSet.copyOf with LinkedSet --- .../principal/AutoMembershipPrincipals.java | 3 ++- .../ExternalAuthorizableActionProvider.java | 3 ++- .../ExternalGroupPrincipalProvider.java | 3 ++- .../impl/principal/ProtectionConfigImpl.java | 5 +++-- .../cug/impl/CugAccessControlManager.java | 2 +- .../cug/impl/CugExcludeImpl.java | 3 ++- .../AbstractHasItemGetItemTest.java | 3 ++- .../oak/commons/collections/SetUtils.java | 2 +- .../jackrabbit/oak/spi/mount/MountInfo.java | 2 +- .../oak/spi/observation/ChangeSet.java | 11 +++++----- .../plugins/migration/NodeStateCopier.java | 22 +++++++++---------- .../token/TokenConfigurationImpl.java | 3 ++- .../restriction/CurrentPattern.java | 3 ++- .../restriction/ItemNamePattern.java | 3 ++- .../restriction/NodeTypePattern.java | 3 ++- .../restriction/PrefixPattern.java | 3 ++- .../user/RepMembersConflictHandler.java | 7 +++--- .../site/markdown/security/user/default.md | 2 +- .../models/simplifiedroles/Role.java | 3 ++- .../ThreeRolesPermissionProvider.java | 5 +++-- .../principal/CustomPrincipalProvider.java | 3 ++- .../lucene/directory/CopyOnReadDirectory.java | 3 ++- .../index/lucene/directory/OakDirectory.java | 2 +- .../UniquenessConstraintValidator.java | 3 ++- .../flatfile/PathElementComparator.java | 3 ++- .../spi/security/ConfigurationParameters.java | 7 +++--- .../security/authentication/AuthInfoImpl.java | 3 ++- .../credentials/SimpleCredentialsSupport.java | 3 ++- .../authorization/accesscontrol/ACE.java | 3 ++- .../AbstractRestrictionProvider.java | 3 ++- .../privilege/PrivilegeBitsProvider.java | 5 +++-- .../oak/composite/CompositeNodeStore.java | 3 ++- .../NodeTypeMountedNodeStoreChecker.java | 5 +++-- .../oak/upgrade/RepositorySidegrade.java | 10 ++++----- .../oak/upgrade/RepositoryUpgrade.java | 14 ++++++------ 35 files changed, 94 insertions(+), 67 deletions(-) diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java index 4e82e98a875..2283a880c77 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java @@ -21,6 +21,7 @@ import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.guava.common.collect.Iterators; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.authentication.external.basic.AutoMembershipConfig; import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals; import org.jetbrains.annotations.NotNull; @@ -220,7 +221,7 @@ private Map collectGlobalAutoMembershipPrincipals(@NotNull Str } } // only cache the principal instance but not the group (tree might become disconnected) - principalMap.put(idpName, ImmutableSet.copyOf(map.keySet())); + principalMap.put(idpName, SetUtils.toLinkedSet(map.keySet())); } else { // resolve Group objects from cached principals principalMap.get(idpName).forEach(groupPrincipal -> { diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java index b20a86ac1ce..1e617d34518 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java @@ -21,6 +21,7 @@ import org.apache.jackrabbit.api.security.user.Group; import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.commons.PropertiesUtil; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.spi.security.SecurityProvider; import org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef; @@ -199,7 +200,7 @@ private Map> getAutomembership(boolean memberIsGroup) { private static void updateAutoMembershipMap(@NotNull Map> map, @NotNull String syncHandlerName, @NotNull String idpName, @NotNull String[] membership) { - Set userMembership = ImmutableSet.copyOf(membership); + Set userMembership = SetUtils.toLinkedSet(membership); Set previous = map.put(idpName, userMembership); if (previous != null) { String msg = previous.equals(userMembership) ? "Duplicate" : "Colliding"; diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java index c60e44cf12e..62816ffe901 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java @@ -57,6 +57,7 @@ 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.NamePathMapper; import org.apache.jackrabbit.oak.plugins.memory.PropertyValues; import org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef; @@ -327,7 +328,7 @@ public boolean isMember(@NotNull Group group, @NotNull Authorizable authorizable return Collections.emptyIterator(); } - Set valueSet = ImmutableSet.copyOf(vs); + Set valueSet = SetUtils.toLinkedSet(vs); Iterator declared = Iterators.filter(Iterators.transform(valueSet.iterator(), value -> { try { String groupPrincipalName = value.getString(); diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java index afc52c42d4f..23a4b1831db 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java @@ -20,6 +20,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.commons.PropertiesUtil; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.authentication.external.ProtectionConfig; import org.jetbrains.annotations.NotNull; import org.osgi.service.component.annotations.Activate; @@ -58,8 +59,8 @@ public class ProtectionConfigImpl implements ProtectionConfig { @Activate protected void activate(Map properties) { - propertyNames = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("propertyNames"), new String[0])); - nodeNames = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("nodeNames"), new String[0])); + propertyNames = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("propertyNames"), new String[0])); + nodeNames = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("nodeNames"), new String[0])); } @Override 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 5d40860b78f..2e3409975a9 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 @@ private Set collectEffectiveCandidates(@NotNull Root r, @NotNull Iterabl 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(SetUtils.toLinkedSet(principalNames), 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 d92d3bb4f94..dde375cdffd 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.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 @@ protected void modified(Map properties) { } private void setPrincipalNames(@NotNull Map properties) { - this.principalNames = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("principalNames"), new String[0])); + this.principalNames = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("principalNames"), new String[0])); } } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java index 2e5a219e7b7..459d587274b 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java @@ -25,6 +25,7 @@ import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils; import org.apache.jackrabbit.oak.benchmark.ReadDeepTreeTest; import org.apache.jackrabbit.oak.commons.PathUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants; import org.jetbrains.annotations.NotNull; @@ -86,7 +87,7 @@ protected void beforeSuite() throws Exception { createForEachPrincipal(principal, acMgr, allPrivileges); adminSession.save(); - nodeSet = ImmutableSet.copyOf(nodePaths); + nodeSet = SetUtils.toLinkedSet(nodePaths); } private void createForEachPrincipal(@NotNull Principal pGrantedRead, @NotNull JackrabbitAccessControlManager acMgr, @NotNull List allPrivileges) throws RepositoryException { diff --git a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java index cc736bf2b19..e5bde329594 100644 --- a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java +++ b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java @@ -114,7 +114,7 @@ public static Set newIdentityHashSet() { * @param the type of the elements */ @NotNull - public static Set toLinkedSet(@NotNull final Iterable iterable) { + public static Set toLinkedSet(@NotNull final Iterable iterable) { Objects.requireNonNull(iterable); final Set result = new LinkedHashSet<>(); iterable.forEach(result::add); diff --git a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java index 3fb339b4778..ffc020ce66c 100644 --- a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java +++ b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java @@ -65,7 +65,7 @@ public MountInfo(String name, boolean readOnly, List pathsSupportingFrag this.readOnly = readOnly; this.pathFragmentName = "oak:mount-" + name; this.includedPaths = cleanCopy(includedPaths); - this.pathsSupportingFragments = ImmutableSet.copyOf(pathsSupportingFragments); + this.pathsSupportingFragments = SetUtils.toLinkedSet(pathsSupportingFragments); } @Override diff --git a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java index 3193836945b..09578e6feb1 100644 --- a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java +++ b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java @@ -24,6 +24,7 @@ import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.commons.PathUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.commons.json.JsopBuilder; import org.apache.jackrabbit.oak.commons.json.JsopReader; import org.apache.jackrabbit.oak.commons.json.JsopTokenizer; @@ -74,11 +75,11 @@ public final class ChangeSet { ChangeSet(int maxPathDepth, Set parentPaths, Set parentNodeNames, Set parentNodeTypes, Set propertyNames, Set allNodeTypes) { this.maxPathDepth = maxPathDepth; - this.parentPaths = parentPaths == null ? null : ImmutableSet.copyOf(parentPaths); - this.parentNodeNames = parentNodeNames == null ? null : ImmutableSet.copyOf(parentNodeNames); - this.parentNodeTypes = parentNodeTypes == null ? null : ImmutableSet.copyOf(parentNodeTypes); - this.propertyNames = propertyNames == null ? null : ImmutableSet.copyOf(propertyNames); - this.allNodeTypes = allNodeTypes == null ? null : ImmutableSet.copyOf(allNodeTypes); + this.parentPaths = parentPaths == null ? null : SetUtils.toLinkedSet(parentPaths); + this.parentNodeNames = parentNodeNames == null ? null : SetUtils.toLinkedSet(parentNodeNames); + this.parentNodeTypes = parentNodeTypes == null ? null : SetUtils.toLinkedSet(parentNodeTypes); + this.propertyNames = propertyNames == null ? null : SetUtils.toLinkedSet(propertyNames); + this.allNodeTypes = allNodeTypes == null ? null : SetUtils.toLinkedSet(allNodeTypes); boolean hitsMaxPathDepth = false; if (parentPaths != null) { diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java index bb12e558896..01e8c9223d8 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java @@ -21,6 +21,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.SetUtils; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; import org.apache.jackrabbit.oak.spi.commit.CommitHook; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; @@ -41,7 +42,6 @@ import java.util.stream.StreamSupport; import static java.util.Objects.requireNonNull; -import static org.apache.jackrabbit.guava.common.collect.ImmutableSet.copyOf; import static java.util.Collections.emptySet; /** @@ -402,7 +402,7 @@ private Builder() {} @NotNull public Builder include(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.includePaths = copyOf(paths); + this.includePaths = SetUtils.toLinkedSet(paths); } return this; } @@ -416,7 +416,7 @@ public Builder include(@NotNull Set paths) { */ @NotNull public Builder include(@NotNull String... paths) { - return include(copyOf(requireNonNull(paths))); + return include(SetUtils.toLinkedSet(requireNonNull(paths))); } /** @@ -442,7 +442,7 @@ public Builder preserve(@NotNull boolean preserveOnTarget) { @NotNull public Builder exclude(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.excludePaths = copyOf(paths); + this.excludePaths = SetUtils.toLinkedSet(paths); } return this; } @@ -456,7 +456,7 @@ public Builder exclude(@NotNull Set paths) { */ @NotNull public Builder exclude(@NotNull String... paths) { - return exclude(copyOf(requireNonNull(paths))); + return exclude(SetUtils.toLinkedSet(requireNonNull(paths))); } /** @@ -469,7 +469,7 @@ public Builder exclude(@NotNull String... paths) { @NotNull public Builder supportFragment(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.fragmentPaths = copyOf(paths); + this.fragmentPaths = SetUtils.toLinkedSet(paths); } return this; } @@ -483,7 +483,7 @@ public Builder supportFragment(@NotNull Set paths) { */ @NotNull public Builder supportFragment(@NotNull String... paths) { - return supportFragment(copyOf(requireNonNull(paths))); + return supportFragment(SetUtils.toLinkedSet(requireNonNull(paths))); } /** @@ -496,7 +496,7 @@ public Builder supportFragment(@NotNull String... paths) { @NotNull public Builder excludeFragments(@NotNull Set fragments) { if (!requireNonNull(fragments).isEmpty()) { - this.excludeFragments = copyOf(fragments); + this.excludeFragments = SetUtils.toLinkedSet(fragments); } return this; } @@ -510,7 +510,7 @@ public Builder excludeFragments(@NotNull Set fragments) { */ @NotNull public Builder excludeFragments(@NotNull String... fragments) { - return exclude(copyOf(requireNonNull(fragments))); + return exclude(SetUtils.toLinkedSet(requireNonNull(fragments))); } /** @@ -523,7 +523,7 @@ public Builder excludeFragments(@NotNull String... fragments) { @NotNull public Builder merge(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.mergePaths = copyOf(paths); + this.mergePaths = SetUtils.toLinkedSet(paths); } return this; } @@ -537,7 +537,7 @@ public Builder merge(@NotNull Set paths) { */ @NotNull public Builder merge(@NotNull String... paths) { - return merge(copyOf(requireNonNull(paths))); + return merge(SetUtils.toLinkedSet(requireNonNull(paths))); } @NotNull diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java index 77ffd3eeb18..b5554bd6cd5 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java @@ -19,6 +19,7 @@ import org.apache.jackrabbit.guava.common.collect.ImmutableList; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.api.Root; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.commit.MoveTracker; import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider; import org.apache.jackrabbit.oak.spi.security.ConfigurationBase; @@ -176,7 +177,7 @@ private CredentialsSupport newCredentialsSupport() { } else if (size == 1) { return credentialsSupport.values().iterator().next(); } else { - return CompositeCredentialsSupport.newInstance(() -> ImmutableSet.copyOf(credentialsSupport.values())); + return CompositeCredentialsSupport.newInstance(() -> SetUtils.toLinkedSet(credentialsSupport.values())); } } } diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java index 75726625a70..76ce4025f19 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java @@ -21,6 +21,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; 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.plugins.index.IndexConstants; import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants; import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants; @@ -99,7 +100,7 @@ class CurrentPattern implements RestrictionPattern { CurrentPattern(@NotNull String treePath, @NotNull Iterable propertyNames) { this.treePath = treePath; - this.propertyNames = ImmutableSet.copyOf(propertyNames); + this.propertyNames = SetUtils.toLinkedSet(propertyNames); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java index 723227c9b27..9eabebc6b69 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java @@ -21,6 +21,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; 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.spi.security.authorization.restriction.RestrictionPattern; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,7 +38,7 @@ class ItemNamePattern implements RestrictionPattern { private final Set names; ItemNamePattern(Iterable names) { - this.names = ImmutableSet.copyOf(names); + this.names = SetUtils.toLinkedSet(names); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java index 8e7062f7a26..6cfc97115c4 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java @@ -20,6 +20,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.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionPattern; import org.apache.jackrabbit.oak.plugins.tree.TreeUtil; import org.jetbrains.annotations.NotNull; @@ -41,7 +42,7 @@ class NodeTypePattern implements RestrictionPattern { private final Set nodeTypeNames; NodeTypePattern(@NotNull Iterable nodeTypeNames) { - this.nodeTypeNames = ImmutableSet.copyOf(nodeTypeNames); + this.nodeTypeNames = SetUtils.toLinkedSet(nodeTypeNames); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java index be031e90152..89f50ae0298 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java @@ -21,6 +21,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; 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.spi.security.authorization.restriction.RestrictionPattern; import org.apache.jackrabbit.util.Text; import org.jetbrains.annotations.NotNull; @@ -45,7 +46,7 @@ class PrefixPattern implements RestrictionPattern { private final Set prefixes; PrefixPattern(@NotNull Iterable prefixes) { - this.prefixes = ImmutableSet.copyOf(prefixes); + this.prefixes = SetUtils.toLinkedSet(prefixes); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java index cf0e5fecaf5..cbabce1e90e 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java @@ -24,6 +24,7 @@ import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.plugins.memory.PropertyBuilder; import org.apache.jackrabbit.oak.spi.commit.ThreeWayConflictHandler; import org.apache.jackrabbit.oak.spi.security.user.UserConstants; @@ -81,7 +82,7 @@ public Resolution changeDeletedProperty(@NotNull NodeBuilder parent, @NotNull Pr public Resolution changeChangedProperty(@NotNull NodeBuilder parent, @NotNull PropertyState ours, @NotNull PropertyState theirs, @NotNull PropertyState base) { if (isRepMembersProperty(theirs)) { - Set baseMembers = ImmutableSet.copyOf(base.getValue(Type.STRINGS)); + Set baseMembers = SetUtils.toLinkedSet(base.getValue(Type.STRINGS)); mergeChange(parent, ours, theirs, baseMembers); return Resolution.MERGED; } else { @@ -157,8 +158,8 @@ private static void mergeChange(@NotNull NodeBuilder parent, @NotNull PropertySt PropertyBuilder merged = PropertyBuilder.array(Type.WEAKREFERENCE); merged.setName(UserConstants.REP_MEMBERS); - Set theirMembers = ImmutableSet.copyOf(theirs.getValue(Type.STRINGS)); - Set ourMembers = ImmutableSet.copyOf(ours.getValue(Type.STRINGS)); + Set theirMembers = SetUtils.toLinkedSet(theirs.getValue(Type.STRINGS)); + Set ourMembers = SetUtils.toLinkedSet(ours.getValue(Type.STRINGS)); // merge ours and theirs to a de-duplicated set Set combined = new LinkedHashSet<>(Sets.intersection(ourMembers, theirMembers)); diff --git a/oak-doc/src/site/markdown/security/user/default.md b/oak-doc/src/site/markdown/security/user/default.md index 3bb9817370d..fe38c00ac45 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 properties) { - ids = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("ids"), new String[0])); + ids = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("ids"), new String[0])); } } diff --git a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java index 8418d2b535d..4b0279cb65e 100644 --- a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java +++ b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java @@ -18,6 +18,7 @@ import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions; import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,7 @@ final class Role { private Role(long permissions, String... privilegeNames) { this.permissions = permissions; - this.privilegeNames = ImmutableSet.copyOf(privilegeNames); + this.privilegeNames = SetUtils.toLinkedSet(privilegeNames); } private Role(@NotNull Role base, long permissions, String... privilegeNames) { diff --git a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java index 175e74a8e44..786a3f8d775 100644 --- a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java +++ b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java @@ -21,6 +21,7 @@ import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.commons.collections.IterableUtils; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.plugins.tree.ReadOnly; import org.apache.jackrabbit.oak.plugins.tree.RootProvider; import org.apache.jackrabbit.oak.plugins.tree.TreeLocation; @@ -61,7 +62,7 @@ class ThreeRolesPermissionProvider implements AggregatedPermissionProvider, Thre @NotNull String supportedPath, @NotNull Context ctx, @NotNull RootProvider rootProvider) { this.root = root; - this.principalNames = ImmutableSet.copyOf(IterableUtils.transform(principals, Principal::getName)); + this.principalNames = SetUtils.toLinkedSet(IterableUtils.transform(principals, Principal::getName)); this.supportedPath = supportedPath; this.ctx = ctx; this.rootProvider = rootProvider; @@ -166,7 +167,7 @@ public Set getPrivileges(@Nullable Tree tree) { @Override public boolean hasPrivileges(@Nullable Tree tree, @NotNull String... privilegeNames) { - return getPrivileges(tree).containsAll(ImmutableSet.copyOf(privilegeNames)); + return getPrivileges(tree).containsAll(SetUtils.toLinkedSet(privilegeNames)); } @NotNull diff --git a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java index 87c024906e4..1ed44973110 100644 --- a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java +++ b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java @@ -21,6 +21,7 @@ import java.util.Iterator; import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,7 +37,7 @@ class CustomPrincipalProvider implements PrincipalProvider { private final Set knownPrincipalNames; CustomPrincipalProvider(String[] knownPrincipalNames) { - this.knownPrincipalNames = ImmutableSet.copyOf(knownPrincipalNames); + this.knownPrincipalNames = SetUtils.toLinkedSet(knownPrincipalNames); } @Nullable 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 ce29ff52c95..2e0c69327b5 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 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 @@ private void removeDeletedFiles() throws IOException { Set 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 f2fc6a88d6f..b88089a6e38 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 @@ -341,7 +341,7 @@ private Set getListing(){ if (fileNames == null){ fileNames = directoryBuilder.getChildNodeNames(); } - Set result = ImmutableSet.copyOf(fileNames); + Set result = 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 2df17786a53..b34de4694a5 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 @@ -31,6 +31,7 @@ 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 +69,7 @@ public void validate() throws CommitFailedException { String propertyRelativePath = e.getKey(); String value = e.getValue(); Iterable indexedPaths = getIndexedPaths(propertyRelativePath, value); - Set allPaths = ImmutableSet.copyOf(indexedPaths); + Set allPaths = SetUtils.toLinkedSet(indexedPaths); //If more than one match found then filter out stale paths if (allPaths.size() > 1) { diff --git a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java index 3b2d5ff9988..729202534a9 100644 --- a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java +++ b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java @@ -25,6 +25,7 @@ import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; +import org.apache.jackrabbit.oak.commons.collections.SetUtils; public class PathElementComparator implements Comparator> { private final Set preferred; @@ -34,7 +35,7 @@ public PathElementComparator() { } public PathElementComparator(Iterable preferredPathElements) { - this.preferred = ImmutableSet.copyOf(preferredPathElements); + this.preferred = SetUtils.toLinkedSet(preferredPathElements); } @Override 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 63406d872eb..f26476598c9 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 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 @@ private static Set convertToSet(@NotNull Object configProperty, @NotNull Clas if (configProperty instanceof Set) { return (Set) configProperty; } else if (configProperty instanceof Collection) { - return ImmutableSet.copyOf((Collection) configProperty); + return SetUtils.toLinkedSet((Collection) configProperty); } else if (configProperty.getClass().isArray()) { - return ImmutableSet.copyOf((Object[]) configProperty); + return SetUtils.toLinkedSet((Object[]) configProperty); } else { String[] arr = PropertiesUtil.toStringArray(configProperty); if (arr != null) { - return ImmutableSet.copyOf(arr); + return 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 19ad19ecc98..9e8629318d6 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 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 AuthInfoImpl(@Nullable String userID, @Nullable Map attributes @Nullable Iterable 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() : 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 1b12c44982a..c6efafc00c9 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 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,7 +66,7 @@ public String getUserId(@NotNull Credentials credentials) { public Map getAttributes(@NotNull Credentials credentials) { if (credentials instanceof SimpleCredentials) { final SimpleCredentials sc = (SimpleCredentials) credentials; - return Maps.asMap(ImmutableSet.copyOf(sc.getAttributeNames()), + return Maps.asMap(SetUtils.toLinkedSet(sc.getAttributeNames()), input -> sc.getAttribute(input)); } 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 c590a7b0f2b..623f46899d8 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 @@ 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 ACE(@Nullable Principal principal, @Nullable PrivilegeBits privilegeBits, this.principal = principal; this.privilegeBits = privilegeBits; this.isAllow = isAllow; - this.restrictions = (restrictions == null) ? Collections.emptySet() : ImmutableSet.copyOf(restrictions); + this.restrictions = (restrictions == null) ? Collections.emptySet() : 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 b811eb00bf9..40aa49720cb 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.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 Set getSupportedRestrictions(@Nullable String oakP if (isUnsupportedPath(oakPath)) { return Collections.emptySet(); } else { - return ImmutableSet.copyOf(supported.values()); + return 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 a0cfc44cbbe..26f10517ca8 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.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 Set getPrivilegeNames(@Nullable PrivilegeBits privilegeBits) { privilegeNames = bitsToNames.get(pb); } else { privilegeNames = collectPrivilegeNames(privilegesTree, pb); - bitsToNames.put(pb, ImmutableSet.copyOf(privilegeNames)); + bitsToNames.put(pb, SetUtils.toLinkedSet(privilegeNames)); } return privilegeNames; } @@ -251,7 +252,7 @@ public Iterable getAggregatedPrivilegeNames(@NotNull String... privilege return extractAggregatedPrivileges(Collections.singleton(privName)); } } else { - Set pNames = ImmutableSet.copyOf(privilegeNames); + Set pNames = 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 557d3a51a3d..cb331af0f17 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.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 boolean release(String checkpoint) { } private String getPartialCheckpointName(MountedNodeStore nodeStore, String globalCheckpoint, Map globalCheckpointProperties, boolean resolveByName) { - Set validCheckpointNames = ImmutableSet.copyOf(nodeStore.getNodeStore().checkpoints()); + Set validCheckpointNames = 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 0ee31a4a483..b740c4ebfcd 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 @@ -20,6 +20,7 @@ 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 +82,13 @@ public NodeTypeMountedNodeStoreChecker() { public NodeTypeMountedNodeStoreChecker(String invalidNodeType, String errorLabel, String... excludedNodeTypes) { this.invalidNodeType = invalidNodeType; this.errorLabel = errorLabel; - this.excludedNodeTypes = ImmutableSet.copyOf(excludedNodeTypes); + this.excludedNodeTypes = 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 = 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 6689186f04b..ab7da6abc0c 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 @@ -34,6 +34,7 @@ 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 +70,6 @@ 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 +217,7 @@ public void setCustomCommitHooks(List customCommitHooks) { * @param includes Paths to be included in the copy. */ public void setIncludes(@NotNull String... includes) { - this.includePaths = copyOf(requireNonNull(includes)); + this.includePaths = SetUtils.toLinkedSet(requireNonNull(includes)); } /** @@ -227,7 +227,7 @@ public void setIncludes(@NotNull String... includes) { * @param excludes Paths to be excluded from the copy. */ public void setExcludes(@NotNull String... excludes) { - this.excludePaths = copyOf(requireNonNull(excludes)); + this.excludePaths = SetUtils.toLinkedSet(requireNonNull(excludes)); } /** @@ -237,7 +237,7 @@ public void setExcludes(@NotNull String... excludes) { * @param merges Paths to be merged during copy. */ public void setMerges(@NotNull String... merges) { - this.mergePaths = copyOf(requireNonNull(merges)); + this.mergePaths = SetUtils.toLinkedSet(requireNonNull(merges)); } public void setFilterLongNames(boolean filterLongNames) { @@ -472,7 +472,7 @@ private void copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot) { } excludes.add("/:async"); - final Set merges = union(copyOf(this.mergePaths), Set.of("/jcr:system")); + final Set merges = union(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 e67fc9239c2..a7bd7e79733 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; @@ -77,6 +76,7 @@ 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 +321,7 @@ public void setCustomCommitHooks(List customCommitHooks) { * @param includes Paths to be included in the copy. */ public void setIncludes(@NotNull String... includes) { - this.includePaths = copyOf(requireNonNull(includes)); + this.includePaths = SetUtils.toLinkedSet(requireNonNull(includes)); } /** @@ -331,7 +331,7 @@ public void setIncludes(@NotNull String... includes) { * @param excludes Paths to be excluded from the copy. */ public void setExcludes(@NotNull String... excludes) { - this.excludePaths = copyOf(requireNonNull(excludes)); + this.excludePaths = SetUtils.toLinkedSet(requireNonNull(excludes)); } /** @@ -341,7 +341,7 @@ public void setExcludes(@NotNull String... excludes) { * @param merges Paths to be merged during copy. */ public void setMerges(@NotNull String... merges) { - this.mergePaths = copyOf(requireNonNull(merges)); + this.mergePaths = SetUtils.toLinkedSet(requireNonNull(merges)); } /** @@ -939,8 +939,8 @@ private PropertyDefinitionTemplate createPropertyDefinitionTemplate(ValueFactory private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, String workspaceName) throws RepositoryException { final Set includes = calculateEffectiveIncludePaths(includePaths, sourceRoot); - final Set excludes = union(copyOf(this.excludePaths), Set.of("/jcr:system/jcr:versionStorage")); - final Set merges = union(copyOf(this.mergePaths), Set.of("/jcr:system")); + final Set excludes = union(SetUtils.toLinkedSet(this.excludePaths), Set.of("/jcr:system/jcr:versionStorage")); + final Set merges = union(SetUtils.toLinkedSet(this.mergePaths), Set.of("/jcr:system")); logger.info("Copying workspace {} [i: {}, e: {}, m: {}]", workspaceName, includes, excludes, merges); @@ -959,7 +959,7 @@ private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, Strin static Set calculateEffectiveIncludePaths(Set includePaths, NodeState sourceRoot) { if (!includePaths.contains("/")) { - return copyOf(includePaths); + return SetUtils.toLinkedSet(includePaths); } // include child nodes from source individually to avoid deleting other initialized content From bae312ff6b246379a8316dd5ff075eca71c93ade Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Thu, 13 Mar 2025 21:25:49 +0530 Subject: [PATCH 2/3] OAK-11602 : wrapped Set in Collections.unmodifiableSet wherever we are sending/receiving it to outer world --- .../impl/principal/ProtectionConfigImpl.java | 4 ++-- .../cug/impl/CugExcludeImpl.java | 3 ++- .../oak/spi/observation/ChangeSet.java | 11 +++++----- .../plugins/migration/NodeStateCopier.java | 20 +++++++++---------- .../models/simplifiedroles/Role.java | 3 ++- .../jackrabbit/oak/run/RevisionsCommand.java | 3 ++- .../spi/security/ConfigurationParameters.java | 6 +++--- .../security/authentication/AuthInfoImpl.java | 2 +- .../credentials/SimpleCredentialsSupport.java | 3 +-- .../authorization/accesscontrol/ACE.java | 2 +- .../AbstractRestrictionProvider.java | 2 +- .../privilege/PrivilegeBitsProvider.java | 4 ++-- .../NodeTypeMountedNodeStoreChecker.java | 5 +++-- .../oak/upgrade/RepositoryUpgrade.java | 3 ++- 14 files changed, 38 insertions(+), 33 deletions(-) diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java index 23a4b1831db..751f620a91c 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java @@ -59,8 +59,8 @@ public class ProtectionConfigImpl implements ProtectionConfig { @Activate protected void activate(Map properties) { - propertyNames = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("propertyNames"), new String[0])); - nodeNames = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("nodeNames"), new String[0])); + propertyNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("propertyNames"), new String[0]))); + nodeNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("nodeNames"), new String[0]))); } @Override 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 dde375cdffd..69ea6ad53bd 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 @@ -20,6 +20,7 @@ import java.util.Collections; 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; @@ -81,6 +82,6 @@ protected void modified(Map properties) { } private void setPrincipalNames(@NotNull Map properties) { - this.principalNames = SetUtils.toLinkedSet(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-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java index 09578e6feb1..67689483f41 100644 --- a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java +++ b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java @@ -18,6 +18,7 @@ */ package org.apache.jackrabbit.oak.spi.observation; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -75,11 +76,11 @@ public final class ChangeSet { ChangeSet(int maxPathDepth, Set parentPaths, Set parentNodeNames, Set parentNodeTypes, Set propertyNames, Set allNodeTypes) { this.maxPathDepth = maxPathDepth; - this.parentPaths = parentPaths == null ? null : SetUtils.toLinkedSet(parentPaths); - this.parentNodeNames = parentNodeNames == null ? null : SetUtils.toLinkedSet(parentNodeNames); - this.parentNodeTypes = parentNodeTypes == null ? null : SetUtils.toLinkedSet(parentNodeTypes); - this.propertyNames = propertyNames == null ? null : SetUtils.toLinkedSet(propertyNames); - this.allNodeTypes = allNodeTypes == null ? null : SetUtils.toLinkedSet(allNodeTypes); + this.parentPaths = parentPaths == null ? null : Collections.unmodifiableSet(SetUtils.toLinkedSet(parentPaths)); + this.parentNodeNames = parentNodeNames == null ? null : Collections.unmodifiableSet(SetUtils.toLinkedSet(parentNodeNames)); + this.parentNodeTypes = parentNodeTypes == null ? null : Collections.unmodifiableSet(SetUtils.toLinkedSet(parentNodeTypes)); + this.propertyNames = propertyNames == null ? null : Collections.unmodifiableSet(SetUtils.toLinkedSet(propertyNames)); + this.allNodeTypes = allNodeTypes == null ? null : Collections.unmodifiableSet(SetUtils.toLinkedSet(allNodeTypes)); boolean hitsMaxPathDepth = false; if (parentPaths != null) { diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java index 01e8c9223d8..0636d404842 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java @@ -402,7 +402,7 @@ private Builder() {} @NotNull public Builder include(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.includePaths = SetUtils.toLinkedSet(paths); + this.includePaths = Collections.unmodifiableSet(paths); } return this; } @@ -416,7 +416,7 @@ public Builder include(@NotNull Set paths) { */ @NotNull public Builder include(@NotNull String... paths) { - return include(SetUtils.toLinkedSet(requireNonNull(paths))); + return include(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths)))); } /** @@ -442,7 +442,7 @@ public Builder preserve(@NotNull boolean preserveOnTarget) { @NotNull public Builder exclude(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.excludePaths = SetUtils.toLinkedSet(paths); + this.excludePaths = Collections.unmodifiableSet(paths); } return this; } @@ -456,7 +456,7 @@ public Builder exclude(@NotNull Set paths) { */ @NotNull public Builder exclude(@NotNull String... paths) { - return exclude(SetUtils.toLinkedSet(requireNonNull(paths))); + return exclude(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths)))); } /** @@ -469,7 +469,7 @@ public Builder exclude(@NotNull String... paths) { @NotNull public Builder supportFragment(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.fragmentPaths = SetUtils.toLinkedSet(paths); + this.fragmentPaths = Collections.unmodifiableSet(paths); } return this; } @@ -483,7 +483,7 @@ public Builder supportFragment(@NotNull Set paths) { */ @NotNull public Builder supportFragment(@NotNull String... paths) { - return supportFragment(SetUtils.toLinkedSet(requireNonNull(paths))); + return supportFragment(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths)))); } /** @@ -496,7 +496,7 @@ public Builder supportFragment(@NotNull String... paths) { @NotNull public Builder excludeFragments(@NotNull Set fragments) { if (!requireNonNull(fragments).isEmpty()) { - this.excludeFragments = SetUtils.toLinkedSet(fragments); + this.excludeFragments = Collections.unmodifiableSet(fragments); } return this; } @@ -510,7 +510,7 @@ public Builder excludeFragments(@NotNull Set fragments) { */ @NotNull public Builder excludeFragments(@NotNull String... fragments) { - return exclude(SetUtils.toLinkedSet(requireNonNull(fragments))); + return exclude(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(fragments)))); } /** @@ -523,7 +523,7 @@ public Builder excludeFragments(@NotNull String... fragments) { @NotNull public Builder merge(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.mergePaths = SetUtils.toLinkedSet(paths); + this.mergePaths = Collections.unmodifiableSet(paths); } return this; } @@ -537,7 +537,7 @@ public Builder merge(@NotNull Set paths) { */ @NotNull public Builder merge(@NotNull String... paths) { - return merge(SetUtils.toLinkedSet(requireNonNull(paths))); + return merge(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths)))); } @NotNull diff --git a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java index 4b0279cb65e..159f07a1f0f 100644 --- a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java +++ b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.oak.exercise.security.authorization.models.simplifiedroles; +import java.util.Collections; import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.commons.collections.SetUtils; @@ -38,7 +39,7 @@ final class Role { private Role(long permissions, String... privilegeNames) { this.permissions = permissions; - this.privilegeNames = SetUtils.toLinkedSet(privilegeNames); + this.privilegeNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames)); } private Role(@NotNull Role base, long permissions, String... privilegeNames) { diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java index 1bdf2ac8baa..70e9ee6b036 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java @@ -340,8 +340,9 @@ public void execute(String... args) throws Exception { System.err.println("unknown revisions command: " + subCmd); } if (exitWhenDone) { + LOG.warn("Exiting with system, exit code is 0"); System.out.printf("Command '%s' completed successfully.%n", subCmd); - System.exit(0); +// System.exit(0); } } catch (Throwable e) { LOG.error("Command failed", e); 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 f26476598c9..89827a9069e 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 @@ -307,13 +307,13 @@ private static Set convertToSet(@NotNull Object configProperty, @NotNull Clas if (configProperty instanceof Set) { return (Set) configProperty; } else if (configProperty instanceof Collection) { - return SetUtils.toLinkedSet((Collection) configProperty); + return Collections.unmodifiableSet(SetUtils.toLinkedSet((Collection) configProperty)); } else if (configProperty.getClass().isArray()) { - return SetUtils.toLinkedSet((Object[]) configProperty); + return Collections.unmodifiableSet(SetUtils.toLinkedSet((Object[]) configProperty)); } else { String[] arr = PropertiesUtil.toStringArray(configProperty); if (arr != null) { - return SetUtils.toLinkedSet(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 9e8629318d6..ecbaea7dc3e 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 @@ -49,7 +49,7 @@ public AuthInfoImpl(@Nullable String userID, @Nullable Map attributes @Nullable Iterable principals) { this.userID = userID; this.attributes = (attributes == null) ? Collections.emptyMap() : attributes; - this.principals = (principals == null) ? Collections.emptySet() : SetUtils.toLinkedSet(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 c6efafc00c9..d3bc5b76f1a 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 @@ -66,8 +66,7 @@ public String getUserId(@NotNull Credentials credentials) { public Map getAttributes(@NotNull Credentials credentials) { if (credentials instanceof SimpleCredentials) { final SimpleCredentials sc = (SimpleCredentials) credentials; - return Maps.asMap(SetUtils.toLinkedSet(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 623f46899d8..7d20de75753 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 @@ -77,7 +77,7 @@ public ACE(@Nullable Principal principal, @Nullable PrivilegeBits privilegeBits, this.principal = principal; this.privilegeBits = privilegeBits; this.isAllow = isAllow; - this.restrictions = (restrictions == null) ? Collections.emptySet() : SetUtils.toLinkedSet(restrictions); + this.restrictions = (restrictions == null) ? Collections.emptySet() : Collections.unmodifiableSet(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 40aa49720cb..18194f39996 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 @@ -71,7 +71,7 @@ public Set getSupportedRestrictions(@Nullable String oakP if (isUnsupportedPath(oakPath)) { return Collections.emptySet(); } else { - return SetUtils.toLinkedSet(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 26f10517ca8..6f8c2217450 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 @@ -203,7 +203,7 @@ public Set getPrivilegeNames(@Nullable PrivilegeBits privilegeBits) { privilegeNames = bitsToNames.get(pb); } else { privilegeNames = collectPrivilegeNames(privilegesTree, pb); - bitsToNames.put(pb, SetUtils.toLinkedSet(privilegeNames)); + bitsToNames.put(pb, Collections.unmodifiableSet(privilegeNames)); } return privilegeNames; } @@ -252,7 +252,7 @@ public Iterable getAggregatedPrivilegeNames(@NotNull String... privilege return extractAggregatedPrivileges(Collections.singleton(privName)); } } else { - Set pNames = SetUtils.toLinkedSet(privilegeNames); + Set 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/checks/NodeTypeMountedNodeStoreChecker.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java index b740c4ebfcd..43f29d016b7 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,6 +18,7 @@ import static java.util.Objects.requireNonNull; +import java.util.Collections; import java.util.Set; import org.apache.jackrabbit.oak.commons.collections.SetUtils; @@ -82,13 +83,13 @@ public NodeTypeMountedNodeStoreChecker() { public NodeTypeMountedNodeStoreChecker(String invalidNodeType, String errorLabel, String... excludedNodeTypes) { this.invalidNodeType = invalidNodeType; this.errorLabel = errorLabel; - this.excludedNodeTypes = SetUtils.toLinkedSet(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 = SetUtils.toLinkedSet(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/RepositoryUpgrade.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java index a7bd7e79733..782c3f0256e 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 @@ -34,6 +34,7 @@ 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; @@ -959,7 +960,7 @@ private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, Strin static Set calculateEffectiveIncludePaths(Set includePaths, NodeState sourceRoot) { if (!includePaths.contains("/")) { - return SetUtils.toLinkedSet(includePaths); + return Collections.unmodifiableSet(includePaths); } // include child nodes from source individually to avoid deleting other initialized content From 58c0a3229f4863d11b6b7eebdc405a73408e5348 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Fri, 14 Mar 2025 12:15:54 +0530 Subject: [PATCH 3/3] OAK-11602 : revert changes from 7 modules --- .../impl/principal/AutoMembershipPrincipals.java | 3 ++- .../ExternalAuthorizableActionProvider.java | 2 +- .../principal/ExternalGroupPrincipalProvider.java | 2 +- .../cug/impl/CugAccessControlManager.java | 2 +- .../authorization/cug/impl/CugExcludeImpl.java | 4 +--- .../jackrabbit/oak/spi/mount/MountInfo.java | 2 +- .../oak/plugins/migration/NodeStateCopier.java | 10 +++++----- .../token/TokenConfigurationImpl.java | 3 ++- .../authorization/restriction/CurrentPattern.java | 3 ++- .../restriction/ItemNamePattern.java | 3 ++- .../restriction/NodeTypePattern.java | 3 ++- .../authorization/restriction/PrefixPattern.java | 3 ++- .../security/user/RepMembersConflictHandler.java | 7 ++++--- .../src/site/markdown/security/user/default.md | 2 +- .../ThreeRolesPermissionProvider.java | 5 +++-- .../principal/CustomPrincipalProvider.java | 2 +- .../lucene/directory/CopyOnReadDirectory.java | 3 +-- .../index/lucene/directory/OakDirectory.java | 2 +- .../property/UniquenessConstraintValidator.java | 3 +-- .../document/flatfile/PathElementComparator.java | 2 +- .../jackrabbit/oak/run/RevisionsCommand.java | 3 +-- .../oak/spi/security/ConfigurationParameters.java | 7 +++---- .../spi/security/authentication/AuthInfoImpl.java | 3 +-- .../credentials/SimpleCredentialsSupport.java | 4 ++-- .../security/authorization/accesscontrol/ACE.java | 3 +-- .../restriction/AbstractRestrictionProvider.java | 3 +-- .../security/privilege/PrivilegeBitsProvider.java | 5 ++--- .../oak/composite/CompositeNodeStore.java | 3 +-- .../checks/NodeTypeMountedNodeStoreChecker.java | 6 ++---- .../oak/upgrade/RepositorySidegrade.java | 10 +++++----- .../jackrabbit/oak/upgrade/RepositoryUpgrade.java | 15 +++++++-------- 31 files changed, 61 insertions(+), 67 deletions(-) diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java index 2283a880c77..7b3a8da36a0 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java @@ -33,6 +33,7 @@ import java.security.Principal; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -221,7 +222,7 @@ private Map collectGlobalAutoMembershipPrincipals(@NotNull Str } } // only cache the principal instance but not the group (tree might become disconnected) - principalMap.put(idpName, SetUtils.toLinkedSet(map.keySet())); + principalMap.put(idpName, Collections.unmodifiableSet(SetUtils.toLinkedSet(map.keySet()))); } else { // resolve Group objects from cached principals principalMap.get(idpName).forEach(groupPrincipal -> { diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java index 1e617d34518..bfec5b7453d 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java @@ -200,7 +200,7 @@ private Map> getAutomembership(boolean memberIsGroup) { private static void updateAutoMembershipMap(@NotNull Map> map, @NotNull String syncHandlerName, @NotNull String idpName, @NotNull String[] membership) { - Set userMembership = SetUtils.toLinkedSet(membership); + Set userMembership = Collections.unmodifiableSet(SetUtils.toLinkedSet(membership)); Set previous = map.put(idpName, userMembership); if (previous != null) { String msg = previous.equals(userMembership) ? "Duplicate" : "Colliding"; diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java index 62816ffe901..cebfafe1aeb 100644 --- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java +++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java @@ -328,7 +328,7 @@ public boolean isMember(@NotNull Group group, @NotNull Authorizable authorizable return Collections.emptyIterator(); } - Set valueSet = SetUtils.toLinkedSet(vs); + Set valueSet = Collections.unmodifiableSet(SetUtils.toLinkedSet(vs)); Iterator declared = Iterators.filter(Iterators.transform(valueSet.iterator(), value -> { try { String groupPrincipalName = value.getString(); 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 2e3409975a9..5d40860b78f 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 @@ private Set collectEffectiveCandidates(@NotNull Root r, @NotNull Iterabl Tree cug = CugUtil.getCug(t); PropertyState pNames = (cug == null) ? null : cug.getProperty(REP_PRINCIPAL_NAMES); if (pNames != null) { - if (!Collections.disjoint(SetUtils.toLinkedSet(principalNames), SetUtils.toLinkedSet(pNames.getValue(Type.STRINGS)))) { + if (!Collections.disjoint(ImmutableSet.copyOf(principalNames), ImmutableSet.copyOf(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 69ea6ad53bd..d92d3bb4f94 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 @@ -20,10 +20,8 @@ import java.util.Collections; 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; @@ -82,6 +80,6 @@ protected void modified(Map properties) { } private void setPrincipalNames(@NotNull Map properties) { - this.principalNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("principalNames"), new String[0]))); + this.principalNames = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("principalNames"), new String[0])); } } diff --git a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java index ffc020ce66c..33aa119512d 100644 --- a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java +++ b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java @@ -65,7 +65,7 @@ public MountInfo(String name, boolean readOnly, List pathsSupportingFrag this.readOnly = readOnly; this.pathFragmentName = "oak:mount-" + name; this.includedPaths = cleanCopy(includedPaths); - this.pathsSupportingFragments = SetUtils.toLinkedSet(pathsSupportingFragments); + this.pathsSupportingFragments = Collections.unmodifiableSet(SetUtils.toLinkedSet(pathsSupportingFragments)); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java index 0636d404842..a75f8fb3ebc 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java @@ -402,7 +402,7 @@ private Builder() {} @NotNull public Builder include(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.includePaths = Collections.unmodifiableSet(paths); + this.includePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(paths)); } return this; } @@ -442,7 +442,7 @@ public Builder preserve(@NotNull boolean preserveOnTarget) { @NotNull public Builder exclude(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.excludePaths = Collections.unmodifiableSet(paths); + this.excludePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(paths)); } return this; } @@ -469,7 +469,7 @@ public Builder exclude(@NotNull String... paths) { @NotNull public Builder supportFragment(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.fragmentPaths = Collections.unmodifiableSet(paths); + this.fragmentPaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(paths)); } return this; } @@ -496,7 +496,7 @@ public Builder supportFragment(@NotNull String... paths) { @NotNull public Builder excludeFragments(@NotNull Set fragments) { if (!requireNonNull(fragments).isEmpty()) { - this.excludeFragments = Collections.unmodifiableSet(fragments); + this.excludeFragments = Collections.unmodifiableSet(SetUtils.toLinkedSet(fragments)); } return this; } @@ -523,7 +523,7 @@ public Builder excludeFragments(@NotNull String... fragments) { @NotNull public Builder merge(@NotNull Set paths) { if (!requireNonNull(paths).isEmpty()) { - this.mergePaths = Collections.unmodifiableSet(paths); + this.mergePaths = Collections.unmodifiableSet(SetUtils.toLinkedSet(paths)); } return this; } diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java index b5554bd6cd5..9a266a59dc8 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java @@ -45,6 +45,7 @@ import org.osgi.service.metatype.annotations.ObjectClassDefinition; import java.security.Principal; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -177,7 +178,7 @@ private CredentialsSupport newCredentialsSupport() { } else if (size == 1) { return credentialsSupport.values().iterator().next(); } else { - return CompositeCredentialsSupport.newInstance(() -> SetUtils.toLinkedSet(credentialsSupport.values())); + return CompositeCredentialsSupport.newInstance(() -> Collections.unmodifiableSet(SetUtils.toLinkedSet(credentialsSupport.values()))); } } } diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java index 76ce4025f19..26fd216dfce 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java @@ -35,6 +35,7 @@ import javax.jcr.NamespaceRegistry; +import java.util.Collections; import java.util.Objects; import java.util.Set; @@ -100,7 +101,7 @@ class CurrentPattern implements RestrictionPattern { CurrentPattern(@NotNull String treePath, @NotNull Iterable propertyNames) { this.treePath = treePath; - this.propertyNames = SetUtils.toLinkedSet(propertyNames); + this.propertyNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(propertyNames)); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java index 9eabebc6b69..e188b390d3d 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.oak.security.authorization.restriction; +import java.util.Collections; import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.api.PropertyState; @@ -38,7 +39,7 @@ class ItemNamePattern implements RestrictionPattern { private final Set names; ItemNamePattern(Iterable names) { - this.names = SetUtils.toLinkedSet(names); + this.names = Collections.unmodifiableSet(SetUtils.toLinkedSet(names)); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java index 6cfc97115c4..f60ec466dce 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.oak.security.authorization.restriction; +import java.util.Collections; import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.api.PropertyState; @@ -42,7 +43,7 @@ class NodeTypePattern implements RestrictionPattern { private final Set nodeTypeNames; NodeTypePattern(@NotNull Iterable nodeTypeNames) { - this.nodeTypeNames = SetUtils.toLinkedSet(nodeTypeNames); + this.nodeTypeNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(nodeTypeNames)); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java index 89f50ae0298..7eb3d01ae1c 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.oak.security.authorization.restriction; +import java.util.Collections; import java.util.Set; import org.apache.jackrabbit.guava.common.collect.ImmutableSet; import org.apache.jackrabbit.oak.api.PropertyState; @@ -46,7 +47,7 @@ class PrefixPattern implements RestrictionPattern { private final Set prefixes; PrefixPattern(@NotNull Iterable prefixes) { - this.prefixes = SetUtils.toLinkedSet(prefixes); + this.prefixes = Collections.unmodifiableSet(SetUtils.toLinkedSet(prefixes)); } @Override diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java index cbabce1e90e..28ab7fbf6d5 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java @@ -18,6 +18,7 @@ */ package org.apache.jackrabbit.oak.security.user; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; @@ -82,7 +83,7 @@ public Resolution changeDeletedProperty(@NotNull NodeBuilder parent, @NotNull Pr public Resolution changeChangedProperty(@NotNull NodeBuilder parent, @NotNull PropertyState ours, @NotNull PropertyState theirs, @NotNull PropertyState base) { if (isRepMembersProperty(theirs)) { - Set baseMembers = SetUtils.toLinkedSet(base.getValue(Type.STRINGS)); + Set baseMembers = Collections.unmodifiableSet(SetUtils.toLinkedSet(base.getValue(Type.STRINGS))); mergeChange(parent, ours, theirs, baseMembers); return Resolution.MERGED; } else { @@ -158,8 +159,8 @@ private static void mergeChange(@NotNull NodeBuilder parent, @NotNull PropertySt PropertyBuilder merged = PropertyBuilder.array(Type.WEAKREFERENCE); merged.setName(UserConstants.REP_MEMBERS); - Set theirMembers = SetUtils.toLinkedSet(theirs.getValue(Type.STRINGS)); - Set ourMembers = SetUtils.toLinkedSet(ours.getValue(Type.STRINGS)); + Set theirMembers = Collections.unmodifiableSet(SetUtils.toLinkedSet(theirs.getValue(Type.STRINGS))); + Set ourMembers = Collections.unmodifiableSet(SetUtils.toLinkedSet(ours.getValue(Type.STRINGS))); // merge ours and theirs to a de-duplicated set Set combined = new LinkedHashSet<>(Sets.intersection(ourMembers, theirMembers)); diff --git a/oak-doc/src/site/markdown/security/user/default.md b/oak-doc/src/site/markdown/security/user/default.md index fe38c00ac45..3bb9817370d 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 properties) { - ids = SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("ids"), new String[0])); + ids = ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("ids"), new String[0])); } } diff --git a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java index 786a3f8d775..1f7d4e7deef 100644 --- a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java +++ b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java @@ -39,6 +39,7 @@ import org.jetbrains.annotations.Nullable; import java.security.Principal; +import java.util.Collections; import java.util.Set; class ThreeRolesPermissionProvider implements AggregatedPermissionProvider, ThreeRolesConstants { @@ -62,7 +63,7 @@ class ThreeRolesPermissionProvider implements AggregatedPermissionProvider, Thre @NotNull String supportedPath, @NotNull Context ctx, @NotNull RootProvider rootProvider) { this.root = root; - this.principalNames = SetUtils.toLinkedSet(IterableUtils.transform(principals, Principal::getName)); + this.principalNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(IterableUtils.transform(principals, Principal::getName))); this.supportedPath = supportedPath; this.ctx = ctx; this.rootProvider = rootProvider; @@ -167,7 +168,7 @@ public Set getPrivileges(@Nullable Tree tree) { @Override public boolean hasPrivileges(@Nullable Tree tree, @NotNull String... privilegeNames) { - return getPrivileges(tree).containsAll(SetUtils.toLinkedSet(privilegeNames)); + return getPrivileges(tree).containsAll(Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames))); } @NotNull diff --git a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java index 1ed44973110..14b6feb417b 100644 --- a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java +++ b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java @@ -37,7 +37,7 @@ class CustomPrincipalProvider implements PrincipalProvider { private final Set knownPrincipalNames; CustomPrincipalProvider(String[] knownPrincipalNames) { - this.knownPrincipalNames = SetUtils.toLinkedSet(knownPrincipalNames); + this.knownPrincipalNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(knownPrincipalNames)); } @Nullable 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 2e0c69327b5..ce29ff52c95 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,7 +35,6 @@ 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; @@ -333,7 +332,7 @@ private void removeDeletedFiles() throws IOException { Set filesToBeDeleted = // Files present locally - SetUtils.toLinkedSet(local.listAll()).stream() + ImmutableSet.copyOf(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 b88089a6e38..f2fc6a88d6f 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 @@ -341,7 +341,7 @@ private Set getListing(){ if (fileNames == null){ fileNames = directoryBuilder.getChildNodeNames(); } - Set result = SetUtils.toLinkedSet(fileNames); + Set result = ImmutableSet.copyOf(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 b34de4694a5..2df17786a53 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 @@ -31,7 +31,6 @@ 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; @@ -69,7 +68,7 @@ public void validate() throws CommitFailedException { String propertyRelativePath = e.getKey(); String value = e.getValue(); Iterable indexedPaths = getIndexedPaths(propertyRelativePath, value); - Set allPaths = SetUtils.toLinkedSet(indexedPaths); + Set allPaths = ImmutableSet.copyOf(indexedPaths); //If more than one match found then filter out stale paths if (allPaths.size() > 1) { diff --git a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java index 729202534a9..c7b9c2bebf1 100644 --- a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java +++ b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java @@ -35,7 +35,7 @@ public PathElementComparator() { } public PathElementComparator(Iterable preferredPathElements) { - this.preferred = SetUtils.toLinkedSet(preferredPathElements); + this.preferred = Collections.unmodifiableSet(SetUtils.toLinkedSet(preferredPathElements)); } @Override diff --git a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java index 70e9ee6b036..1bdf2ac8baa 100644 --- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java +++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/RevisionsCommand.java @@ -340,9 +340,8 @@ public void execute(String... args) throws Exception { System.err.println("unknown revisions command: " + subCmd); } if (exitWhenDone) { - LOG.warn("Exiting with system, exit code is 0"); System.out.printf("Command '%s' completed successfully.%n", subCmd); -// System.exit(0); + System.exit(0); } } catch (Throwable e) { LOG.error("Command failed", e); 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 89827a9069e..63406d872eb 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,7 +29,6 @@ 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; @@ -307,13 +306,13 @@ private static Set convertToSet(@NotNull Object configProperty, @NotNull Clas if (configProperty instanceof Set) { return (Set) configProperty; } else if (configProperty instanceof Collection) { - return Collections.unmodifiableSet(SetUtils.toLinkedSet((Collection) configProperty)); + return ImmutableSet.copyOf((Collection) configProperty); } else if (configProperty.getClass().isArray()) { - return Collections.unmodifiableSet(SetUtils.toLinkedSet((Object[]) configProperty)); + return ImmutableSet.copyOf((Object[]) configProperty); } else { String[] arr = PropertiesUtil.toStringArray(configProperty); if (arr != null) { - return Collections.unmodifiableSet(SetUtils.toLinkedSet(arr)); + return ImmutableSet.copyOf(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 ecbaea7dc3e..19ad19ecc98 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,7 +27,6 @@ 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; @@ -49,7 +48,7 @@ public AuthInfoImpl(@Nullable String userID, @Nullable Map attributes @Nullable Iterable principals) { this.userID = userID; this.attributes = (attributes == null) ? Collections.emptyMap() : attributes; - this.principals = (principals == null) ? Collections.emptySet() : Collections.unmodifiableSet(SetUtils.toLinkedSet(principals)); + this.principals = (principals == null) ? Collections.emptySet() : ImmutableSet.copyOf(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 d3bc5b76f1a..1b12c44982a 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,7 +26,6 @@ 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; @@ -66,7 +65,8 @@ public String getUserId(@NotNull Credentials credentials) { public Map getAttributes(@NotNull Credentials credentials) { if (credentials instanceof SimpleCredentials) { final SimpleCredentials sc = (SimpleCredentials) credentials; - return Maps.asMap(Collections.unmodifiableSet(SetUtils.toLinkedSet(sc.getAttributeNames())), sc::getAttribute); + return Maps.asMap(ImmutableSet.copyOf(sc.getAttributeNames()), + input -> sc.getAttribute(input)); } 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 7d20de75753..c590a7b0f2b 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,7 +19,6 @@ 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; @@ -77,7 +76,7 @@ public ACE(@Nullable Principal principal, @Nullable PrivilegeBits privilegeBits, this.principal = principal; this.privilegeBits = privilegeBits; this.isAllow = isAllow; - this.restrictions = (restrictions == null) ? Collections.emptySet() : Collections.unmodifiableSet(restrictions); + this.restrictions = (restrictions == null) ? Collections.emptySet() : ImmutableSet.copyOf(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 18194f39996..b811eb00bf9 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,7 +35,6 @@ 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; @@ -71,7 +70,7 @@ public Set getSupportedRestrictions(@Nullable String oakP if (isUnsupportedPath(oakPath)) { return Collections.emptySet(); } else { - return Collections.unmodifiableSet(SetUtils.toLinkedSet(supported.values())); + return ImmutableSet.copyOf(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 6f8c2217450..a0cfc44cbbe 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,7 +34,6 @@ 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; @@ -203,7 +202,7 @@ public Set getPrivilegeNames(@Nullable PrivilegeBits privilegeBits) { privilegeNames = bitsToNames.get(pb); } else { privilegeNames = collectPrivilegeNames(privilegesTree, pb); - bitsToNames.put(pb, Collections.unmodifiableSet(privilegeNames)); + bitsToNames.put(pb, ImmutableSet.copyOf(privilegeNames)); } return privilegeNames; } @@ -252,7 +251,7 @@ public Iterable getAggregatedPrivilegeNames(@NotNull String... privilege return extractAggregatedPrivileges(Collections.singleton(privName)); } } else { - Set pNames = Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames)); + Set pNames = ImmutableSet.copyOf(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 cb331af0f17..557d3a51a3d 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,7 +22,6 @@ 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; @@ -294,7 +293,7 @@ public boolean release(String checkpoint) { } private String getPartialCheckpointName(MountedNodeStore nodeStore, String globalCheckpoint, Map globalCheckpointProperties, boolean resolveByName) { - Set validCheckpointNames = SetUtils.toLinkedSet(nodeStore.getNodeStore().checkpoints()); + Set validCheckpointNames = ImmutableSet.copyOf(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 43f29d016b7..0ee31a4a483 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,10 +18,8 @@ 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; @@ -83,13 +81,13 @@ public NodeTypeMountedNodeStoreChecker() { public NodeTypeMountedNodeStoreChecker(String invalidNodeType, String errorLabel, String... excludedNodeTypes) { this.invalidNodeType = invalidNodeType; this.errorLabel = errorLabel; - this.excludedNodeTypes = Collections.unmodifiableSet(SetUtils.toLinkedSet(excludedNodeTypes)); + this.excludedNodeTypes = ImmutableSet.copyOf(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 = Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(ctx.getProperties().get(EXCLUDED_NODE_TYPES), new String[0]))); + excludedNodeTypes = ImmutableSet.copyOf(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 ab7da6abc0c..6689186f04b 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 @@ -34,7 +34,6 @@ 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; @@ -70,6 +69,7 @@ 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 +217,7 @@ public void setCustomCommitHooks(List customCommitHooks) { * @param includes Paths to be included in the copy. */ public void setIncludes(@NotNull String... includes) { - this.includePaths = SetUtils.toLinkedSet(requireNonNull(includes)); + this.includePaths = copyOf(requireNonNull(includes)); } /** @@ -227,7 +227,7 @@ public void setIncludes(@NotNull String... includes) { * @param excludes Paths to be excluded from the copy. */ public void setExcludes(@NotNull String... excludes) { - this.excludePaths = SetUtils.toLinkedSet(requireNonNull(excludes)); + this.excludePaths = copyOf(requireNonNull(excludes)); } /** @@ -237,7 +237,7 @@ public void setExcludes(@NotNull String... excludes) { * @param merges Paths to be merged during copy. */ public void setMerges(@NotNull String... merges) { - this.mergePaths = SetUtils.toLinkedSet(requireNonNull(merges)); + this.mergePaths = copyOf(requireNonNull(merges)); } public void setFilterLongNames(boolean filterLongNames) { @@ -472,7 +472,7 @@ private void copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot) { } excludes.add("/:async"); - final Set merges = union(SetUtils.toLinkedSet(this.mergePaths), Set.of("/jcr:system")); + final Set merges = union(copyOf(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 782c3f0256e..e67fc9239c2 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,6 +17,7 @@ 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; @@ -34,7 +35,6 @@ 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,7 +77,6 @@ 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; @@ -322,7 +321,7 @@ public void setCustomCommitHooks(List customCommitHooks) { * @param includes Paths to be included in the copy. */ public void setIncludes(@NotNull String... includes) { - this.includePaths = SetUtils.toLinkedSet(requireNonNull(includes)); + this.includePaths = copyOf(requireNonNull(includes)); } /** @@ -332,7 +331,7 @@ public void setIncludes(@NotNull String... includes) { * @param excludes Paths to be excluded from the copy. */ public void setExcludes(@NotNull String... excludes) { - this.excludePaths = SetUtils.toLinkedSet(requireNonNull(excludes)); + this.excludePaths = copyOf(requireNonNull(excludes)); } /** @@ -342,7 +341,7 @@ public void setExcludes(@NotNull String... excludes) { * @param merges Paths to be merged during copy. */ public void setMerges(@NotNull String... merges) { - this.mergePaths = SetUtils.toLinkedSet(requireNonNull(merges)); + this.mergePaths = copyOf(requireNonNull(merges)); } /** @@ -940,8 +939,8 @@ private PropertyDefinitionTemplate createPropertyDefinitionTemplate(ValueFactory private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, String workspaceName) throws RepositoryException { final Set includes = calculateEffectiveIncludePaths(includePaths, sourceRoot); - final Set excludes = union(SetUtils.toLinkedSet(this.excludePaths), Set.of("/jcr:system/jcr:versionStorage")); - final Set merges = union(SetUtils.toLinkedSet(this.mergePaths), Set.of("/jcr:system")); + final Set excludes = union(copyOf(this.excludePaths), Set.of("/jcr:system/jcr:versionStorage")); + final Set merges = union(copyOf(this.mergePaths), Set.of("/jcr:system")); logger.info("Copying workspace {} [i: {}, e: {}, m: {}]", workspaceName, includes, excludes, merges); @@ -960,7 +959,7 @@ private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, Strin static Set calculateEffectiveIncludePaths(Set includePaths, NodeState sourceRoot) { if (!includePaths.contains("/")) { - return Collections.unmodifiableSet(includePaths); + return copyOf(includePaths); } // include child nodes from source individually to avoid deleting other initialized content