This is an automated email from the ASF dual-hosted git repository.

yasith pushed a commit to branch feat/grpc-armeria-migration
in repository https://gitbox.apache.org/repos/asf/airavata.git

commit 53158f1a282ca43af1c87eeb238f6ae3c1176612
Author: yasithdev <[email protected]>
AuthorDate: Wed Apr 1 13:39:35 2026 -0400

    feat: wire GroupManager, IamAdmin, UserProfile gRPC services to business 
logic
---
 .../grpc/services/GroupManagerGrpcService.java     | 165 ++++++++++++++++++--
 .../server/grpc/services/IamAdminGrpcService.java  | 172 +++++++++++++++++++--
 .../grpc/services/UserProfileGrpcService.java      |  84 +++++++++-
 3 files changed, 383 insertions(+), 38 deletions(-)

diff --git 
a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java
 
b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java
index 4c94760b16..a63b155f94 100644
--- 
a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java
+++ 
b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java
@@ -20,77 +20,214 @@
 package org.apache.airavata.server.grpc.services;
 
 import com.google.protobuf.Empty;
-import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
+import java.util.List;
+import java.util.stream.Collectors;
 import org.apache.airavata.api.groupmanager.*;
+import org.apache.airavata.execution.service.RequestContext;
 import org.apache.airavata.model.group.proto.GroupModel;
+import org.apache.airavata.server.grpc.GrpcStatusMapper;
+import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
+import org.apache.airavata.sharing.model.GroupAdminEntity;
+import org.apache.airavata.sharing.model.UserGroupEntity;
 import org.springframework.stereotype.Component;
 
 @Component
 public class GroupManagerGrpcService extends 
