in services/src/main/java/org/apache/custos/service/profile/UserProfileService.java [1134:1199]
public Status changeUserMembershipType(GroupMembership request) {
try {
LOGGER.debug("Request received to changeUserMembershipType in tenant" + request.getTenantId() + " with id " + request.getUsername() + " to " + request.getType());
long tenantId = request.getTenantId();
String username = request.getUsername();
String groupId = request.getGroupId();
String type = request.getType();
String userId = username + "@" + tenantId;
String effectiveGroupId = groupId + "@" + tenantId;
List<UserGroupMembership> userGroupMemberships = groupMembershipRepository.findAllByGroupIdAndUserProfileId(effectiveGroupId, userId);
if (userGroupMemberships == null || userGroupMemberships.isEmpty()) {
String msg = "group membership not found";
LOGGER.error(msg);
throw new EntityNotFoundException(msg);
}
List<UserGroupMembership> userMemberships = groupMembershipRepository
.findAllByGroupIdAndUserGroupMembershipTypeId(effectiveGroupId, DefaultGroupMembershipTypes.OWNER.name());
if (userMemberships != null && userMemberships.size() == 1 && userMemberships.get(0).getUserProfile().getUsername().equals(username)) {
String msg = "Default owner " + username + " cannot be changed for group " + groupId;
LOGGER.error(msg);
throw new IllegalArgumentException(msg);
}
UserGroupMembership groupMembership = userGroupMemberships.get(0);
UserGroupMembershipType groupMembershipType = groupMembership.getUserGroupMembershipType();
groupMembershipType.setId(type);
groupMembership.setUserGroupMembershipType(groupMembershipType);
groupMembershipRepository.save(groupMembership);
if (type.equals(DefaultGroupMembershipTypes.OWNER.name())) {
List<UserGroupMembership> memberships = groupMembershipRepository.findAllByGroupId(effectiveGroupId);
if (memberships != null && !memberships.isEmpty()) {
for (UserGroupMembership membership : memberships) {
if (membership.getUserGroupMembershipType().getId().equals(DefaultGroupMembershipTypes.OWNER.name())
&& !membership.getUserProfile().getUsername().equals(userId)) {
groupMembershipRepository.delete(membership);
UserGroupMembership userGroupMembership = new UserGroupMembership();
userGroupMembership.setGroup(membership.getGroup());
userGroupMembership.setUserProfile(membership.getUserProfile());
userGroupMembership.setTenantId(tenantId);
Optional<UserGroupMembershipType> membershipType = groupMembershipTypeRepository.findById(DefaultGroupMembershipTypes.MEMBER.name());
userGroupMembership.setUserGroupMembershipType(membershipType.get());
groupMembershipRepository.save(userGroupMembership);
}
}
}
}
return Status.newBuilder().setStatus(true).build();
} catch (Exception ex) {
String msg = "Error occurred while changing membership type in tenant" + request.getTenantId() + " with id " + request.getUsername() + " to " + request.getType();
LOGGER.error(msg);
throw new RuntimeException(msg);
}
}