protected Map toMap()

in src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfo.java [188:232]


    protected Map<Principal, AccessRights> toMap(Session session, JsonObject aclJson)
            throws RepositoryException {
        if (aclJson == null) {
            return Collections.emptyMap();
        }

        Map<Principal, AccessRights> map;
        AccessControlManager acm = session.getAccessControlManager();
        PrincipalManager principalManager = AccessControlUtil.getPrincipalManager(session);
        Function<? super JsonValue, ? extends Principal> keyMapper = val -> {
            String principalId = ((JsonObject)val).getString(JsonConvert.KEY_PRINCIPAL);
            return principalManager.getPrincipal(principalId);
        };
        Function<? super JsonValue, ? extends AccessRights> valueMapper = val -> {
            AccessRights rights = new AccessRights();
            JsonObject privilegesObj = ((JsonObject)val).getJsonObject(JsonConvert.KEY_PRIVILEGES);
            if (privilegesObj != null) {
                privilegesObj.entrySet().stream()
                    .forEach(entry -> {
                        Privilege privilege = null;
                        try {
                            privilege = acm.privilegeFromName(entry.getKey());
                        } catch (RepositoryException e) {
                            logger.warn("Failed to resolve privilege", e);
                        }
                        if (privilege != null) {
                            JsonValue value = entry.getValue();
                            if (value instanceof JsonObject) {
                                JsonObject privilegeObj = (JsonObject)value;
                                if (privilegeObj.containsKey(JsonConvert.KEY_ALLOW)) {
                                    rights.granted.add(privilege);
                                }
                                if (privilegeObj.containsKey(JsonConvert.KEY_DENY)) {
                                    rights.denied.add(privilege);
                                }
                            }
                        }
                    });
            }
            return rights;
        };
        map = aclJson.values().stream()
                .collect(Collectors.toMap(keyMapper, valueMapper));
        return map;
    }