Skip to content

Commit

Permalink
Add support for fetching members for all groups
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Jun 12, 2019
1 parent 00e9021 commit 7dc965e
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ void read(Filter filter, ResultsHandler handler, OperationOptions options) {
}
}

void getGroupByUuid(String uuid, ResultsHandler handler, OperationOptions options) {
getGroupByUuid(uuid, handler);
boolean getGroupByUuid(String uuid, ResultsHandler handler, OperationOptions options) {
return getGroupByUuid(uuid, handler);
}

void getGroupByName(String name, ResultsHandler handler, OperationOptions options) {
Expand All @@ -68,7 +68,7 @@ void getGroupByName(String name, ResultsHandler handler, OperationOptions option

abstract void getAllGroups(ResultsHandler handler, OperationOptions options);

void executeFindGroupsResponse(HttpPost request, JSONObject body, ResultsHandler handler) {
boolean executeFindGroupsResponse(HttpPost request, JSONObject body, ResultsHandler handler) {
System.out.println("Request = " + body.toString());
JSONObject response = processor.callRequest(request, body, true, CONTENT_TYPE_JSON);
System.out.println("Got response: " + response);
Expand All @@ -77,10 +77,11 @@ void executeFindGroupsResponse(HttpPost request, JSONObject body, ResultsHandler
if (groups != null) {
for (Object group : groups) {
if (!handleGroupJsonObject(group, handler)) {
return;
return false;
}
}
}
return true;
}

void executeFindGroupsAsMembersResponse(HttpPost request, JSONObject body, ResultsHandler handler) {
Expand Down Expand Up @@ -111,7 +112,7 @@ void getGroupByName(String groupName, ResultsHandler handler) {
}
}

void getGroupByUuid(String groupUuid, ResultsHandler handler) {
boolean getGroupByUuid(String groupUuid, ResultsHandler handler) {
URIBuilder uriBuilder = processor.getURIBuilder()
.setPath(URI_BASE_PATH + PATH_GROUPS);
try {
Expand All @@ -120,7 +121,7 @@ void getGroupByUuid(String groupUuid, ResultsHandler handler) {
.put("WsRestFindGroupsRequest", new JSONObject()
.put("wsGroupLookups", new JSONObject[] { new JSONObject()
.put("uuid", groupUuid) }));
executeFindGroupsResponse(request, body, handler);
return executeFindGroupsResponse(request, body, handler);
} catch (RuntimeException | URISyntaxException e) {
throw processor.processException(e, uriBuilder, "Get all groups");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,22 @@ ObjectClassInfoBuilder buildSchema() {
return builder;
}

protected void getAllGroups(ResultsHandler handler, OperationOptions options) {
protected void getAllGroups(final ResultsHandler handler, final OperationOptions options) {
boolean isGetMembers = isGetMembers(options);
if (isGetMembers) {
throw new IllegalArgumentException("Cannot get members when retrieving all groups");
if (!isGetMembers) {
getAllGroupsNoMembers(handler);
} else {
ResultsHandler localHandler = new ResultsHandler() {
@Override
public boolean handle(ConnectorObject connectorObject) {
return getGroupByUuid(connectorObject.getUid().getUidValue(), handler, options);
}
};
getAllGroupsNoMembers(localHandler);
}
}

private void getAllGroupsNoMembers(ResultsHandler handler) {
URIBuilder uriBuilder = processor.getURIBuilder()
.setPath(URI_BASE_PATH + PATH_GROUPS);
try {
Expand All @@ -77,9 +88,9 @@ protected void getAllGroups(ResultsHandler handler, OperationOptions options) {
}

@Override
void getGroupByUuid(String uuid, ResultsHandler handler, OperationOptions options) {
boolean getGroupByUuid(String uuid, ResultsHandler handler, OperationOptions options) {
if (!isGetMembers(options)) {
getGroupByUuid(uuid, handler);
return getGroupByUuid(uuid, handler);
} else {
URIBuilder uriBuilder = processor.getURIBuilder()
.setPath(URI_BASE_PATH + PATH_GROUPS);
Expand All @@ -90,7 +101,7 @@ void getGroupByUuid(String uuid, ResultsHandler handler, OperationOptions option
.put("wsGroupLookups", new JSONObject[] { new JSONObject()
.put("uuid", uuid) })
.put("includeSubjectDetail", true));
executeGetGroupWithMembersResponse(request, body, handler);
return executeGetGroupWithMembersResponse(request, body, handler);
} catch (RuntimeException | URISyntaxException e) {
throw processor.processException(e, uriBuilder, "Get all groups");
}
Expand Down Expand Up @@ -119,7 +130,7 @@ void getGroupByName(String name, ResultsHandler handler, OperationOptions option
}
}

private void executeGetGroupWithMembersResponse(HttpPost request, JSONObject body, ResultsHandler handler) {
private boolean executeGetGroupWithMembersResponse(HttpPost request, JSONObject body, ResultsHandler handler) {
System.out.println("Request = " + body.toString());
JSONObject response = processor.callRequest(request, body, true, CONTENT_TYPE_JSON);
System.out.println("Got response: " + response);
Expand All @@ -136,23 +147,25 @@ private void executeGetGroupWithMembersResponse(HttpPost request, JSONObject bod
builder.addAttribute(ATTR_EXTENSION, extension);

List<String> subjects = new ArrayList<>();
JSONArray members = processor.getArray(response, WS_GET_MEMBERS_RESULTS, RESULTS, WS_SUBJECTS);
for (Object memberObject : members) {
JSONObject member = (JSONObject) memberObject;
String sourceId = processor.getStringOrNull(member, "sourceId");
if (sourceId == null || !sourceId.equals(getConfiguration().getSubjectSource())) {
LOG.info("Skipping non-person member (source={0})", sourceId);
continue;
}
String subjectId = processor.getStringOrNull(member, "id");
if (subjectId != null) {
subjects.add(subjectId);
} else {
LOG.info("Skipping unnamed member (source={0})", member);
JSONArray members = processor.getArray(response, false, WS_GET_MEMBERS_RESULTS, RESULTS, WS_SUBJECTS);
if (members != null) {
for (Object memberObject : members) {
JSONObject member = (JSONObject) memberObject;
String sourceId = processor.getStringOrNull(member, "sourceId");
if (sourceId == null || !sourceId.equals(getConfiguration().getSubjectSource())) {
LOG.info("Skipping non-person member (source={0})", sourceId);
continue;
}
String subjectId = processor.getStringOrNull(member, "id");
if (subjectId != null) {
subjects.add(subjectId);
} else {
LOG.info("Skipping unnamed member (source={0})", member);
}
}
builder.addAttribute(ATTR_MEMBER, subjects);
}
builder.addAttribute(ATTR_MEMBER, subjects);
handler.handle(builder.build());
return handler.handle(builder.build());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,13 @@ public void allGroups() {
}
}

@Test(priority = 16, expectedExceptions = IllegalArgumentException.class)
@Test(priority = 16)
public void allGroupsWithMembers() {
results.clear();
grouperConnector.executeQuery(PLAIN_GROUP, null, handler, getMembersOptions());
for (ConnectorObject group : results) {
System.out.println("Found group: " + group);
}
}

@Test(priority = 20)
Expand Down

0 comments on commit 7dc965e

Please sign in to comment.