You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ya...@apache.org on 2026/03/26 18:13:36 UTC
(airavata) 20/38: feat: add UserResourceProfileService
This is an automated email from the ASF dual-hosted git repository.
yasith pushed a commit to branch feat/airavata-service-layer
in repository https://gitbox.apache.org/repos/asf/airavata.git
commit 0098fbdd280020a444961a489f3b9cacfc2d8749
Author: yasithdev <ya...@icloud.com>
AuthorDate: Thu Mar 26 10:57:49 2026 -0500
feat: add UserResourceProfileService
Extracts all user resource profile operations (CRUD, compute/storage
preferences, queue statuses) from AiravataServerHandler into
UserResourceProfileService. Rewires handler methods to ThriftAdapter
one-liners.
---
.../UserResourceProfileService.java | 186 +++++++++++++++++++++
.../UserResourceProfileServiceTest.java | 139 +++++++++++++++
2 files changed, 325 insertions(+)
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/resourceprofile/UserResourceProfileService.java b/airavata-api/src/main/java/org/apache/airavata/service/resourceprofile/UserResourceProfileService.java
new file mode 100644
index 0000000000..ac13808cdf
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/service/resourceprofile/UserResourceProfileService.java
@@ -0,0 +1,186 @@
+package org.apache.airavata.service.resourceprofile;
+
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference;
+import org.apache.airavata.model.status.QueueStatusModel;
+import org.apache.airavata.registry.api.service.handler.RegistryServerHandler;
+import org.apache.airavata.service.context.RequestContext;
+import org.apache.airavata.service.exception.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class UserResourceProfileService {
+
+ private static final Logger logger = LoggerFactory.getLogger(UserResourceProfileService.class);
+
+ private final RegistryServerHandler registryHandler;
+
+ public UserResourceProfileService(RegistryServerHandler registryHandler) {
+ this.registryHandler = registryHandler;
+ }
+
+ public String registerUserResourceProfile(RequestContext ctx, UserResourceProfile userResourceProfile)
+ throws ServiceException {
+ try {
+ return registryHandler.registerUserResourceProfile(userResourceProfile);
+ } catch (Exception e) {
+ throw new ServiceException("Error while registering user resource profile: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean isUserResourceProfileExists(RequestContext ctx, String userId, String gatewayId)
+ throws ServiceException {
+ try {
+ return registryHandler.isUserResourceProfileExists(userId, gatewayId);
+ } catch (Exception e) {
+ throw new ServiceException(
+ "Error while checking existence of user resource profile: " + e.getMessage(), e);
+ }
+ }
+
+ public UserResourceProfile getUserResourceProfile(RequestContext ctx, String userId, String gatewayId)
+ throws ServiceException {
+ try {
+ return registryHandler.getUserResourceProfile(userId, gatewayId);
+ } catch (Exception e) {
+ throw new ServiceException("Error while retrieving user resource profile: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean updateUserResourceProfile(RequestContext ctx, String userId, String gatewayId,
+ UserResourceProfile userResourceProfile) throws ServiceException {
+ try {
+ return registryHandler.updateUserResourceProfile(userId, gatewayId, userResourceProfile);
+ } catch (Exception e) {
+ throw new ServiceException("Error while updating user resource profile: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean deleteUserResourceProfile(RequestContext ctx, String userId, String gatewayId)
+ throws ServiceException {
+ try {
+ return registryHandler.deleteUserResourceProfile(userId, gatewayId);
+ } catch (Exception e) {
+ throw new ServiceException("Error while deleting user resource profile: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean addUserComputeResourcePreference(RequestContext ctx, String userId, String gatewayId,
+ String userComputeResourceId, UserComputeResourcePreference userComputeResourcePreference)
+ throws ServiceException {
+ try {
+ return registryHandler.addUserComputeResourcePreference(
+ userId, gatewayId, userComputeResourceId, userComputeResourcePreference);
+ } catch (Exception e) {
+ throw new ServiceException(
+ "Error while adding user compute resource preference: " + e.getMessage(), e);
+ }
+ }
+
+ public UserComputeResourcePreference getUserComputeResourcePreference(RequestContext ctx, String userId,
+ String gatewayId, String userComputeResourceId) throws ServiceException {
+ try {
+ return registryHandler.getUserComputeResourcePreference(userId, gatewayId, userComputeResourceId);
+ } catch (Exception e) {
+ throw new ServiceException(
+ "Error while reading user compute resource preference: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean updateUserComputeResourcePreference(RequestContext ctx, String userId, String gatewayId,
+ String userComputeResourceId, UserComputeResourcePreference userComputeResourcePreference)
+ throws ServiceException {
+ try {
+ return registryHandler.updateUserComputeResourcePreference(
+ userId, gatewayId, userComputeResourceId, userComputeResourcePreference);
+ } catch (Exception e) {
+ throw new ServiceException(
+ "Error while updating user compute resource preference: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean deleteUserComputeResourcePreference(RequestContext ctx, String userId, String gatewayId,
+ String userComputeResourceId) throws ServiceException {
+ try {
+ return registryHandler.deleteUserComputeResourcePreference(userId, gatewayId, userComputeResourceId);
+ } catch (Exception e) {
+ throw new ServiceException(
+ "Error while deleting user compute resource preference: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean addUserStoragePreference(RequestContext ctx, String userId, String gatewayId,
+ String userStorageResourceId, UserStoragePreference storagePreference) throws ServiceException {
+ try {
+ return registryHandler.addUserStoragePreference(
+ userId, gatewayId, userStorageResourceId, storagePreference);
+ } catch (Exception e) {
+ throw new ServiceException("Error while adding user storage preference: " + e.getMessage(), e);
+ }
+ }
+
+ public UserStoragePreference getUserStoragePreference(RequestContext ctx, String userId, String gatewayId,
+ String userStorageId) throws ServiceException {
+ try {
+ return registryHandler.getUserStoragePreference(userId, gatewayId, userStorageId);
+ } catch (Exception e) {
+ throw new ServiceException("Error while reading user storage preference: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean updateUserStoragePreference(RequestContext ctx, String userId, String gatewayId,
+ String userStorageId, UserStoragePreference storagePreference) throws ServiceException {
+ try {
+ return registryHandler.updateUserStoragePreference(userId, gatewayId, userStorageId, storagePreference);
+ } catch (Exception e) {
+ throw new ServiceException("Error while updating user storage preference: " + e.getMessage(), e);
+ }
+ }
+
+ public boolean deleteUserStoragePreference(RequestContext ctx, String userId, String gatewayId,
+ String userStorageId) throws ServiceException {
+ try {
+ return registryHandler.deleteUserStoragePreference(userId, gatewayId, userStorageId);
+ } catch (Exception e) {
+ throw new ServiceException("Error while deleting user storage preference: " + e.getMessage(), e);
+ }
+ }
+
+ public List<UserComputeResourcePreference> getAllUserComputeResourcePreferences(RequestContext ctx,
+ String userId, String gatewayId) throws ServiceException {
+ try {
+ return registryHandler.getAllUserComputeResourcePreferences(userId, gatewayId);
+ } catch (Exception e) {
+ throw new ServiceException(
+ "Error while reading user compute resource preferences: " + e.getMessage(), e);
+ }
+ }
+
+ public List<UserStoragePreference> getAllUserStoragePreferences(RequestContext ctx, String userId,
+ String gatewayId) throws ServiceException {
+ try {
+ return registryHandler.getAllUserStoragePreferences(userId, gatewayId);
+ } catch (Exception e) {
+ throw new ServiceException("Error while reading user storage preferences: " + e.getMessage(), e);
+ }
+ }
+
+ public List<UserResourceProfile> getAllUserResourceProfiles(RequestContext ctx) throws ServiceException {
+ try {
+ return registryHandler.getAllUserResourceProfiles();
+ } catch (Exception e) {
+ throw new ServiceException("Error while retrieving all user resource profiles: " + e.getMessage(), e);
+ }
+ }
+
+ public List<QueueStatusModel> getLatestQueueStatuses(RequestContext ctx) throws ServiceException {
+ try {
+ return registryHandler.getLatestQueueStatuses();
+ } catch (Exception e) {
+ throw new ServiceException("Error while retrieving queue statuses: " + e.getMessage(), e);
+ }
+ }
+}
diff --git a/airavata-api/src/test/java/org/apache/airavata/service/resourceprofile/UserResourceProfileServiceTest.java b/airavata-api/src/test/java/org/apache/airavata/service/resourceprofile/UserResourceProfileServiceTest.java
new file mode 100644
index 0000000000..333ebe3269
--- /dev/null
+++ b/airavata-api/src/test/java/org/apache/airavata/service/resourceprofile/UserResourceProfileServiceTest.java
@@ -0,0 +1,139 @@
+package org.apache.airavata.service.resourceprofile;
+
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference;
+import org.apache.airavata.model.status.QueueStatusModel;
+import org.apache.airavata.registry.api.service.handler.RegistryServerHandler;
+import org.apache.airavata.service.context.RequestContext;
+import org.apache.airavata.service.exception.ServiceException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class)
+class UserResourceProfileServiceTest {
+
+ @Mock RegistryServerHandler registryHandler;
+
+ UserResourceProfileService service;
+ RequestContext ctx;
+
+ @BeforeEach
+ void setUp() {
+ service = new UserResourceProfileService(registryHandler);
+ ctx = new RequestContext("testUser", "testGateway", "token123",
+ Map.of("userName", "testUser", "gatewayId", "testGateway"));
+ }
+
+ @Test
+ void registerUserResourceProfile_returnsId() throws Exception {
+ UserResourceProfile profile = new UserResourceProfile();
+ profile.setUserId("testUser");
+ profile.setGatewayID("testGateway");
+ when(registryHandler.registerUserResourceProfile(profile)).thenReturn("testUser");
+
+ String result = service.registerUserResourceProfile(ctx, profile);
+
+ assertEquals("testUser", result);
+ }
+
+ @Test
+ void isUserResourceProfileExists_delegatesToRegistry() throws Exception {
+ when(registryHandler.isUserResourceProfileExists("testUser", "testGateway")).thenReturn(true);
+
+ boolean result = service.isUserResourceProfileExists(ctx, "testUser", "testGateway");
+
+ assertTrue(result);
+ }
+
+ @Test
+ void getUserResourceProfile_delegatesToRegistry() throws Exception {
+ UserResourceProfile profile = new UserResourceProfile();
+ profile.setUserId("testUser");
+ when(registryHandler.getUserResourceProfile("testUser", "testGateway")).thenReturn(profile);
+
+ UserResourceProfile result = service.getUserResourceProfile(ctx, "testUser", "testGateway");
+
+ assertNotNull(result);
+ assertEquals("testUser", result.getUserId());
+ }
+
+ @Test
+ void deleteUserResourceProfile_delegatesToRegistry() throws Exception {
+ when(registryHandler.deleteUserResourceProfile("testUser", "testGateway")).thenReturn(true);
+
+ boolean result = service.deleteUserResourceProfile(ctx, "testUser", "testGateway");
+
+ assertTrue(result);
+ }
+
+ @Test
+ void addUserComputeResourcePreference_delegatesToRegistry() throws Exception {
+ UserComputeResourcePreference pref = new UserComputeResourcePreference();
+ when(registryHandler.addUserComputeResourcePreference(
+ "testUser", "testGateway", "compute-1", pref)).thenReturn(true);
+
+ boolean result = service.addUserComputeResourcePreference(ctx, "testUser", "testGateway", "compute-1", pref);
+
+ assertTrue(result);
+ }
+
+ @Test
+ void getAllUserComputeResourcePreferences_delegatesToRegistry() throws Exception {
+ List<UserComputeResourcePreference> prefs = List.of(new UserComputeResourcePreference());
+ when(registryHandler.getAllUserComputeResourcePreferences("testUser", "testGateway")).thenReturn(prefs);
+
+ List<UserComputeResourcePreference> result =
+ service.getAllUserComputeResourcePreferences(ctx, "testUser", "testGateway");
+
+ assertEquals(1, result.size());
+ }
+
+ @Test
+ void getAllUserResourceProfiles_delegatesToRegistry() throws Exception {
+ List<UserResourceProfile> profiles = List.of(new UserResourceProfile());
+ when(registryHandler.getAllUserResourceProfiles()).thenReturn(profiles);
+
+ List<UserResourceProfile> result = service.getAllUserResourceProfiles(ctx);
+
+ assertEquals(1, result.size());
+ }
+
+ @Test
+ void getLatestQueueStatuses_delegatesToRegistry() throws Exception {
+ List<QueueStatusModel> statuses = List.of(new QueueStatusModel());
+ when(registryHandler.getLatestQueueStatuses()).thenReturn(statuses);
+
+ List<QueueStatusModel> result = service.getLatestQueueStatuses(ctx);
+
+ assertEquals(1, result.size());
+ }
+
+ @Test
+ void addUserStoragePreference_delegatesToRegistry() throws Exception {
+ UserStoragePreference pref = new UserStoragePreference();
+ when(registryHandler.addUserStoragePreference("testUser", "testGateway", "storage-1", pref)).thenReturn(true);
+
+ boolean result = service.addUserStoragePreference(ctx, "testUser", "testGateway", "storage-1", pref);
+
+ assertTrue(result);
+ }
+
+ @Test
+ void registryException_wrappedAsServiceException() throws Exception {
+ when(registryHandler.getUserResourceProfile("bad-user", "testGateway"))
+ .thenThrow(new RuntimeException("DB error"));
+
+ assertThrows(ServiceException.class, () ->
+ service.getUserResourceProfile(ctx, "bad-user", "testGateway"));
+ }
+}