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