Skip to content

Commit

Permalink
Combine searchGroupingMembers and getGroupingMembers endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
JorWo committed Feb 3, 2025
1 parent 11b77cb commit ab4c221
Show file tree
Hide file tree
Showing 15 changed files with 290 additions and 174 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -305,25 +305,13 @@ public ResponseEntity<GroupingGroupMembers> getGroupingMembers(@RequestHeader(CU
@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer size,
@RequestParam(required = true) SortBy sortBy,
@RequestParam Boolean isAscending) {
@RequestParam Boolean isAscending,
@RequestParam(required = false) String searchString) {
logger.info("Entered REST getGroupingMembers...");
return ResponseEntity
.ok()
.body(groupingOwnerService
.getGroupingMembers(currentUser, groupingPath, page, size, sortBy.sortString(), isAscending));
}

/**
* Get grouping members of a selected grouping path by search string.
*/
@GetMapping(value = "/groupings/{path:[\\w-:.]+}/search/{search}")
public ResponseEntity<GroupingGroupMembers> searchGroupingMembers(
@RequestHeader(CURRENT_USER_KEY) String currentUser,
@PathVariable String path, @PathVariable String search) {
logger.info("Entered REST searchGroupingMembers");
return ResponseEntity
.ok()
.body(groupingOwnerService.groupingMembersBySearchString(currentUser, path, search));
.getGroupingMembers(currentUser, groupingPath, page, size, sortBy.sortString(), isAscending, searchString));
}

/**
Expand Down Expand Up @@ -721,7 +709,7 @@ public ResponseEntity<Integer> getNumberOfGroupingMembers(@RequestHeader(CURRENT
logger.info("Enter REST getNumberOfGroupingMembers...");
return ResponseEntity
.ok()
.body(groupingsService.numberOfGroupingMembers(currentUser, path));
.body(groupingOwnerService.numberOfGroupingMembers(currentUser, path));
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package edu.hawaii.its.api.groupings;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import edu.hawaii.its.api.wrapper.GetMembersResult;
import edu.hawaii.its.api.wrapper.Subject;
Expand All @@ -14,25 +16,36 @@
public class GroupingGroupMembers implements GroupingResult {
private String resultCode;
private String groupPath;
private int size;

private List<GroupingGroupMember> members;

public GroupingGroupMembers(GetMembersResult getMembersResult) {
setResultCode(getMembersResult.getResultCode());
setGroupPath(getMembersResult.getGroup().getGroupPath());
setMembers(getMembersResult.getSubjects());
setSize(members.size());
}

public GroupingGroupMembers(SubjectsResults subjectsResults) {
setResultCode(subjectsResults.getResultCode());
setGroupPath(subjectsResults.getGroup().getGroupPath());
setMembers(subjectsResults.getSubjects());
setSize(members.size());
}

public GroupingGroupMembers() {
setResultCode("");
setGroupPath("");
setMembers(new ArrayList<>());
setSize(0);
}

private GroupingGroupMembers(GroupingGroupMembers other) {
this.resultCode = other.resultCode;
this.groupPath = other.groupPath;
this.size = other.size;
this.members = other.members;
}

@Override public String getResultCode() {
Expand All @@ -51,14 +64,48 @@ public void setGroupPath(String groupPath) {
this.groupPath = groupPath;
}

public int getSize() {
return size;
}

public void setSize(int size) {
this.size = size;
}

public List<GroupingGroupMember> getMembers() {
return this.members;
}

public void setMembers(List<Subject> subjects) {
this.members = new ArrayList<>();
for (Subject subject : subjects) {
this.members.add(new GroupingGroupMember(subject));
}
}

public List<GroupingGroupMember> getMembers() {
return this.members;
public GroupingGroupMembers sort(String sortString, boolean isAscending) {
Map<String, Comparator<GroupingGroupMember>> comparatorMap = Map.of(
"name", Comparator.comparing(GroupingGroupMember::getName),
"search_string0", Comparator.comparing(GroupingGroupMember::getUid),
"subjectId", Comparator.comparing(GroupingGroupMember::getUhUuid)
);
Comparator<GroupingGroupMember> comparator = comparatorMap.get(sortString);

GroupingGroupMembers groupingGroupMembers = new GroupingGroupMembers(this);
groupingGroupMembers.members.sort(isAscending ? comparator : comparator.reversed());

return groupingGroupMembers;
}

public GroupingGroupMembers paginate(int pageNumber, int pageSize) {
int fromIndex = (pageNumber - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, members.size());

GroupingGroupMembers groupingGroupMembers = new GroupingGroupMembers(this);
groupingGroupMembers.members = fromIndex < toIndex
? members.subList(fromIndex, toIndex)
: new ArrayList<>();

return groupingGroupMembers;
}
}
15 changes: 13 additions & 2 deletions src/main/java/edu/hawaii/its/api/service/GrouperApiService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import java.util.ArrayList;
import java.util.List;

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;

import edu.hawaii.its.api.wrapper.AddMemberResult;
import edu.hawaii.its.api.wrapper.AddMembersCommand;
import edu.hawaii.its.api.wrapper.AddMembersResults;
Expand Down Expand Up @@ -116,10 +119,11 @@ public SubjectsResults getSubjects(List<String> uhIdentifiers) {
/**
* Get a list of members for a specific grouping path with search string
*/
public SubjectsResults getSubjects(String groupingPath, String SearchString) {
@Cacheable("search")
public SubjectsResults getSubjects(String groupingPath, String searchString) {
SubjectsResults subjectsResults = exec.execute(new SubjectsCommand()
.assignGroupingPath(groupingPath)
.assignSearchString(SearchString));
.assignSearchString(searchString));
return subjectsResults;
}

