protected Set mergeRestrictions()

in src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalPrivilege.java [82:116]


    protected Set<LocalRestriction> mergeRestrictions(Set<LocalRestriction> currentRestrictions, Set<LocalRestriction> newRestrictions) {
        Set<LocalRestriction> mergedRestrictons;
        if (newRestrictions == null) {
            mergedRestrictons = null;
        } else {
            mergedRestrictons = new HashSet<>(currentRestrictions);
            for (LocalRestriction lr : newRestrictions) {
                if (lr.isMultiValue()) {
                    String expectedName = lr.getName();
                    Optional<LocalRestriction> existing = currentRestrictions.stream()
                            .filter(r ->  r.getName().equals(expectedName))
                            .findFirst();
                    if (existing.isPresent()) {
                        //remove the old one that we are replacing
                        mergedRestrictons.removeIf(k -> expectedName.equals(k.getName()));

                        Set<Value> mergedValues = new LinkedHashSet<>();
                        // add the current values
                        LocalRestriction existingLr = existing.get();
                        Stream.of(existingLr.getValues())
                            .forEach(mergedValues::add);
                        // merge the new values
                        Stream.of(lr.getValues())
                            .forEach(mergedValues::add);
                        Value[] newValues = mergedValues.toArray(new Value[mergedValues.size()]);
                        // construct the replacement object
                        lr = LocalRestriction.cloneWithNewValues(lr, newValues);
                    }
                }
                // add to the set
                mergedRestrictons.add(lr);
            }
        }
        return mergedRestrictons;
    }