@NotNull @Override public Iterable<String> apply(@Nullable String privName) { if (privName == null) { return Collections.emptySet(); } else { if (NON_AGGREGATE_PRIVILEGES.contains(privName)) { return Collections.singleton(privName); } else if (aggregation.containsKey(privName)) { return aggregation.get(privName); } else if (AGGREGATE_PRIVILEGES.containsKey(privName)) { return resolveBuiltInAggregation(privName); } else { ImmutableSet.Builder<String> builder = ImmutableSet.builder(); fillAggregation(getPrivilegesTree().getChild(privName), builder); Set<String> aggregates = builder.build(); if (!JCR_ALL.equals(privName) && !aggregates.isEmpty()) { aggregation.put(privName, aggregates); } return aggregates; } } }
private void fillAggregation(@NotNull Tree privTree, @NotNull ImmutableSet.Builder<String> builder) { if (!privTree.exists()) { return; } PropertyState aggregates = privTree.getProperty(REP_AGGREGATES); if (aggregates != null) { for (String name : aggregates.getValue(Type.NAMES)) { if (NON_AGGREGATE_PRIVILEGES.contains(name)) { builder.add(name); } else if (aggregation.containsKey(name)) { builder.addAll(aggregation.get(name)); } else if (AGGREGATE_PRIVILEGES.containsKey(name)) { builder.addAll(resolveBuiltInAggregation(name)); } else { fillAggregation(privTree.getParent().getChild(name), builder); } } } else { builder.add(privTree.getName()); } } }
@Nonnull @Override public Iterable<String> apply(@Nullable String privName) { if (privName == null) { return Collections.emptySet(); } else { if (NON_AGGREGATE_PRIVILEGES.contains(privName)) { return Collections.singleton(privName); } else if (aggregation.containsKey(privName)) { return aggregation.get(privName); } else if (AGGREGATE_PRIVILEGES.containsKey(privName)) { return resolveBuiltInAggregation(privName); } else { ImmutableSet.Builder<String> builder = ImmutableSet.builder(); fillAggregation(getPrivilegesTree().getChild(privName), builder); Set<String> aggregates = builder.build(); if (!JCR_ALL.equals(privName) && !aggregates.isEmpty()) { aggregation.put(privName, aggregates); } return aggregates; } } }
private void fillAggregation(@Nonnull Tree privTree, @Nonnull ImmutableSet.Builder<String> builder) { if (!privTree.exists()) { return; } PropertyState aggregates = privTree.getProperty(REP_AGGREGATES); if (aggregates != null) { for (String name : aggregates.getValue(Type.NAMES)) { if (NON_AGGREGATE_PRIVILEGES.contains(name)) { builder.add(name); } else if (aggregation.containsKey(name)) { builder.addAll(aggregation.get(name)); } else if (AGGREGATE_PRIVILEGES.containsKey(name)) { builder.addAll(resolveBuiltInAggregation(name)); } else { fillAggregation(privTree.getParent().getChild(name), builder); } } } else { builder.add(privTree.getName()); } } }
private Iterable<String> extractAggregatedPrivileges(@NotNull Iterable<String> privilegeNames) { return FluentIterable.from(privilegeNames).transformAndConcat(new ExtractAggregatedPrivileges()); }
private Iterable<String> extractAggregatedPrivileges(@Nonnull Iterable<String> privilegeNames) { return FluentIterable.from(privilegeNames).transformAndConcat(new ExtractAggregatedPrivileges()); }