public void changeUserMembershipType()

in custos-services/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/service/UserProfileService.java [1293:1385]


    public void changeUserMembershipType(GroupMembership request,
                                         StreamObserver<org.apache.custos.user.profile.service.Status> responseObserver) {
        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);
                responseObserver.onError(Status.NOT_FOUND.withDescription(msg).asRuntimeException());
                return;
            }

            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);
                responseObserver.onError(Status.ABORTED.withDescription(msg).asRuntimeException());
                return;
            }

            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);

                        }
                    }


                }

            }


            org.apache.custos.user.profile.service.Status status = org.apache.custos.user.profile.service.Status
                    .newBuilder()
                    .setStatus(true).build();
            responseObserver.onNext(status);
            responseObserver.onCompleted();


        } 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);
            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
        }
    }