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

yasithdev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/master by this push:
     new abb331a933 refactor: collapse duplicated method families in 
research-service (#640)
abb331a933 is described below

commit abb331a9335fa0a4c1abbe3a397638d73433c265
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Sun Jun 7 20:32:32 2026 -0400

    refactor: collapse duplicated method families in research-service (#640)
    
    ExperimentSummaryRepository.getAccessibleExperimentStatistics repeated six 
near-identical count-and-list-per-state blocks; they now drive a small table of 
(state list, count setter, list setter) records through one loop, with the 
'all' row carrying a null state list (via Arrays.asList) that the underlying 
query already treats as 'no filter'. ResearchHubService.stopSession and 
deleteSession, which differed only by a {remove:true} body, now delegate to a 
single deleteHubSession(sessionI [...]
---
 .../repository/ExperimentSummaryRepository.java    | 211 +++++++--------------
 .../research/service/ResearchHubService.java       |  35 ++--
 2 files changed, 79 insertions(+), 167 deletions(-)

diff --git 
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
 
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
index 528d4b7f31..5db59fa8cb 100644
--- 
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
+++ 
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
@@ -26,6 +26,8 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.IntConsumer;
 import java.util.stream.Collectors;
 import org.apache.airavata.db.AbstractRepository;
 import org.apache.airavata.db.DBConstants;
@@ -300,153 +302,68 @@ public class ExperimentSummaryRepository
                 }
             }
 
-            int allExperimentsCount = getExperimentStatisticsCountForState(
-                    null,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds);
-            List<ExperimentSummaryModel> allExperiments = 
getExperimentStatisticsForState(
-                    null,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds,
-                    limit,
-                    offset);
-            
experimentStatisticsBuilder.setAllExperimentCount(allExperimentsCount);
-            experimentStatisticsBuilder.addAllAllExperiments(allExperiments);
-
-            List<ExperimentState> createdStates =
-                    Arrays.asList(ExperimentState.EXPERIMENT_STATE_CREATED, 
ExperimentState.EXPERIMENT_STATE_VALIDATED);
-            int createdExperimentsCount = getExperimentStatisticsCountForState(
-                    createdStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds);
-            List<ExperimentSummaryModel> createdExperiments = 
getExperimentStatisticsForState(
-                    createdStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds,
-                    limit,
-                    offset);
-            
experimentStatisticsBuilder.setCreatedExperimentCount(createdExperimentsCount);
-            
experimentStatisticsBuilder.addAllCreatedExperiments(createdExperiments);
-
-            List<ExperimentState> runningStates = Arrays.asList(
-                    ExperimentState.EXPERIMENT_STATE_EXECUTING,
-                    ExperimentState.EXPERIMENT_STATE_SCHEDULED,
-                    ExperimentState.EXPERIMENT_STATE_LAUNCHED);
-            int runningExperimentsCount = getExperimentStatisticsCountForState(
-                    runningStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds);
-            List<ExperimentSummaryModel> runningExperiments = 
getExperimentStatisticsForState(
-                    runningStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds,
-                    limit,
-                    offset);
-            
experimentStatisticsBuilder.setRunningExperimentCount(runningExperimentsCount);
-            
experimentStatisticsBuilder.addAllRunningExperiments(runningExperiments);
-
-            List<ExperimentState> completedStates = 
Arrays.asList(ExperimentState.EXPERIMENT_STATE_COMPLETED);
-            int completedExperimentsCount = 
getExperimentStatisticsCountForState(
-                    completedStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds);
-            List<ExperimentSummaryModel> completedExperiments = 
getExperimentStatisticsForState(
-                    completedStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds,
-                    limit,
-                    offset);
-            
experimentStatisticsBuilder.setCompletedExperimentCount(completedExperimentsCount);
-            
experimentStatisticsBuilder.addAllCompletedExperiments(completedExperiments);
-
-            List<ExperimentState> failedStates = 
Arrays.asList(ExperimentState.EXPERIMENT_STATE_FAILED);
-            int failedExperimentsCount = getExperimentStatisticsCountForState(
-                    failedStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds);
-            List<ExperimentSummaryModel> failedExperiments = 
getExperimentStatisticsForState(
-                    failedStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds,
-                    limit,
-                    offset);
-            
experimentStatisticsBuilder.setFailedExperimentCount(failedExperimentsCount);
-            
experimentStatisticsBuilder.addAllFailedExperiments(failedExperiments);
-
-            List<ExperimentState> cancelledStates = Arrays.asList(
-                    ExperimentState.EXPERIMENT_STATE_CANCELED, 
ExperimentState.EXPERIMENT_STATE_CANCELING);
-            int cancelledExperimentsCount = 
getExperimentStatisticsCountForState(
-                    cancelledStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds);
-            List<ExperimentSummaryModel> cancelledExperiments = 
getExperimentStatisticsForState(
-                    cancelledStates,
-                    gatewayId,
-                    fromDate,
-                    toDate,
-                    userName,
-                    applicationName,
-                    resourceHostName,
-                    accessibleExperimentIds,
-                    limit,
-                    offset);
-            
experimentStatisticsBuilder.setCancelledExperimentCount(cancelledExperimentsCount);
-            
experimentStatisticsBuilder.addAllCancelledExperiments(cancelledExperiments);
+            record StatGroup(
+                    List<ExperimentState> states,
+                    IntConsumer countSetter,
+                    Consumer<List<ExperimentSummaryModel>> listSetter) {}
+
+            List<StatGroup> statGroups = Arrays.asList(
+                    new StatGroup(
+                            null,
+                            experimentStatisticsBuilder::setAllExperimentCount,
+                            experimentStatisticsBuilder::addAllAllExperiments),
+                    new StatGroup(
+                            Arrays.asList(
+                                    ExperimentState.EXPERIMENT_STATE_CREATED,
+                                    
ExperimentState.EXPERIMENT_STATE_VALIDATED),
+                            
experimentStatisticsBuilder::setCreatedExperimentCount,
+                            
experimentStatisticsBuilder::addAllCreatedExperiments),
+                    new StatGroup(
+                            Arrays.asList(
+                                    ExperimentState.EXPERIMENT_STATE_EXECUTING,
+                                    ExperimentState.EXPERIMENT_STATE_SCHEDULED,
+                                    ExperimentState.EXPERIMENT_STATE_LAUNCHED),
+                            
experimentStatisticsBuilder::setRunningExperimentCount,
+                            
experimentStatisticsBuilder::addAllRunningExperiments),
+                    new StatGroup(
+                            
Arrays.asList(ExperimentState.EXPERIMENT_STATE_COMPLETED),
+                            
experimentStatisticsBuilder::setCompletedExperimentCount,
+                            
experimentStatisticsBuilder::addAllCompletedExperiments),
+                    new StatGroup(
+                            
Arrays.asList(ExperimentState.EXPERIMENT_STATE_FAILED),
+                            
experimentStatisticsBuilder::setFailedExperimentCount,
+                            
experimentStatisticsBuilder::addAllFailedExperiments),
+                    new StatGroup(
+                            Arrays.asList(
+                                    ExperimentState.EXPERIMENT_STATE_CANCELED,
+                                    
ExperimentState.EXPERIMENT_STATE_CANCELING),
+                            
experimentStatisticsBuilder::setCancelledExperimentCount,
+                            
experimentStatisticsBuilder::addAllCancelledExperiments));
+
+            for (StatGroup group : statGroups) {
+                int count = getExperimentStatisticsCountForState(
+                        group.states(),
+                        gatewayId,
+                        fromDate,
+                        toDate,
+                        userName,
+                        applicationName,
+                        resourceHostName,
+                        accessibleExperimentIds);
+                List<ExperimentSummaryModel> experiments = 
getExperimentStatisticsForState(
+                        group.states(),
+                        gatewayId,
+                        fromDate,
+                        toDate,
+                        userName,
+                        applicationName,
+                        resourceHostName,
+                        accessibleExperimentIds,
+                        limit,
+                        offset);
+                group.countSetter().accept(count);
+                group.listSetter().accept(experiments);
+            }
 
             return experimentStatisticsBuilder.build();
         } catch (RegistryException e) {
diff --git 
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
 
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
index b444eee3a2..ef2adc905e 100644
--- 
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
+++ 
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
@@ -54,6 +54,7 @@ public class ResearchHubService {
     private final SessionService sessionService;
     private final ResearchProjectRepository projectRepository;
     private final ResearchProperties researchProperties;
+    private final RestTemplate restTemplate = new RestTemplate();
 
     public ResearchHubService(
             ResearchProjectService researchProjectService,
@@ -67,36 +68,30 @@ public class ResearchHubService {
     }
 
     public boolean stopSession(String sessionId) {
-        String userId = UserContext.userId();
-        String url = String.format(SERVERS_API_URL, 
researchProperties.getHubUrl(), userId, sessionId);
-
-        HttpHeaders headers = new HttpHeaders();
-        headers.set("Authorization", "token " + 
researchProperties.getAdminApiKey());
-        HttpEntity<Void> request = new HttpEntity<>(headers);
-
-        ResponseEntity<Void> response = new RestTemplate().exchange(url, 
HttpMethod.DELETE, request, Void.class);
-
-        if (response.getStatusCode().is2xxSuccessful()) {
-            LOGGER.info("Successfully stopped/deleted RHub session {} for user 
{}", sessionId, userId);
-            return true;
-        } else {
-            throw new RuntimeException("Failed to delete RHub session " + 
sessionId + " for user " + userId);
-        }
+        return deleteHubSession(sessionId, false);
     }
 
     public boolean deleteSession(String sessionId) {
+        return deleteHubSession(sessionId, true);
+    }
+
+    private boolean deleteHubSession(String sessionId, boolean remove) {
         String userId = UserContext.userId();
         String url = String.format(SERVERS_API_URL, 
researchProperties.getHubUrl(), userId, sessionId);
 
         HttpHeaders headers = new HttpHeaders();
         headers.set("Authorization", "token " + 
researchProperties.getAdminApiKey());
 
-        Map<String, Object> body = new HashMap<>();
-        body.put("remove", true);
-
-        HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, 
headers);
+        HttpEntity<?> request;
+        if (remove) {
+            Map<String, Object> body = new HashMap<>();
+            body.put("remove", true);
+            request = new HttpEntity<>(body, headers);
+        } else {
+            request = new HttpEntity<>(headers);
+        }
 
-        ResponseEntity<Void> response = new RestTemplate().exchange(url, 
HttpMethod.DELETE, request, Void.class);
+        ResponseEntity<Void> response = restTemplate.exchange(url, 
HttpMethod.DELETE, request, Void.class);
 
         if (response.getStatusCode().is2xxSuccessful()) {
             LOGGER.info("Successfully stopped/deleted RHub session {} for user 
{}", sessionId, userId);

Reply via email to