Expand Down Expand Up @@ -267,6 +271,7 @@ public FindAttributesResults findAttributesResults(String currentUser, String at
/**
* Add a UH identifier to group listing.
*/
@CacheEvict(value="search", key="#groupPath")
public AddMemberResult addMember(String currentUser, String groupPath, String uhIdentifier) {
return exec.execute(new AddMembersCommand()
.owner(currentUser)
Expand All @@ -277,6 +282,7 @@ public AddMemberResult addMember(String currentUser, String groupPath, String uh
/**
* Add multiple UH identifiers to a group listing.
*/
@CacheEvict(value="search", key="#groupPath")
public AddMembersResults addMembers(String currentUser, String groupPath, List<String> uhIdentifiers) {
return exec.execute(new AddMembersCommand()
.owner(currentUser)
Expand All @@ -287,6 +293,7 @@ public AddMembersResults addMembers(String currentUser, String groupPath, List<S
/**
* Add multiple path owners to a group owner listing.
*/
@CacheEvict(value="search", key="#groupPath")
public AddMembersResults addGroupPathOwners(String currentUser, String groupPath, List<String> groupPathOwners) {
return exec.execute(new AddMembersCommand()
.owner(currentUser)
Expand All @@ -297,6 +304,7 @@ public AddMembersResults addGroupPathOwners(String currentUser, String groupPath
/**
* Remove a UH identifier from a group listing.
*/
@CacheEvict(value="search", key="#groupPath")
public RemoveMemberResult removeMember(String currentUser, String groupPath, String uhIdentifier) {
return exec.execute(new RemoveMembersCommand()
.owner(currentUser)
Expand All @@ -307,6 +315,7 @@ public RemoveMemberResult removeMember(String currentUser, String groupPath, Str
/**
* Remove multiple UH identifiers from a group listing.
*/
@CacheEvict(value="search", key="#groupPath")
public RemoveMembersResults removeMembers(String currentUser, String groupPath, List<String> uhIdentifiers) {
return exec.execute(new RemoveMembersCommand()
.owner(currentUser)
Expand All @@ -317,6 +326,7 @@ public RemoveMembersResults removeMembers(String currentUser, String groupPath,
/**
* Remove multiple path owners from a group owner listing.
*/
@CacheEvict(value="search", key="#groupPath")
public RemoveMembersResults removeGroupPathOwners(String currentUser, String groupPath,
List<String> groupPathOwners) {
return exec.execute(new RemoveMembersCommand()
Expand All @@ -328,6 +338,7 @@ public RemoveMembersResults removeGroupPathOwners(String currentUser, String gro
/**
* Remove all listed members from a group.
*/
@CacheEvict(value="search", key="#groupPath")
public AddMembersResults resetGroupMembers(String groupPath) {
return exec.execute(new AddMembersCommand()
.assignGroupPath(groupPath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public interface GrouperService {

SubjectsResults getSubjects(List<String> uhIdentifiers);

SubjectsResults getSubjects(String groupingPath, String SearchString);
SubjectsResults getSubjects(String groupingPath, String searchString);

GroupAttributeResults groupAttributeResults(String attribute);

Expand Down
45 changes: 30 additions & 15 deletions src/main/java/edu/hawaii/its/api/service/GroupingOwnerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
import edu.hawaii.its.api.groupings.GroupingSyncDestinations;
import edu.hawaii.its.api.type.GroupType;
import edu.hawaii.its.api.util.JsonUtil;
import edu.hawaii.its.api.util.Strings;
import edu.hawaii.its.api.wrapper.AttributesResult;
import edu.hawaii.its.api.wrapper.FindAttributesResults;
import edu.hawaii.its.api.wrapper.GetMembersResult;
import edu.hawaii.its.api.wrapper.GetMembersResults;
import edu.hawaii.its.api.wrapper.Group;
import edu.hawaii.its.api.wrapper.GroupAttributeResults;
import edu.hawaii.its.api.wrapper.HasMembersResults;
import edu.hawaii.its.api.wrapper.SubjectsResults;

/**
* GroupingOwnerService contains all the necessary functions to hydrate a selected grouping.
Expand All @@ -51,6 +53,15 @@ public GroupingOwnerService(GrouperService grouperService, MemberService memberS
this.memberService = memberService;
}

/**
* Get the number of grouping members
*/
public Integer numberOfGroupingMembers(String currentUser, String groupingPath) {
log.debug(String.format("numberOfGroupingMembers; currentUser: %s; groupingPath: %s;", currentUser, groupingPath));
GetMembersResult getMembersResult = grouperService.getMembersResult(currentUser, groupingPath);
return getMembersResult.getSubjects().size();
}

/**
* Get all members listed in the groups in groupsPath. This should be used iteratively from the UI to get all
* members of a grouping.
Expand All @@ -77,9 +88,6 @@ public GroupingGroupsMembers paginatedGrouping(String currentUser, List<String>

public GroupingGroupMembers getGroupingMembers(String currentUser, String groupingPath, Integer pageNumber,
Integer pageSize, String sortString, Boolean isAscending) {
log.debug(String.format(
"getGroupingMembers; currentUser: %s; groupingPath: %s; pageNumber: %d; pageSize: %d; sortString: %s; isAscending: %b;",
currentUser, groupingPath, pageNumber, pageSize, sortString, isAscending));
GetMembersResult getMembersResult = grouperService.getMembersResult(
currentUser,
groupingPath,
Expand All @@ -90,6 +98,25 @@ public GroupingGroupMembers getGroupingMembers(String currentUser, String groupi
return new GroupingGroupMembers(getMembersResult);
}

public GroupingGroupMembers getGroupingMembers(String currentUser, String groupingPath, Integer pageNumber,
Integer pageSize, String sortString, Boolean isAscending, String searchString) {
log.debug(String.format(
"getGroupingMembers; currentUser: %s; groupingPath: %s; pageNumber: %d; pageSize: %d; sortString: %s; isAscending: %b; searchString: %s;",
currentUser, groupingPath, pageNumber, pageSize, sortString, isAscending, searchString));

if (!memberService.isAdmin(currentUser) && !memberService.isOwner(groupingPath, currentUser)) {
throw new AccessDeniedException();
}

if (Strings.isEmpty(searchString)) {
return getGroupingMembers(currentUser, groupingPath, pageNumber, pageSize, sortString, isAscending);
}

SubjectsResults subjectsResults = grouperService.getSubjects(groupingPath, searchString);

return new GroupingGroupMembers(subjectsResults).sort(sortString, isAscending).paginate(pageNumber, pageSize);
}

public GroupingMembers getGroupingMembersWhereListed(String currentUser, String groupingPath, List<String> uhIdentifiers) {
HasMembersResults hasMembersResultsBasis = grouperService.hasMembersResults(currentUser,
groupingPath + GroupType.BASIS.value(), uhIdentifiers);
Expand All @@ -105,18 +132,6 @@ public GroupingMembers getGroupingMembersIsBasis(String currentUser, String grou
return new GroupingMembers(hasMembersResults);
}

/**
* Get grouping members of a selected grouping path by search string.
*/
public GroupingGroupMembers groupingMembersBySearchString(String currentUser, String groupingPath, String searchString) {
log.debug(String.format("groupingMembersBySearchString; currentUser: %s; groupingPath: %s; searchString: %s;",
currentUser, groupingPath, searchString));
if (!memberService.isAdmin(currentUser) && !memberService.isOwner(currentUser)) {
throw new AccessDeniedException();
}
return new GroupingGroupMembers(grouperService.getSubjects(groupingPath, searchString));
}

/**
* Get the opt attributes of a selected grouping.
*/
Expand Down
11 changes: 0 additions & 11 deletions src/main/java/edu/hawaii/its/api/service/GroupingsService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package edu.hawaii.its.api.service;

import static edu.hawaii.its.api.service.PathFilter.logger;
import static edu.hawaii.its.api.service.PathFilter.parentGroupingPath;
import static edu.hawaii.its.api.service.PathFilter.pathHasOwner;
import static edu.hawaii.its.api.service.PathFilter.removeDuplicates;
Expand All @@ -18,7 +17,6 @@
import edu.hawaii.its.api.groupings.GroupingUpdateDescriptionResult;
import edu.hawaii.its.api.type.GroupingPath;
import edu.hawaii.its.api.type.OptType;
import edu.hawaii.its.api.wrapper.GetMembersResult;
import edu.hawaii.its.api.wrapper.Group;
import edu.hawaii.its.api.wrapper.GroupAttribute;
import edu.hawaii.its.api.wrapper.GroupAttributeResults;
Expand Down Expand Up @@ -179,13 +177,4 @@ public List<String> allGroupPaths(String uhIdentifier) {
List<Group> groups = grouperService.getGroupsResults(uhIdentifier).getGroups();
return groups.stream().map(Group::getGroupPath).collect(Collectors.toList());
}

/**
* Get the number of grouping members
*/
public Integer numberOfGroupingMembers(String currentUser, String path) {
logger.debug(String.format("numberOfGroupingMembers; currentUser: %s; path: %s;", currentUser, path));
GetMembersResult getMembersResult = grouperService.getMembersResult(currentUser, path);
return getMembersResult.getSubjects().size();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public SubjectsResults getSubjects(List<String> uhIdentifiers) {
return ootbGroupingPropertiesService.getSubjects(uhIdentifiers);
}

public SubjectsResults getSubjects(String groupingPath, String SearchString){
public SubjectsResults getSubjects(String groupingPath, String searchString) {
return ootbGroupingPropertiesService.getSubject(groupingPath);
}

Expand Down
3 changes: 3 additions & 0 deletions src/main/java/edu/hawaii/its/api/type/OptType.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.hawaii.its.api.type;

import com.fasterxml.jackson.annotation.JsonValue;

public enum OptType {

IN("uh-settings:attributes:for-groups:uh-grouping:anyone-can:opt-in", InclusionType.IN),
Expand All @@ -13,6 +15,7 @@ public enum OptType {
this.inclusionType = inclusionType;
}

@JsonValue
public String value() {
return value;
}
Expand Down
3 changes: 0 additions & 3 deletions src/main/java/edu/hawaii/its/api/type/SortBy.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
import com.fasterxml.jackson.annotation.JsonValue;

public enum SortBy {

NAME("name", "name"),
UID("uid", "search_string0"),
UH_UUID("uhUuid", "subjectId");

private final String value;
private final String sortString;


SortBy(String value, String sortString) {
this.value = value;
this.sortString = sortString;
Expand All @@ -20,7 +18,6 @@ public enum SortBy {

@JsonValue
public String value() {

return value;
}

Expand Down
Loading

0 comments on commit ab4c221

Please sign in to comment.