public synchronized Set findMembers()

in src/main/java/org/apache/sling/cli/impl/people/MembersFinder.java [61:110]


    public synchronized Set<Member> findMembers() {
        final Set<Member> membersReplacementSet = new HashSet<>();
        if (lastCheck == 0 || System.currentTimeMillis() > lastCheck + STALENESS_IN_HOURS * 3600 * 1000) {
            lastCheck = System.currentTimeMillis();
            try (CloseableHttpClient client = HttpClients.createDefault()) {
                JsonParser parser = new JsonParser();
                Set<String> memberIds;
                Set<String> pmcMemberIds;
                try (CloseableHttpResponse response = client.execute(new HttpGet(PROJECTS_ENDPOINT))) {
                    try (InputStream content = response.getEntity().getContent();
                         InputStreamReader reader = new InputStreamReader(content)) {
                        if (response.getStatusLine().getStatusCode() != 200) {
                            throw new IOException("Status line : " + response.getStatusLine());
                        }
                        JsonElement jsonElement = parser.parse(reader);
                        JsonObject json = jsonElement.getAsJsonObject();
                        JsonObject sling = json.get("projects").getAsJsonObject().get("sling").getAsJsonObject();
                        memberIds = new HashSet<>();
                        pmcMemberIds = new HashSet<>();
                        for (JsonElement member : sling.getAsJsonArray("members")) {
                            memberIds.add(member.getAsString());
                        }
                        for (JsonElement pmcMember : sling.getAsJsonArray("owners")) {
                            pmcMemberIds.add(pmcMember.getAsString());
                        }
                    }
                }
                try (CloseableHttpResponse response = client.execute(new HttpGet(PEOPLE_ENDPOINT))) {
                    try (InputStream content = response.getEntity().getContent();
                         InputStreamReader reader = new InputStreamReader(content)) {
                        if (response.getStatusLine().getStatusCode() != 200) {
                            throw new IOException("Status line : " + response.getStatusLine());
                        }
                        JsonElement jsonElement = parser.parse(reader);
                        JsonObject json = jsonElement.getAsJsonObject();
                        JsonObject people = json.get("people").getAsJsonObject();
                        for (String id : memberIds) {
                            String name = people.get(id).getAsJsonObject().get("name").getAsString();
                            membersReplacementSet.add(new Member(id, name, pmcMemberIds.contains(id)));
                        }

                    }
                }
                members = Collections.unmodifiableSet(membersReplacementSet);
            } catch (IOException e) {
                LOGGER.error("Unable to retrieve Apache Sling project members.", e);
            }
        }
        return members;
    }