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

lahirujayathilake pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git

commit 1ce60a6253681da0625735d760444941bb44755f
Author: ganning127 <[email protected]>
AuthorDate: Mon Mar 31 00:16:08 2025 -0400

    Pull multiple resources
---
 .../service/controller/ProjectController.java      | 31 ++++++++++++++++++++
 .../research/service/handlers/ProjectHandler.java  | 34 +++++++++++++++-------
 .../service/model/repo/ResourceRepository.java     |  9 ++++++
 3 files changed, 64 insertions(+), 10 deletions(-)

diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
index 534480055b..884d92af0e 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
@@ -23,6 +23,7 @@ import 
org.apache.airavata.research.service.enums.ResourceTypeEnum;
 import org.apache.airavata.research.service.model.entity.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -34,6 +35,10 @@ import 
org.apache.airavata.research.service.handlers.ProjectHandler;
 
 import org.springframework.http.ResponseEntity;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 @RestController
 @RequestMapping("/api/v1/rf/project-management")
 @Tag(name = "Project", description = "The Project API")
@@ -77,4 +82,30 @@ public class ProjectController {
     public ResponseEntity<ResourceResponse> 
getResource(@PathVariable(value="id") String id) {
         return ResponseEntity.ok(projectHandler.getResourceById(id));
     }
+
+    @Operation(
+            summary = "Get all resources"
+    )
+    @GetMapping("/resources")
+    public ResponseEntity<Page<ResourceResponse>> getAllResources(
+            @RequestParam(value="pageNumber", defaultValue = "0") int 
pageNumber,
+            @RequestParam(value="pageSize", defaultValue = "10") int pageSize,
+            @RequestParam(value="type") ResourceTypeEnum[] types
+    ) {
+        List<Class<? extends Resource>> typeList = new ArrayList<>();
+        for (ResourceTypeEnum resourceType : types) {
+            if (resourceType == ResourceTypeEnum.REPOSITORY) {
+                typeList.add(RepositoryResource.class);
+            } else if (resourceType == ResourceTypeEnum.NOTEBOOK) {
+                typeList.add(NotebookResource.class);
+            } else if (resourceType == ResourceTypeEnum.MODEL) {
+                typeList.add(ModelResource.class);
+            } else if (resourceType == ResourceTypeEnum.DATASET) {
+                typeList.add(DatasetResource.class);
+            }
+        }
+        Page<ResourceResponse> response = 
projectHandler.getAllResources(pageNumber, pageSize, typeList);
+
+        return ResponseEntity.ok(response);
+    }
 }
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
index 8cccae6454..0574262173 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
@@ -28,8 +28,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
@@ -80,16 +84,7 @@ public class ProjectHandler {
         return response;
     }
 
-    public ResourceResponse getResourceById(String id)
-    {
-        // Your logic to fetch the resource by ID
-        Optional<Resource> opResource = resourceRepository.findById(id);
-
-        if (opResource.isEmpty()) {
-            throw new RuntimeException("Resource not found: " + id);
-        }
-
-        Resource resource = opResource.get();
+    public ResourceResponse resourceToResponse(Resource resource) {
         ResourceResponse response = new ResourceResponse();
         response.setResource(resource);
 
@@ -108,4 +103,23 @@ public class ProjectHandler {
         return response;
     }
 
+    public ResourceResponse getResourceById(String id)
+    {
+        // Your logic to fetch the resource by ID
+        Optional<Resource> opResource = resourceRepository.findById(id);
+
+        if (opResource.isEmpty()) {
+            throw new RuntimeException("Resource not found: " + id);
+        }
+
+        Resource resource = opResource.get();
+        return resourceToResponse(resource);
+    }
+
+    public Page<ResourceResponse> getAllResources(int pageNumber, int 
pageSize, List<Class<? extends Resource>> typeList) {
+        Pageable pageable = PageRequest.of(pageNumber, pageSize);
+        Page<Resource> resources = resourceRepository.findAllByTypes(typeList, 
pageable);
+        return resources.map(this::resourceToResponse);
+    }
+
 }
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/ResourceRepository.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/ResourceRepository.java
index 022035954f..94005a0c13 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/ResourceRepository.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/ResourceRepository.java
@@ -1,9 +1,18 @@
 package org.apache.airavata.research.service.model.repo;
 
 import org.apache.airavata.research.service.model.entity.Resource;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
+
 @Repository
 public interface ResourceRepository extends JpaRepository<Resource, String> {
+    @Query("SELECT r FROM #{#entityName} r WHERE TYPE(r) IN :types")
+    Page<Resource> findAllByTypes(@Param("types") List<Class<? extends 
Resource>> types, Pageable pageable);
 }

Reply via email to