Skip to content

Commit

Permalink
Add curated groupings to membership list (uhawaii-system-its-ti-iam#596)
Browse files Browse the repository at this point in the history
  • Loading branch information
imths authored Sep 25, 2024
1 parent 6c2e94e commit db9dd19
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public class GroupingsService {
@Value("${groupings.api.trio}")
private String TRIO;

@Value("${groupings.api.curated}")
private String CURATED;

private final GroupPathService groupPathService;

private final GrouperService grouperService;
Expand All @@ -43,12 +46,17 @@ public List<String> groupingPaths() {
return allGroupingPaths(TRIO);
}

public List<String> curatedGroupings() {
return allGroupingPaths(CURATED);
}

public List<GroupingPath> allGroupingPaths() {
GroupAttributeResults groupAttributeResults = grouperService.groupAttributeResults(TRIO);
return groupAttributeResults.getGroups().stream()
.map(group -> new GroupingPath(group.getGroupPath(), group.getDescription())).collect(
Collectors.toList());
}

public GroupAttributeResults allGroupAttributeResults() {
GroupAttributeResults groupAttributeResults = grouperService.groupAttributeResults(TRIO);
return groupAttributeResults;
Expand Down
27 changes: 19 additions & 8 deletions src/main/java/edu/hawaii/its/api/service/MembershipService.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

import edu.hawaii.its.api.exception.AccessDeniedException;
import edu.hawaii.its.api.exception.UhMemberNotFoundException;
import edu.hawaii.its.api.groupings.MembershipResults;
import edu.hawaii.its.api.groupings.ManageSubjectResults;
import edu.hawaii.its.api.groupings.MembershipResults;
import edu.hawaii.its.api.type.GroupType;
import edu.hawaii.its.api.type.ManageSubjectResult;
import edu.hawaii.its.api.type.MembershipResult;
Expand Down Expand Up @@ -76,23 +76,34 @@ public MembershipResults membershipResults(String currentUser, String uid) {
// The disjoint of basis plus include and exclude: (Basis + Include) - Exclude
List<String> groupingMembershipPaths = disjoint(parentGroupingPaths(basisIncludeExcludePaths),
parentGroupingPaths(excludePaths));
// A list of all group paths, in which the uhIdentifier is listed (including curated groupings), so we can find the intersection with curated groupings
List<String> trioAndCuratedGroupingsPaths = groupingsService.allGroupPaths(uid);
// The list of all curated groupings
List<String> curatedGroupingsPaths = groupingsService.curatedGroupings();
// Intersect the two lists so groupAndCuratedGroupingsPaths is all curated paths the uhIdentifier is listed
curatedGroupingsPaths.retainAll(trioAndCuratedGroupingsPaths);
// Send all the grouping Membership paths to grouper to obtain grouping descriptions.
List<Group> membershipGroupings = groupPathService.getValidGroupings(groupingMembershipPaths);
// Get a list of groupings paths of all basis and include groups that have the opt-out attribute.
List<String> optOutList = groupingsService.optOutEnabledGroupingPaths(parentGroupingPaths(basisAndInclude));

List<MembershipResult> memberships = createMemberships(membershipGroupings, optOutList);
List<MembershipResult> memberships =
createMemberships(membershipGroupings, optOutList, curatedGroupingsPaths);
return new MembershipResults(memberships);
}

private List<MembershipResult> createMemberships(List<Group> membershipGroupings, List<String> optOutList) {
private List<MembershipResult> createMemberships(List<Group> membershipGroupings, List<String> optOutList,
List<String> curatedGroupingsPaths) {
List<MembershipResult> memberships = new ArrayList<>();
for (Group grouping : membershipGroupings) {
MembershipResult membershipResult = new MembershipResult();
membershipResult.setDescription(grouping.getDescription());
membershipResult.setPath(grouping.getGroupPath());
membershipResult.setName(nameGroupingPath(grouping.getGroupPath()));
membershipResult.setOptOutEnabled(optOutList.contains(grouping.getGroupPath()));
MembershipResult membershipResult =
new MembershipResult(grouping.getGroupPath(), nameGroupingPath(grouping.getGroupPath()),
grouping.getDescription());
membershipResult.setOptOutEnabled(optOutList.contains(membershipResult.getPath()));
memberships.add(membershipResult);
}
for (String grouping : curatedGroupingsPaths) {
MembershipResult membershipResult = new MembershipResult(grouping, grouping, "");
memberships.add(membershipResult);
}
return memberships;
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/edu/hawaii/its/api/type/MembershipResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ public class MembershipResult {
private String description;
private boolean isOptOutEnabled = false;

public MembershipResult() {
path = null;
name = null;
description = null;
}

public MembershipResult(String groupingPath, String groupingName, String groupingDescription) {
path = groupingPath;
name = groupingName;
description = groupingDescription;
}

public String getPath() {
return path;
}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ groupings.api.destinations=${groupings.api.uhgrouping}:destinations
groupings.api.listserv=${groupings.api.destinations}:listserv
groupings.api.releasedgrouping=${groupings.api.destinations}:uhReleasedGrouping
groupings.api.trio=${groupings.api.uhgrouping}:is-trio
groupings.api.curated=${groupings.api.uhgrouping}:curated
groupings.api.opt_in=${groupings.api.uhgrouping}:anyone-can:opt-in
groupings.api.opt_out=${groupings.api.uhgrouping}:anyone-can:opt-out
groupings.api.basis=:basis
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ public void groupingPaths() {
assertFalse(containsDuplicates(result));
}

@Test
public void curatedGroupings() {
List<String> result = groupingsService.curatedGroupings();
assertNotNull(result);
assertFalse(result.isEmpty());
assertFalse(containsDuplicates(result));
}

@Test
public void optOutEnabledGroupingPaths() {
List<String> result = groupingsService.optOutEnabledGroupingPaths();
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/edu/hawaii/its/api/type/MembershipResultTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,30 @@

public class MembershipResultTest {
private MembershipResult membershipResultEmptyOnConstruction;
private MembershipResult membershipResultHydratedOnConstruction;

@BeforeEach
public void setUp() {
membershipResultEmptyOnConstruction = new MembershipResult();
membershipResultHydratedOnConstruction = new MembershipResult("path", "name", "description");
}

@Test
public void construction() {
assertNotNull(membershipResultEmptyOnConstruction);
assertNull(membershipResultEmptyOnConstruction.getName());
assertNull(membershipResultEmptyOnConstruction.getPath());
assertNull(membershipResultEmptyOnConstruction.getDescription());
assertNotNull(membershipResultHydratedOnConstruction);
String name = "name";
String path = "path";
String description = "description";
assertNotNull(membershipResultHydratedOnConstruction.getName());
assertEquals(name, membershipResultHydratedOnConstruction.getName());
assertNotNull(membershipResultHydratedOnConstruction.getPath());
assertEquals(path, membershipResultHydratedOnConstruction.getPath());
assertNotNull(membershipResultHydratedOnConstruction.getDescription());
assertEquals(description, membershipResultHydratedOnConstruction.getDescription());
}

@Test
Expand Down

0 comments on commit db9dd19

Please sign in to comment.