GroupManagerServiceGrpc.GroupManagerServiceImplBase {
 
+    private final SharingRegistryServerHandler sharingHandler;
+
+    public GroupManagerGrpcService(SharingRegistryServerHandler 
sharingHandler) {
+        this.sharingHandler = sharingHandler;
+    }
+
     @Override
     public void createGroup(CreateGroupRequest request, 
StreamObserver<CreateGroupResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("createGroup not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            GroupModel group = request.getGroup();
+            UserGroupEntity entity = toEntity(group, ctx.getGatewayId());
+            String groupId = sharingHandler.createGroup(entity);
+            
observer.onNext(CreateGroupResponse.newBuilder().setGroupId(groupId).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void updateGroup(UpdateGroupRequest request, StreamObserver<Empty> 
observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("updateGroup not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            GroupModel group = request.getGroup();
+            UserGroupEntity entity = toEntity(group, ctx.getGatewayId());
+            sharingHandler.updateGroup(entity);
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void deleteGroup(DeleteGroupRequest request, StreamObserver<Empty> 
observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("deleteGroup not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            sharingHandler.deleteGroup(ctx.getGatewayId(), 
request.getGroupId());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getGroup(GetGroupRequest request, StreamObserver<GroupModel> 
observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("getGroup not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            UserGroupEntity entity = 
sharingHandler.getGroup(ctx.getGatewayId(), request.getGroupId());
+            observer.onNext(toGroupModel(entity));
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getGroups(GetGroupsRequest request, 
StreamObserver<GetGroupsResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("getGroups not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            List<UserGroupEntity> groups = 
sharingHandler.getGroups(ctx.getGatewayId(), 0, -1);
+            GetGroupsResponse.Builder builder = GetGroupsResponse.newBuilder();
+            groups.forEach(g -> builder.addGroups(toGroupModel(g)));
+            observer.onNext(builder.build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getAllGroupsUserBelongs(GetAllGroupsUserBelongsRequest 
request, StreamObserver<GetAllGroupsUserBelongsResponse> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("getAllGroupsUserBelongs 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            List<UserGroupEntity> groups = 
sharingHandler.getAllMemberGroupsForUser(ctx.getGatewayId(), 
request.getUserName());
+            GetAllGroupsUserBelongsResponse.Builder builder = 
GetAllGroupsUserBelongsResponse.newBuilder();
+            groups.forEach(g -> builder.addGroups(toGroupModel(g)));
+            observer.onNext(builder.build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void addUsersToGroup(AddUsersToGroupRequest request, 
StreamObserver<Empty> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("addUsersToGroup 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            sharingHandler.addUsersToGroup(ctx.getGatewayId(), 
request.getUserIdsList(), request.getGroupId());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void removeUsersFromGroup(RemoveUsersFromGroupRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("removeUsersFromGroup not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            sharingHandler.removeUsersFromGroup(ctx.getGatewayId(), 
request.getUserIdsList(), request.getGroupId());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void transferGroupOwnership(TransferGroupOwnershipRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("transferGroupOwnership 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            sharingHandler.transferGroupOwnership(ctx.getGatewayId(), 
request.getGroupId(), request.getNewOwnerId());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void addGroupAdmins(AddGroupAdminsRequest request, 
StreamObserver<Empty> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("addGroupAdmins 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            sharingHandler.addGroupAdmins(ctx.getGatewayId(), 
request.getGroupId(), request.getAdminIdsList());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void removeGroupAdmins(RemoveGroupAdminsRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("removeGroupAdmins not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            sharingHandler.removeGroupAdmins(ctx.getGatewayId(), 
request.getGroupId(), request.getAdminIdsList());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void hasAdminAccess(HasAdminAccessRequest request, 
StreamObserver<HasAdminAccessResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("hasAdminAccess 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            boolean result = sharingHandler.hasAdminAccess(ctx.getGatewayId(), 
request.getGroupId(), request.getAdminId());
+            
observer.onNext(HasAdminAccessResponse.newBuilder().setHasAccess(result).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void hasOwnerAccess(HasOwnerAccessRequest request, 
StreamObserver<HasOwnerAccessResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("hasOwnerAccess 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            boolean result = sharingHandler.hasOwnerAccess(ctx.getGatewayId(), 
request.getGroupId(), request.getOwnerId());
+            
observer.onNext(HasOwnerAccessResponse.newBuilder().setHasAccess(result).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
+    }
+
+    // --- Mapping helpers ---
+
+    private static UserGroupEntity toEntity(GroupModel model, String domainId) 
{
+        UserGroupEntity entity = new UserGroupEntity();
+        if (!model.getId().isEmpty()) entity.setGroupId(model.getId());
+        entity.setDomainId(domainId);
+        if (!model.getName().isEmpty()) entity.setName(model.getName());
+        if (!model.getDescription().isEmpty()) 
entity.setDescription(model.getDescription());
+        if (!model.getOwnerId().isEmpty()) 
entity.setOwnerId(model.getOwnerId());
+        return entity;
+    }
+
+    private static GroupModel toGroupModel(UserGroupEntity entity) {
+        GroupModel.Builder b = GroupModel.newBuilder();
+        if (entity.getGroupId() != null) b.setId(entity.getGroupId());
+        if (entity.getName() != null) b.setName(entity.getName());
+        if (entity.getOwnerId() != null) b.setOwnerId(entity.getOwnerId());
+        if (entity.getDescription() != null) 
b.setDescription(entity.getDescription());
+        if (entity.getGroupAdmins() != null) {
+            b.addAllAdmins(entity.getGroupAdmins().stream()
+                    .map(GroupAdminEntity::getAdminId)
+                    .collect(Collectors.toList()));
+        }
+        return b.build();
     }
 }
diff --git 
a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java
 
b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java
index 4ed6bb9b45..6188fb8a9b 100644
--- 
a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java
+++ 
b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java
@@ -20,88 +20,228 @@
 package org.apache.airavata.server.grpc.services;
 
 import com.google.protobuf.Empty;
-import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
+import java.util.List;
 import org.apache.airavata.api.iam.*;
+import org.apache.airavata.common.config.ServerSettings;
+import org.apache.airavata.execution.service.RequestContext;
+import org.apache.airavata.model.credential.store.proto.PasswordCredential;
 import org.apache.airavata.model.user.proto.UserProfile;
 import org.apache.airavata.model.workspace.proto.Gateway;
+import 
org.apache.airavata.security.profile.iam.admin.services.core.impl.TenantManagementKeycloakImpl;
+import 
org.apache.airavata.security.profile.iam.admin.services.core.interfaces.TenantManagementInterface;
+import org.apache.airavata.server.grpc.GrpcStatusMapper;
 import org.springframework.stereotype.Component;
 
 @Component
 public class IamAdminGrpcService extends 
IamAdminServiceGrpc.IamAdminServiceImplBase {
 
+    private final TenantManagementInterface tenantManager;
+
+    public IamAdminGrpcService() {
+        this.tenantManager = new TenantManagementKeycloakImpl();
+    }
+
     @Override
     public void setUpGateway(SetUpGatewayRequest request, 
StreamObserver<Gateway> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("setUpGateway 
not yet implemented").asRuntimeException());
+        try {
+            PasswordCredential adminCreds = getSuperAdminCredentials();
+            Gateway gateway = tenantManager.addTenant(adminCreds, 
request.getGateway());
+            tenantManager.createTenantAdminAccount(adminCreds, 
request.getGateway(), null);
+            gateway = tenantManager.configureClient(adminCreds, gateway);
+            observer.onNext(gateway);
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void isUsernameAvailable(IsUsernameAvailableRequest request, 
StreamObserver<IsUsernameAvailableResponse> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("isUsernameAvailable not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            boolean available = 
tenantManager.isUsernameAvailable(ctx.getAccessToken(), ctx.getGatewayId(), 
request.getUsername());
+            
observer.onNext(IsUsernameAvailableResponse.newBuilder().setAvailable(available).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void registerUser(RegisterUserRequest request, 
StreamObserver<Empty> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("registerUser 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            tenantManager.createUser(
+                    ctx.getAccessToken(), ctx.getGatewayId(),
+                    request.getUsername(), request.getEmailAddress(),
+                    request.getFirstName(), request.getLastName(),
+                    request.getNewPassword());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void enableUser(EnableUserRequest request, StreamObserver<Empty> 
observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("enableUser not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            tenantManager.enableUserAccount(ctx.getAccessToken(), 
ctx.getGatewayId(), request.getUsername());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void isUserEnabled(IsUserEnabledRequest request, 
StreamObserver<IsUserEnabledResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("isUserEnabled 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            boolean enabled = 
tenantManager.isUserAccountEnabled(ctx.getAccessToken(), ctx.getGatewayId(), 
request.getUsername());
+            
observer.onNext(IsUserEnabledResponse.newBuilder().setEnabled(enabled).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void isUserExist(IsUserExistRequest request, 
StreamObserver<IsUserExistResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("isUserExist not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            boolean exists = tenantManager.isUserExist(ctx.getAccessToken(), 
ctx.getGatewayId(), request.getUsername());
+            
observer.onNext(IsUserExistResponse.newBuilder().setExists(exists).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getUser(GetIamUserRequest request, StreamObserver<UserProfile> 
observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("getUser not yet 
implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            UserProfile user = tenantManager.getUser(ctx.getAccessToken(), 
ctx.getGatewayId(), request.getUsername());
+            observer.onNext(user);
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getUsers(GetIamUsersRequest request, 
StreamObserver<GetIamUsersResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("getUsers not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            List<UserProfile> users = tenantManager.getUsers(
+                    ctx.getAccessToken(), ctx.getGatewayId(),
+                    request.getOffset(), request.getLimit(), 
request.getSearch());
+            
observer.onNext(GetIamUsersResponse.newBuilder().addAllUsers(users).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void resetUserPassword(ResetUserPasswordRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("resetUserPassword not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            tenantManager.resetUserPassword(ctx.getAccessToken(), 
ctx.getGatewayId(), request.getUsername(), request.getNewPassword());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void findUsers(FindUsersRequest request, 
StreamObserver<FindUsersResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("findUsers not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            List<UserProfile> users = tenantManager.findUser(
+                    ctx.getAccessToken(), ctx.getGatewayId(),
+                    request.getEmail(), request.getUserId());
+            
observer.onNext(FindUsersResponse.newBuilder().addAllUsers(users).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void updateUserProfile(UpdateIamUserProfileRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("updateUserProfile not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            UserProfile userDetails = request.getUserDetails();
+            tenantManager.updateUserProfile(ctx.getAccessToken(), 
ctx.getGatewayId(), userDetails.getUserId(), userDetails);
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void deleteUser(DeleteUserRequest request, StreamObserver<Empty> 
observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("deleteUser not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            tenantManager.deleteUser(ctx.getAccessToken(), ctx.getGatewayId(), 
request.getUsername());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void addRoleToUser(AddRoleToUserRequest request, 
StreamObserver<Empty> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("addRoleToUser 
not yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            PasswordCredential adminCreds = getSuperAdminCredentials();
+            tenantManager.addRoleToUser(adminCreds, ctx.getGatewayId(), 
request.getUsername(), request.getRoleName());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void removeRoleFromUser(RemoveRoleFromUserRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("removeRoleFromUser not 
yet implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            PasswordCredential adminCreds = getSuperAdminCredentials();
+            tenantManager.removeRoleFromUser(adminCreds, ctx.getGatewayId(), 
request.getUsername(), request.getRoleName());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getUsersWithRole(GetUsersWithRoleRequest request, 
StreamObserver<GetUsersWithRoleResponse> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("getUsersWithRole not yet 
implemented").asRuntimeException());
+        try {
+            RequestContext ctx = GrpcRequestContext.current();
+            PasswordCredential adminCreds = getSuperAdminCredentials();
+            List<UserProfile> users = 
tenantManager.getUsersWithRole(adminCreds, ctx.getGatewayId(), 
request.getRoleName());
+            
observer.onNext(GetUsersWithRoleResponse.newBuilder().addAllUsers(users).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
+    }
+
+    // --- Helper ---
+
+    private static PasswordCredential getSuperAdminCredentials() throws 
Exception {
+        return PasswordCredential.newBuilder()
+                
.setLoginUserName(ServerSettings.getIamServerSuperAdminUsername())
+                .setPassword(ServerSettings.getIamServerSuperAdminPassword())
+                .build();
     }
 }
diff --git 
a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java
 
b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java
index f0c71230ff..c9ed6fe301 100644
--- 
a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java
+++ 
b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java
@@ -20,47 +20,115 @@
 package org.apache.airavata.server.grpc.services;
 
 import com.google.protobuf.Empty;
-import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
+import java.util.List;
 import org.apache.airavata.api.userprofile.*;
+import org.apache.airavata.execution.service.RequestContext;
 import org.apache.airavata.model.user.proto.UserProfile;
+import 
org.apache.airavata.security.profile.user.core.repositories.UserProfileRepository;
+import org.apache.airavata.server.grpc.GrpcStatusMapper;
 import org.springframework.stereotype.Component;
 
 @Component
 public class UserProfileGrpcService extends 
UserProfileServiceGrpc.UserProfileServiceImplBase {
 
+    private final UserProfileRepository userProfileRepository;
+
+    public UserProfileGrpcService() {
+        this.userProfileRepository = new UserProfileRepository();
+    }
+
     @Override
     public void addUserProfile(AddUserProfileRequest request, 
StreamObserver<AddUserProfileResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("addUserProfile 
not yet implemented").asRuntimeException());
+        try {
+            UserProfile created = 
userProfileRepository.createUserProfile(request.getUserProfile());
+            
observer.onNext(AddUserProfileResponse.newBuilder().setUserId(created.getUserId()).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void updateUserProfile(UpdateUserProfileRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("updateUserProfile not 
yet implemented").asRuntimeException());
+        try {
+            userProfileRepository.updateUserProfile(request.getUserProfile(), 
null);
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getUserProfileById(GetUserProfileByIdRequest request, 
StreamObserver<UserProfile> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("getUserProfileById not 
yet implemented").asRuntimeException());
+        try {
+            UserProfile profile = 
userProfileRepository.getUserProfileByIdAndGateWay(
+                    request.getUserId(), request.getGatewayId());
+            if (profile == null) {
+                observer.onError(io.grpc.Status.NOT_FOUND
+                        .withDescription("User profile not found for userId=" 
+ request.getUserId())
+                        .asRuntimeException());
+                return;
+            }
+            observer.onNext(profile);
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getUserProfileByName(GetUserProfileByNameRequest request, 
StreamObserver<UserProfile> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("getUserProfileByName not 
yet implemented").asRuntimeException());
+        try {
+            UserProfile profile = 
userProfileRepository.getUserProfileByIdAndGateWay(
+                    request.getUserName(), request.getGatewayId());
+            if (profile == null) {
+                observer.onError(io.grpc.Status.NOT_FOUND
+                        .withDescription("User profile not found for 
userName=" + request.getUserName())
+                        .asRuntimeException());
+                return;
+            }
+            observer.onNext(profile);
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void deleteUserProfile(DeleteUserProfileRequest request, 
StreamObserver<Empty> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("deleteUserProfile not 
yet implemented").asRuntimeException());
+        try {
+            userProfileRepository.delete(request.getUserId());
+            observer.onNext(Empty.getDefaultInstance());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void getAllUserProfilesInGateway(GetAllUserProfilesInGatewayRequest 
request, StreamObserver<GetAllUserProfilesInGatewayResponse> observer) {
-        
observer.onError(Status.UNIMPLEMENTED.withDescription("getAllUserProfilesInGateway
 not yet implemented").asRuntimeException());
+        try {
+            List<UserProfile> profiles = 
userProfileRepository.getAllUserProfilesInGateway(
+                    request.getGatewayId(), request.getOffset(), 
request.getLimit());
+            observer.onNext(GetAllUserProfilesInGatewayResponse.newBuilder()
+                    .addAllUserProfiles(profiles).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 
     @Override
     public void doesUserExist(DoesUserExistRequest request, 
StreamObserver<DoesUserExistResponse> observer) {
-        observer.onError(Status.UNIMPLEMENTED.withDescription("doesUserExist 
not yet implemented").asRuntimeException());
+        try {
+            UserProfile profile = 
userProfileRepository.getUserProfileByIdAndGateWay(
+                    request.getUserName(), request.getGatewayId());
+            
observer.onNext(DoesUserExistResponse.newBuilder().setExists(profile != 
null).build());
+            observer.onCompleted();
+        } catch (Exception e) {
+            observer.onError(GrpcStatusMapper.toStatusException(e));
+        }
     }
 }

Reply via email to