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

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

commit ea7567fb9432a2509f314ee9731dd4c83776dc08
Author: lahiruj <[email protected]>
AuthorDate: Mon Jun 23 15:21:04 2025 -0400

    refactor data models - split GroupComputeResourcePrefEntity into abstract 
base and Slurm subclass
---
 .../util/GroupComputeResourcePreferenceUtil.java   |  66 ++++----
 .../GroupComputeResourcePreferenceUtilTest.java    |   8 +-
 .../service/handlers/AgentManagementHandler.java   |  32 +++-
 .../airavata/helix/impl/task/TaskContext.java      |  45 +++++-
 .../init/06-cloud-execution-support-migration.sql  |  72 +++++++++
 .../orchestrator/core/utils/OrchestratorUtils.java |  84 +++++++----
 .../appcatalog/GroupComputeResourcePrefEntity.java | 167 ++++-----------------
 .../SlurmGroupComputeResourcePrefEntity.java       | 163 ++++++++++++++++++++
 .../appcatalog/GroupResourceProfileRepository.java | 102 +++++++------
 .../GroupResourceProfileRepositoryTest.java        | 150 +++++++++---------
 .../migrator/airavata/AiravataDataMigrator.java    |  97 +++++++-----
 .../group_resource_profile_model.thrift            |  33 ++--
 12 files changed, 648 insertions(+), 371 deletions(-)

diff --git 
a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtil.java
 
b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtil.java
index bd8fee179d..fc155eca53 100644
--- 
a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtil.java
+++ 
b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtil.java
@@ -1,41 +1,55 @@
 /**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.airavata.model.util;
 
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourceReservation;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.SlurmComputeResourcePreference;
 
 public class GroupComputeResourcePreferenceUtil {
 
     public static ComputeResourceReservation getActiveReservationForQueue(
             GroupComputeResourcePreference groupComputeResourcePreference, 
String queueName) {
 
-        long now = System.currentTimeMillis();
-        if (groupComputeResourcePreference.getReservationsSize() > 0) {
-            for (ComputeResourceReservation reservation : 
groupComputeResourcePreference.getReservations()) {
+        // Only SLURM has reservations
+        if (groupComputeResourcePreference.getResourceType() != 
ResourceType.SLURM) {
+            return null;
+        }
+
+        EnvironmentSpecificPreferences esp = 
groupComputeResourcePreference.getSpecificPreferences();
+        if (esp == null || !esp.isSetSlurm()) {
+            return null;
+        }
 
-                if (reservation.getQueueNames().contains(queueName)
-                        && now > reservation.getStartTime()
-                        && now < reservation.getEndTime()) {
-                    return reservation;
-                }
+        SlurmComputeResourcePreference slurm = esp.getSlurm();
+        if (!slurm.isSetReservations() || slurm.getReservationsSize() == 0) {
+            return null;
+        }
+
+        long now = System.currentTimeMillis();
+        for (ComputeResourceReservation reservation : slurm.getReservations()) 
{
+            if (reservation.getQueueNames().contains(queueName)
+                    && now > reservation.getStartTime()
+                    && now < reservation.getEndTime()) {
+                return reservation;
             }
         }
         return null;
diff --git 
a/airavata-api/airavata-model-utils/src/test/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtilTest.java
 
b/airavata-api/airavata-model-utils/src/test/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtilTest.java
index e0a8546293..13b85b3fcc 100644
--- 
a/airavata-api/airavata-model-utils/src/test/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtilTest.java
+++ 
b/airavata-api/airavata-model-utils/src/test/java/org/apache/airavata/model/util/GroupComputeResourcePreferenceUtilTest.java
@@ -42,7 +42,7 @@ public class GroupComputeResourcePreferenceUtilTest {
                 Arrays.asList("cpu", "gpu"),
                 System.currentTimeMillis() - 10000,
                 System.currentTimeMillis() + 10000);
-        pref.addToReservations(res1);
+//        pref.addToReservations(res1); FIXME
 
         final ComputeResourceReservation result =
                 
GroupComputeResourcePreferenceUtil.getActiveReservationForQueue(pref, "cpu");
@@ -71,7 +71,7 @@ public class GroupComputeResourcePreferenceUtilTest {
                 Arrays.asList("cpu", "gpu"),
                 System.currentTimeMillis() - 20000,
                 System.currentTimeMillis() - 10000);
-        pref.addToReservations(res1);
+//        pref.addToReservations(res1); FIXME
 
         final ComputeResourceReservation result =
                 
GroupComputeResourcePreferenceUtil.getActiveReservationForQueue(pref, "cpu");
@@ -89,7 +89,7 @@ public class GroupComputeResourcePreferenceUtilTest {
                 Arrays.asList("cpu", "gpu"),
                 System.currentTimeMillis() - 10000,
                 System.currentTimeMillis() + 10000);
-        pref.addToReservations(res1);
+//        pref.addToReservations(res1); FIXME
 
         final ComputeResourceReservation result =
                 
GroupComputeResourcePreferenceUtil.getActiveReservationForQueue(pref, 
"thirdqueue");
@@ -131,7 +131,7 @@ public class GroupComputeResourcePreferenceUtilTest {
         final List<ComputeResourceReservation> reservations = 
Arrays.asList(res1, res2, res3, res4);
 
         Collections.shuffle(reservations);
-        pref.setReservations(reservations);
+//        pref.setReservations(reservations); FIXME
 
         final ComputeResourceReservation result =
                 
GroupComputeResourcePreferenceUtil.getActiveReservationForQueue(pref, "cpu");
diff --git 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
index eb75ad5f69..bd51c7fb2c 100644
--- 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
+++ 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
@@ -30,8 +30,11 @@ import 
org.apache.airavata.agent.connection.service.models.AgentLaunchResponse;
 import 
org.apache.airavata.agent.connection.service.models.AgentTerminateResponse;
 import org.apache.airavata.agent.connection.service.services.AiravataService;
 import org.apache.airavata.api.Airavata;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile;
+import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.SlurmComputeResourcePreference;
 import org.apache.airavata.model.application.io.InputDataObjectType;
 import org.apache.airavata.model.experiment.ExperimentModel;
 import org.apache.airavata.model.experiment.ExperimentStatistics;
@@ -232,9 +235,9 @@ public class AgentManagementHandler {
         
computationalResourceSchedulingModel.setWallTimeLimit(req.getWallTime());
         
computationalResourceSchedulingModel.setTotalPhysicalMemory(req.getMemory());
         
computationalResourceSchedulingModel.setResourceHostId(groupCompResourcePref.getComputeResourceId());
-        
computationalResourceSchedulingModel.setOverrideScratchLocation(groupCompResourcePref.getScratchLocation());
-        
computationalResourceSchedulingModel.setOverrideAllocationProjectNumber(
-                groupCompResourcePref.getAllocationProjectNumber());
+        // TODO - Support for both HPC & Cloud services --> Need to change the 
ComputationalResourceSchedulingModel
+        
computationalResourceSchedulingModel.setOverrideScratchLocation(extractScratchFromGroupPref(groupCompResourcePref));
+        
computationalResourceSchedulingModel.setOverrideAllocationProjectNumber(extractSlurmAllocationProject(groupCompResourcePref));
         
computationalResourceSchedulingModel.setOverrideLoginUserName(groupCompResourcePref.getLoginUserName());
 
         UserConfigurationDataModel userConfigurationDataModel = new 
UserConfigurationDataModel();
@@ -275,4 +278,27 @@ public class AgentManagementHandler {
 
         return experimentModel;
     }
+
+    private String extractScratchFromGroupPref(GroupComputeResourcePreference 
pref) {
+        if (pref.getResourceType() == ResourceType.SLURM
+                && pref.isSetSpecificPreferences()) {
+            EnvironmentSpecificPreferences esp = pref.getSpecificPreferences();
+            if (esp.isSetSlurm()) {
+                SlurmComputeResourcePreference scp = esp.getSlurm();
+                return scp.getScratchLocation();
+            }
+        }
+        return null;
+    }
+
+    private String 
extractSlurmAllocationProject(GroupComputeResourcePreference pref) {
+        if (pref.getResourceType() == ResourceType.SLURM
+                && pref.isSetSpecificPreferences()) {
+            EnvironmentSpecificPreferences esp = pref.getSpecificPreferences();
+            if (esp.isSetSlurm()) {
+                return esp.getSlurm().getAllocationProjectNumber();
+            }
+        }
+        return null;
+    }
 }
diff --git 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
index 9957f225f5..2e18ad5d92 100644
--- 
a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
+++ 
b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
@@ -44,8 +44,10 @@ import 
org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission;
 import 
org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile;
 import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourceReservation;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile;
+import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType;
 import 
org.apache.airavata.model.appcatalog.storageresource.StorageResourceDescription;
 import 
org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile;
@@ -197,8 +199,8 @@ public class TaskContext {
                 scratchLocation = 
processModel.getProcessResourceSchedule().getOverrideScratchLocation();
             } else if (isSetGroupResourceProfile()
                     && getGroupComputeResourcePreference() != null
-                    && 
isValid(getGroupComputeResourcePreference().getScratchLocation())) {
-                scratchLocation = 
getGroupComputeResourcePreference().getScratchLocation();
+                    && 
isValid(extractSlurmScratch(getGroupComputeResourcePreference()))) {
+                scratchLocation = 
extractSlurmScratch(getGroupComputeResourcePreference());
             } else {
                 throw new RuntimeException(
                         "Can't find a specified scratch location for compute 
resource " + getComputeResourceId());
@@ -780,8 +782,8 @@ public class TaskContext {
             return 
getUserComputeResourcePreference().getAllocationProjectNumber();
         } else if (isSetGroupResourceProfile()
                 && getGroupComputeResourcePreference() != null
-                && 
isValid(getGroupComputeResourcePreference().getAllocationProjectNumber())) {
-            return 
getGroupComputeResourcePreference().getAllocationProjectNumber();
+                && 
isValid(extractSlurmAllocationProject(getGroupComputeResourcePreference()))) {
+            return 
extractSlurmAllocationProject(getGroupComputeResourcePreference());
         } else {
             return null;
         }
@@ -819,7 +821,7 @@ public class TaskContext {
                 && 
isValid(getUserComputeResourcePreference().getQualityOfService())) {
             return getUserComputeResourcePreference().getQualityOfService();
         } else {
-            return getGroupComputeResourcePreference().getQualityOfService();
+            return extractSlurmQoS(getGroupComputeResourcePreference());
         }
     }
 
@@ -963,4 +965,37 @@ public class TaskContext {
             throw new Exception(msg);
         }
     }
+
+    private String extractSlurmScratch(GroupComputeResourcePreference pref) {
+        if (pref.getResourceType() == ResourceType.SLURM
+                && pref.isSetSpecificPreferences()) {
+            EnvironmentSpecificPreferences esp = pref.getSpecificPreferences();
+            if (esp.isSetSlurm()) {
+                return esp.getSlurm().getScratchLocation();
+            }
+        }
+        return null;
+    }
+
+    private String 
extractSlurmAllocationProject(GroupComputeResourcePreference pref) {
+        if (pref.getResourceType() == ResourceType.SLURM
+                && pref.isSetSpecificPreferences()) {
+            EnvironmentSpecificPreferences esp = pref.getSpecificPreferences();
+            if (esp.isSetSlurm()) {
+                return esp.getSlurm().getAllocationProjectNumber();
+            }
+        }
+        return null;
+    }
+
+    private String extractSlurmQoS(GroupComputeResourcePreference pref) {
+        if (pref.getResourceType() == ResourceType.SLURM
+                && pref.isSetSpecificPreferences()) {
+            EnvironmentSpecificPreferences esp = pref.getSpecificPreferences();
+            if (esp.isSetSlurm()) {
+                return esp.getSlurm().getQualityOfService();
+            }
+        }
+        return null;
+    }
 }
diff --git 
a/modules/ide-integration/src/main/containers/database_scripts/init/06-cloud-execution-support-migration.sql
 
b/modules/ide-integration/src/main/containers/database_scripts/init/06-cloud-execution-support-migration.sql
new file mode 100644
index 0000000000..4da86e8141
--- /dev/null
+++ 
b/modules/ide-integration/src/main/containers/database_scripts/init/06-cloud-execution-support-migration.sql
@@ -0,0 +1,72 @@
+-- Add RESOURCE_TYPE column to base table
+ALTER TABLE `GROUP_COMPUTE_RESOURCE_PREFERENCE`
+    ADD COLUMN `RESOURCE_TYPE` VARCHAR(255) NOT NULL DEFAULT 'SLURM';
+
+-- Make sure all future inserts require an explicit RESOURCE_TYPE
+ALTER TABLE `GROUP_COMPUTE_RESOURCE_PREFERENCE`
+    ALTER COLUMN `RESOURCE_TYPE` DROP DEFAULT;
+
+-- Create the new Slurm-specific table
+CREATE TABLE `SLURM_GROUP_COMPUTE_RESOURCE_PREFERENCE`
+(
+    `RESOURCE_ID`                             VARCHAR(255) NOT NULL,
+    `GROUP_RESOURCE_PROFILE_ID`               VARCHAR(255) NOT NULL,
+    `PREFERED_BATCH_QUEUE`                    VARCHAR(255)          DEFAULT 
NULL,
+    `SCRATCH_LOCATION`                        VARCHAR(255)          DEFAULT 
NULL,
+    `ALLOCATION_PROJECT_NUMBER`               VARCHAR(255)          DEFAULT 
NULL,
+    `USAGE_REPORTING_GATEWAY_ID`              VARCHAR(255)          DEFAULT 
NULL,
+    `QUALITY_OF_SERVICE`                      VARCHAR(255)          DEFAULT 
NULL,
+    `RESERVATION`                             VARCHAR(255)          DEFAULT 
NULL,
+    `RESERVATION_START_TIME`                  TIMESTAMP    NOT NULL DEFAULT 
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    `RESERVATION_END_TIME`                    TIMESTAMP    NOT NULL DEFAULT 
'0000-00-00 00:00:00',
+    `SSH_ACCOUNT_PROVISIONER`                 VARCHAR(255)          DEFAULT 
NULL,
+    `SSH_ACCOUNT_PROVISIONER_ADDITIONAL_INFO` TEXT                  DEFAULT 
NULL,
+    PRIMARY KEY (`RESOURCE_ID`, `GROUP_RESOURCE_PROFILE_ID`),
+    CONSTRAINT `FK_SLURM_PREF_TO_BASE` FOREIGN KEY (`RESOURCE_ID`, 
`GROUP_RESOURCE_PROFILE_ID`)
+        REFERENCES `GROUP_COMPUTE_RESOURCE_PREFERENCE` (`RESOURCE_ID`, 
`GROUP_RESOURCE_PROFILE_ID`)
+        ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- Migrate Slurm-specific field data from the base table into the new Slurm 
table
+INSERT INTO `SLURM_GROUP_COMPUTE_RESOURCE_PREFERENCE` (
+    `RESOURCE_ID`,
+    `GROUP_RESOURCE_PROFILE_ID`,
+    `PREFERED_BATCH_QUEUE`,
+    `SCRATCH_LOCATION`,
+    `ALLOCATION_PROJECT_NUMBER`,
+    `USAGE_REPORTING_GATEWAY_ID`,
+    `QUALITY_OF_SERVICE`,
+    `RESERVATION`,
+    `RESERVATION_START_TIME`,
+    `RESERVATION_END_TIME`,
+    `SSH_ACCOUNT_PROVISIONER`,
+    `SSH_ACCOUNT_PROVISIONER_ADDITIONAL_INFO`
+)
+SELECT
+    `RESOURCE_ID`,
+    `GROUP_RESOURCE_PROFILE_ID`,
+    `PREFERED_BATCH_QUEUE`,
+    `SCRATCH_LOCATION`,
+    `ALLOCATION_PROJECT_NUMBER`,
+    `USAGE_REPORTING_GATEWAY_ID`,
+    `QUALITY_OF_SERVICE`,
+    `RESERVATION`,
+    `RESERVATION_START_TIME`,
+    `RESERVATION_END_TIME`,
+    `SSH_ACCOUNT_PROVISIONER`,
+    `SSH_ACCOUNT_PROVISIONER_ADDITIONAL_INFO`
+FROM `GROUP_COMPUTE_RESOURCE_PREFERENCE`;
+
+
+-- Drop the Slurm-specific columns from the base table
+ALTER TABLE `GROUP_COMPUTE_RESOURCE_PREFERENCE`
+DROP COLUMN `PREFERED_BATCH_QUEUE`,
+  DROP COLUMN `SCRATCH_LOCATION`,
+  DROP COLUMN `ALLOCATION_PROJECT_NUMBER`,
+  DROP COLUMN `USAGE_REPORTING_GATEWAY_ID`,
+  DROP COLUMN `QUALITY_OF_SERVICE`,
+  DROP COLUMN `RESERVATION`,
+  DROP COLUMN `RESERVATION_START_TIME`,
+  DROP COLUMN `RESERVATION_END_TIME`,
+  DROP COLUMN `SSH_ACCOUNT_PROVISIONER`,
+  DROP COLUMN `SSH_ACCOUNT_PROVISIONER_ADDITIONAL_INFO`;
\ No newline at end of file
diff --git 
a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
 
b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
index 4fe922946a..2a5e137d32 100644
--- 
a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
+++ 
b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
@@ -1,26 +1,23 @@
 /**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.airavata.orchestrator.core.utils;
 
-import java.io.IOException;
-import java.util.*;
 import org.apache.airavata.common.exception.AiravataException;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.utils.DBUtil;
@@ -29,9 +26,18 @@ import org.apache.airavata.common.utils.ThriftUtils;
 import org.apache.airavata.credential.store.store.CredentialReader;
 import org.apache.airavata.credential.store.store.impl.CredentialReaderImpl;
 import 
org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription;
-import org.apache.airavata.model.appcatalog.computeresource.*;
+import org.apache.airavata.model.appcatalog.computeresource.CloudJobSubmission;
+import 
org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription;
+import 
org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterface;
+import 
org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol;
+import org.apache.airavata.model.appcatalog.computeresource.LOCALSubmission;
+import org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission;
+import 
org.apache.airavata.model.appcatalog.computeresource.UnicoreJobSubmission;
 import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.SlurmComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
 import org.apache.airavata.model.data.movement.DataMovementInterface;
 import org.apache.airavata.model.data.movement.DataMovementProtocol;
@@ -48,6 +54,12 @@ import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
 /**
  * This contains orchestrator specific utilities
  */
@@ -183,6 +195,8 @@ public class OrchestratorUtils {
         try {
             GroupComputeResourcePreference computeResourcePreference = 
getGroupComputeResourcePreference(processModel);
             ComputationalResourceSchedulingModel processResourceSchedule = 
processModel.getProcessResourceSchedule();
+            String scratchLocation = 
extractScratchFromGroupPref(computeResourcePreference);
+
             if (processModel.isUseUserCRPref()) {
                 UserComputeResourcePreference userComputeResourcePreference =
                         registryClient.getUserComputeResourcePreference(
@@ -194,22 +208,22 @@ public class OrchestratorUtils {
                             + "resource scheduling scratch location "
                             + 
processResourceSchedule.getOverrideScratchLocation());
                     return 
processResourceSchedule.getOverrideScratchLocation();
-                } else if 
(isValid(computeResourcePreference.getScratchLocation())) {
+                } else if (isValid(scratchLocation)) {
                     logger.warn("Either User computer resource preference or 
computer resource scheduling doesn't have "
-                            + "valid scratch location, using  gateway computer 
resource preference scratch location"
-                            + computeResourcePreference.getScratchLocation());
-                    return computeResourcePreference.getScratchLocation();
+                            + "valid scratch location, using  gateway computer 
resource preference scratch location "
+                            + scratchLocation);
+                    return scratchLocation;
                 } else {
                     throw new AiravataException("Scratch location is not 
found");
                 }
             } else {
                 if 
(isValid(processResourceSchedule.getOverrideScratchLocation())) {
                     return 
processResourceSchedule.getOverrideScratchLocation();
-                } else if 
(isValid(computeResourcePreference.getScratchLocation())) {
+                } else if (isValid(scratchLocation)) {
                     logger.warn("Process compute resource scheduling doesn't 
have valid scratch location, "
-                            + "using  gateway computer resource preference 
scratch location"
-                            + computeResourcePreference.getScratchLocation());
-                    return computeResourcePreference.getScratchLocation();
+                            + "using  gateway computer resource preference 
scratch location "
+                            + scratchLocation);
+                    return scratchLocation;
                 } else {
                     throw new AiravataException("Scratch location is not 
found");
                 }
@@ -428,4 +442,16 @@ public class OrchestratorUtils {
             return null;
         }
     }
+
+    private static String 
extractScratchFromGroupPref(GroupComputeResourcePreference pref) {
+        if (pref.getResourceType() == ResourceType.SLURM
+                && pref.isSetSpecificPreferences()) {
+            EnvironmentSpecificPreferences esp = pref.getSpecificPreferences();
+            if (esp.isSetSlurm()) {
+                SlurmComputeResourcePreference scp = esp.getSlurm();
+                return scp.getScratchLocation();
+            }
+        }
+        return null;
+    }
 }
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/GroupComputeResourcePrefEntity.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/GroupComputeResourcePrefEntity.java
index f3bc2cbc30..c8c324b654 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/GroupComputeResourcePrefEntity.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/GroupComputeResourcePrefEntity.java
@@ -1,51 +1,53 @@
 /**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.airavata.registry.core.entities.appcatalog;
 
 import jakarta.persistence.CascadeType;
 import jakarta.persistence.Column;
+import jakarta.persistence.DiscriminatorColumn;
+import jakarta.persistence.DiscriminatorType;
 import jakarta.persistence.Entity;
 import jakarta.persistence.EnumType;
 import jakarta.persistence.Enumerated;
-import jakarta.persistence.FetchType;
 import jakarta.persistence.Id;
 import jakarta.persistence.IdClass;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
 import jakarta.persistence.JoinColumn;
 import jakarta.persistence.ManyToOne;
-import jakarta.persistence.OneToMany;
-import jakarta.persistence.OrderBy;
 import jakarta.persistence.Table;
-import java.io.Serializable;
-import java.util.List;
 import 
org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol;
 import org.apache.airavata.model.data.movement.DataMovementProtocol;
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
 import org.apache.openjpa.persistence.jdbc.ForeignKeyAction;
 
+import java.io.Serializable;
+
 /**
  * The persistent class for the group_compute_resource_preference database 
table.
  */
 @Entity
 @Table(name = "GROUP_COMPUTE_RESOURCE_PREFERENCE")
+@Inheritance(strategy = InheritanceType.JOINED)
+@DiscriminatorColumn(name = "RESOURCE_TYPE", discriminatorType = 
DiscriminatorType.STRING)
 @IdClass(GroupComputeResourcePrefPK.class)
-public class GroupComputeResourcePrefEntity implements Serializable {
+public abstract class GroupComputeResourcePrefEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -57,66 +59,30 @@ public class GroupComputeResourcePrefEntity implements 
Serializable {
     @Id
     private String groupResourceProfileId;
 
-    @Column(name = "ALLOCATION_PROJECT_NUMBER")
-    private String allocationProjectNumber;
-
     @Column(name = "LOGIN_USERNAME")
     private String loginUserName;
 
     @Column(name = "OVERRIDE_BY_AIRAVATA")
     private short overridebyAiravata;
 
-    @Column(name = "PREFERED_BATCH_QUEUE")
-    private String preferredBatchQueue;
-
     @Column(name = "PREFERED_DATA_MOVE_PROTOCOL")
     @Enumerated(EnumType.STRING)
-    private DataMovementProtocol preferredDataMovementProtocol;
+    private DataMovementProtocol preferredDataMovementProtocol; //TODO 
introduce S3
 
     @Column(name = "PREFERED_JOB_SUB_PROTOCOL")
     @Enumerated(EnumType.STRING)
-    private JobSubmissionProtocol preferredJobSubmissionProtocol;
-
-    @Column(name = "QUALITY_OF_SERVICE")
-    private String qualityOfService;
+    private JobSubmissionProtocol preferredJobSubmissionProtocol; //TODO 
introduce CLOUD
 
     @Column(name = "RESOURCE_CS_TOKEN")
     private String resourceSpecificCredentialStoreToken;
 
-    @Column(name = "SCRATCH_LOCATION")
-    private String scratchLocation;
-
-    @Column(name = "USAGE_REPORTING_GATEWAY_ID")
-    private String usageReportingGatewayId;
-
-    @Column(name = "SSH_ACCOUNT_PROVISIONER")
-    private String sshAccountProvisioner;
-
-    @Column(name = "SSH_ACCOUNT_PROVISIONER_ADDITIONAL_INFO")
-    private String sshAccountProvisionerAdditionalInfo;
-
-    @OneToMany(
-            targetEntity = GroupSSHAccountProvisionerConfig.class,
-            mappedBy = "groupComputeResourcePref",
-            cascade = CascadeType.ALL,
-            fetch = FetchType.EAGER)
-    private List<GroupSSHAccountProvisionerConfig> 
groupSSHAccountProvisionerConfigs;
-
-    @OneToMany(
-            targetEntity = ComputeResourceReservationEntity.class,
-            mappedBy = "groupComputeResourcePref",
-            cascade = CascadeType.ALL,
-            fetch = FetchType.EAGER,
-            orphanRemoval = true)
-    @OrderBy("startTime ASC")
-    private List<ComputeResourceReservationEntity> reservations;
-
     @ManyToOne(targetEntity = GroupResourceProfileEntity.class, cascade = 
CascadeType.PERSIST)
     @JoinColumn(name = "GROUP_RESOURCE_PROFILE_ID", nullable = false, 
updatable = false)
     @ForeignKey(deleteAction = ForeignKeyAction.CASCADE)
     private GroupResourceProfileEntity groupResourceProfile;
 
-    public GroupComputeResourcePrefEntity() {}
+    public GroupComputeResourcePrefEntity() {
+    }
 
     public String getComputeResourceId() {
         return computeResourceId;
@@ -134,14 +100,6 @@ public class GroupComputeResourcePrefEntity implements 
Serializable {
         this.groupResourceProfileId = groupResourceProfileId;
     }
 
-    public String getAllocationProjectNumber() {
-        return allocationProjectNumber;
-    }
-
-    public void setAllocationProjectNumber(String allocationProjectNumber) {
-        this.allocationProjectNumber = allocationProjectNumber;
-    }
-
     public String getLoginUserName() {
         return loginUserName;
     }
@@ -158,14 +116,6 @@ public class GroupComputeResourcePrefEntity implements 
Serializable {
         this.overridebyAiravata = overridebyAiravata;
     }
 
-    public String getPreferredBatchQueue() {
-        return preferredBatchQueue;
-    }
-
-    public void setPreferredBatchQueue(String preferredBatchQueue) {
-        this.preferredBatchQueue = preferredBatchQueue;
-    }
-
     public DataMovementProtocol getPreferredDataMovementProtocol() {
         return preferredDataMovementProtocol;
     }
@@ -182,14 +132,6 @@ public class GroupComputeResourcePrefEntity implements 
Serializable {
         this.preferredJobSubmissionProtocol = preferredJobSubmissionProtocol;
     }
 
-    public String getQualityOfService() {
-        return qualityOfService;
-    }
-
-    public void setQualityOfService(String qualityOfService) {
-        this.qualityOfService = qualityOfService;
-    }
-
     public String getResourceSpecificCredentialStoreToken() {
         return resourceSpecificCredentialStoreToken;
     }
@@ -198,55 +140,6 @@ public class GroupComputeResourcePrefEntity implements 
Serializable {
         this.resourceSpecificCredentialStoreToken = 
resourceSpecificCredentialStoreToken;
     }
 
-    public String getScratchLocation() {
-        return scratchLocation;
-    }
-
-    public void setScratchLocation(String scratchLocation) {
-        this.scratchLocation = scratchLocation;
-    }
-
-    public String getUsageReportingGatewayId() {
-        return usageReportingGatewayId;
-    }
-
-    public void setUsageReportingGatewayId(String usageReportingGatewayId) {
-        this.usageReportingGatewayId = usageReportingGatewayId;
-    }
-
-    public String getSshAccountProvisioner() {
-        return sshAccountProvisioner;
-    }
-
-    public void setSshAccountProvisioner(String sshAccountProvisioner) {
-        this.sshAccountProvisioner = sshAccountProvisioner;
-    }
-
-    public String getSshAccountProvisionerAdditionalInfo() {
-        return sshAccountProvisionerAdditionalInfo;
-    }
-
-    public void setSshAccountProvisionerAdditionalInfo(String 
sshAccountProvisionerAdditionalInfo) {
-        this.sshAccountProvisionerAdditionalInfo = 
sshAccountProvisionerAdditionalInfo;
-    }
-
-    public List<GroupSSHAccountProvisionerConfig> 
getGroupSSHAccountProvisionerConfigs() {
-        return groupSSHAccountProvisionerConfigs;
-    }
-
-    public void setGroupSSHAccountProvisionerConfigs(
-            List<GroupSSHAccountProvisionerConfig> 
groupSSHAccountProvisionerConfigs) {
-        this.groupSSHAccountProvisionerConfigs = 
groupSSHAccountProvisionerConfigs;
-    }
-
-    public List<ComputeResourceReservationEntity> getReservations() {
-        return reservations;
-    }
-
-    public void setReservations(List<ComputeResourceReservationEntity> 
reservations) {
-        this.reservations = reservations;
-    }
-
     public GroupResourceProfileEntity getGroupResourceProfile() {
         return groupResourceProfile;
     }
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/SlurmGroupComputeResourcePrefEntity.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/SlurmGroupComputeResourcePrefEntity.java
new file mode 100644
index 0000000000..9d6e1149e4
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/appcatalog/SlurmGroupComputeResourcePrefEntity.java
@@ -0,0 +1,163 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.registry.core.entities.appcatalog;
+
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.DiscriminatorValue;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.OrderBy;
+import jakarta.persistence.Table;
+
+import java.util.List;
+
+/**
+ * The persistent class for the slurm_group_compute_resource_preference 
database table.
+ */
+@Entity
+@DiscriminatorValue("SLURM")
+@Table(name = "SLURM_GROUP_COMPUTE_RESOURCE_PREFERENCE")
+public class SlurmGroupComputeResourcePrefEntity extends 
GroupComputeResourcePrefEntity {
+
+    @Column(name = "ALLOCATION_PROJECT_NUMBER")
+    private String allocationProjectNumber;
+
+    @Column(name = "OVERRIDE_BY_AIRAVATA")
+    private short overridebyAiravata;
+
+    @Column(name = "PREFERED_BATCH_QUEUE")
+    private String preferredBatchQueue;
+
+    @Column(name = "QUALITY_OF_SERVICE")
+    private String qualityOfService;
+
+    @Column(name = "SCRATCH_LOCATION")
+    private String scratchLocation;
+
+    @Column(name = "USAGE_REPORTING_GATEWAY_ID")
+    private String usageReportingGatewayId;
+
+    @Column(name = "SSH_ACCOUNT_PROVISIONER")
+    private String sshAccountProvisioner;
+
+    @Column(name = "SSH_ACCOUNT_PROVISIONER_ADDITIONAL_INFO")
+    private String sshAccountProvisionerAdditionalInfo;
+
+    @OneToMany(
+            targetEntity = GroupSSHAccountProvisionerConfig.class,
+            mappedBy = "groupComputeResourcePref",
+            cascade = CascadeType.ALL,
+            fetch = FetchType.EAGER)
+    private List<GroupSSHAccountProvisionerConfig> 
groupSSHAccountProvisionerConfigs;
+
+    @OneToMany(
+            targetEntity = ComputeResourceReservationEntity.class,
+            mappedBy = "groupComputeResourcePref",
+            cascade = CascadeType.ALL,
+            fetch = FetchType.EAGER,
+            orphanRemoval = true)
+    @OrderBy("startTime ASC")
+    private List<ComputeResourceReservationEntity> reservations;
+
+    public SlurmGroupComputeResourcePrefEntity() {
+    }
+
+    public String getAllocationProjectNumber() {
+        return allocationProjectNumber;
+    }
+
+    public void setAllocationProjectNumber(String allocationProjectNumber) {
+        this.allocationProjectNumber = allocationProjectNumber;
+    }
+
+    public short getOverridebyAiravata() {
+        return overridebyAiravata;
+    }
+
+    public void setOverridebyAiravata(short overridebyAiravata) {
+        this.overridebyAiravata = overridebyAiravata;
+    }
+
+    public String getPreferredBatchQueue() {
+        return preferredBatchQueue;
+    }
+
+    public void setPreferredBatchQueue(String preferredBatchQueue) {
+        this.preferredBatchQueue = preferredBatchQueue;
+    }
+
+    public String getQualityOfService() {
+        return qualityOfService;
+    }
+
+    public void setQualityOfService(String qualityOfService) {
+        this.qualityOfService = qualityOfService;
+    }
+
+    public String getScratchLocation() {
+        return scratchLocation;
+    }
+
+    public void setScratchLocation(String scratchLocation) {
+        this.scratchLocation = scratchLocation;
+    }
+
+    public String getUsageReportingGatewayId() {
+        return usageReportingGatewayId;
+    }
+
+    public void setUsageReportingGatewayId(String usageReportingGatewayId) {
+        this.usageReportingGatewayId = usageReportingGatewayId;
+    }
+
+    public String getSshAccountProvisioner() {
+        return sshAccountProvisioner;
+    }
+
+    public void setSshAccountProvisioner(String sshAccountProvisioner) {
+        this.sshAccountProvisioner = sshAccountProvisioner;
+    }
+
+    public String getSshAccountProvisionerAdditionalInfo() {
+        return sshAccountProvisionerAdditionalInfo;
+    }
+
+    public void setSshAccountProvisionerAdditionalInfo(String 
sshAccountProvisionerAdditionalInfo) {
+        this.sshAccountProvisionerAdditionalInfo = 
sshAccountProvisionerAdditionalInfo;
+    }
+
+    public List<GroupSSHAccountProvisionerConfig> 
getGroupSSHAccountProvisionerConfigs() {
+        return groupSSHAccountProvisionerConfigs;
+    }
+
+    public void setGroupSSHAccountProvisionerConfigs(
+            List<GroupSSHAccountProvisionerConfig> 
groupSSHAccountProvisionerConfigs) {
+        this.groupSSHAccountProvisionerConfigs = 
groupSSHAccountProvisionerConfigs;
+    }
+
+    public List<ComputeResourceReservationEntity> getReservations() {
+        return reservations;
+    }
+
+    public void setReservations(List<ComputeResourceReservationEntity> 
reservations) {
+        this.reservations = reservations;
+    }
+}
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
index 8e60074905..5ac6c0a0e4 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
@@ -1,42 +1,45 @@
 /**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.airavata.registry.core.repositories.appcatalog;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
 import org.apache.airavata.common.utils.AiravataUtils;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.BatchQueueResourcePolicy;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourcePolicy;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile;
+import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.SlurmComputeResourcePreference;
 import org.apache.airavata.model.commons.airavata_commonsConstants;
 import 
org.apache.airavata.registry.core.entities.appcatalog.ComputeResourceReservationEntity;
 import 
org.apache.airavata.registry.core.entities.appcatalog.GroupComputeResourcePrefEntity;
 import 
org.apache.airavata.registry.core.entities.appcatalog.GroupComputeResourcePrefPK;
 import 
org.apache.airavata.registry.core.entities.appcatalog.GroupResourceProfileEntity;
+import 
org.apache.airavata.registry.core.entities.appcatalog.SlurmGroupComputeResourcePrefEntity;
 import org.apache.airavata.registry.core.utils.DBConstants;
 import org.apache.airavata.registry.core.utils.QueryConstants;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
 /**
  * Created by skariyat on 2/8/18.
  */
@@ -58,21 +61,29 @@ public class GroupResourceProfileRepository
 
     private void updateChildren(GroupResourceProfile groupResourceProfile, 
String groupResourceProfileId) {
         if (groupResourceProfile.getComputePreferences() != null) {
-            for (GroupComputeResourcePreference groupComputeResourcePreference 
:
-                    groupResourceProfile.getComputePreferences()) {
-                
groupComputeResourcePreference.setGroupResourceProfileId(groupResourceProfileId);
-                if 
(groupComputeResourcePreference.getGroupSSHAccountProvisionerConfigs() != null) 
{
-                    groupComputeResourcePreference
-                            .getGroupSSHAccountProvisionerConfigs()
-                            .forEach(gssh -> 
gssh.setGroupResourceProfileId(groupResourceProfileId));
-                }
-                if (groupComputeResourcePreference.getReservations() != null) {
-                    
groupComputeResourcePreference.getReservations().forEach(reservation -> {
-                        if (reservation.getReservationId().trim().isEmpty()
-                                || 
reservation.getReservationId().equals(airavata_commonsConstants.DEFAULT_ID)) {
-                            
reservation.setReservationId(AiravataUtils.getId(reservation.getReservationName()));
-                        }
-                    });
+            for (GroupComputeResourcePreference gcrPref : 
groupResourceProfile.getComputePreferences()) {
+                gcrPref.setGroupResourceProfileId(groupResourceProfileId);
+
+                if (gcrPref.getResourceType() == ResourceType.SLURM
+                        && gcrPref.isSetSpecificPreferences()
+                        && gcrPref.getSpecificPreferences().isSetSlurm()) {
+
+                    SlurmComputeResourcePreference slurm = 
gcrPref.getSpecificPreferences().getSlurm();
+
+                    // update SSH provisioner configs
+                    if (slurm.getGroupSSHAccountProvisionerConfigs() != null) {
+                        slurm.getGroupSSHAccountProvisionerConfigs()
+                                .forEach(gssh -> 
gssh.setGroupResourceProfileId(groupResourceProfileId));
+                    }
+
+                    // update reservations
+                    if (slurm.getReservations() != null) {
+                        slurm.getReservations().forEach(res -> {
+                            if (res.getReservationId().trim().isEmpty() || 
res.getReservationId().equals(airavata_commonsConstants.DEFAULT_ID)) {
+                                
res.setReservationId(AiravataUtils.getId(res.getReservationName()));
+                            }
+                        });
+                    }
                 }
             }
         }
@@ -108,15 +119,16 @@ public class GroupResourceProfileRepository
 
     private void updateChildrenEntities(GroupResourceProfileEntity 
groupResourceProfileEntity) {
         if (groupResourceProfileEntity.getComputePreferences() != null) {
-            for (GroupComputeResourcePrefEntity groupComputeResourcePrefEntity 
:
-                    groupResourceProfileEntity.getComputePreferences()) {
+            for (GroupComputeResourcePrefEntity gcrPref : 
groupResourceProfileEntity.getComputePreferences()) {
                 // For some reason next line is needed to get OpenJPA to 
persist
                 // GroupResourceProfileEntity before 
GroupComputeResourcePrefEntity
-                
groupComputeResourcePrefEntity.setGroupResourceProfile(groupResourceProfileEntity);
-                if (groupComputeResourcePrefEntity.getReservations() != null) {
-                    for (ComputeResourceReservationEntity reservationEntity :
-                            groupComputeResourcePrefEntity.getReservations()) {
-                        
reservationEntity.setGroupComputeResourcePref(groupComputeResourcePrefEntity);
+                gcrPref.setGroupResourceProfile(groupResourceProfileEntity);
+                if (gcrPref instanceof SlurmGroupComputeResourcePrefEntity) {
+                    SlurmGroupComputeResourcePrefEntity slurm = 
(SlurmGroupComputeResourcePrefEntity) gcrPref;
+                    if (slurm.getReservations() != null) {
+                        for (ComputeResourceReservationEntity r : 
slurm.getReservations()) {
+                            r.setGroupComputeResourcePref(slurm);
+                        }
                     }
                 }
             }
diff --git 
a/modules/registry/registry-core/src/test/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepositoryTest.java
 
b/modules/registry/registry-core/src/test/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepositoryTest.java
index 04db33d812..81e669e287 100644
--- 
a/modules/registry/registry-core/src/test/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepositoryTest.java
+++ 
b/modules/registry/registry-core/src/test/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepositoryTest.java
@@ -38,7 +38,7 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
+// FIXME - update the codes changed by GroupComputeResourcePreference -> 
abstract GroupComputeResourcePreference + SlurmGroupComputeResourcePreference
 public class GroupResourceProfileRepositoryTest extends TestBase {
 
     private static final Logger logger = 
LoggerFactory.getLogger(ComputeResourceRepository.class);
@@ -147,9 +147,9 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
 
         GroupComputeResourcePreference groupComputeResourcePreference1 = new 
GroupComputeResourcePreference();
         groupComputeResourcePreference1.setComputeResourceId(resourceId1);
-        
groupComputeResourcePreference1.addToGroupSSHAccountProvisionerConfigs(groupAccountSSHProvisionerConfig);
-        groupComputeResourcePreference1.addToReservations(reservation1);
-        groupComputeResourcePreference1.addToReservations(reservation2);
+//        
groupComputeResourcePreference1.addToGroupSSHAccountProvisionerConfigs(groupAccountSSHProvisionerConfig);
+//        groupComputeResourcePreference1.addToReservations(reservation1);
+//        groupComputeResourcePreference1.addToReservations(reservation2);
 
         GroupComputeResourcePreference groupComputeResourcePreference2 = new 
GroupComputeResourcePreference();
         groupComputeResourcePreference2.setComputeResourceId(resourceId2);
@@ -221,25 +221,25 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
 
         
assertTrue(groupResourceProfileRepository.getGroupComputeResourcePreference(resourceId1,
 groupResourceProfileId)
                 != null);
-        assertTrue(groupResourceProfileRepository
-                        .getGroupComputeResourcePreference(resourceId1, 
groupResourceProfileId)
-                        .getGroupSSHAccountProvisionerConfigs()
-                        .size()
-                == 1);
+//        assertTrue(groupResourceProfileRepository
+//                        .getGroupComputeResourcePreference(resourceId1, 
groupResourceProfileId)
+//                        .getGroupSSHAccountProvisionerConfigs()
+//                        .size()
+//                == 1);
         // verify reservation1
-        assertEquals(
-                2,
-                groupResourceProfileRepository
-                        .getGroupComputeResourcePreference(resourceId1, 
groupResourceProfileId)
-                        .getReservations()
-                        .size());
-        ComputeResourceReservation retrievedReservation1 = 
groupResourceProfileRepository
-                .getGroupComputeResourcePreference(resourceId1, 
groupResourceProfileId)
-                .getReservations()
-                .get(0);
-        assertEquals(reservation1.getReservationName(), 
retrievedReservation1.getReservationName());
-        assertEquals(reservation1.getStartTime(), 
retrievedReservation1.getStartTime());
-        assertEquals(reservation1.getEndTime(), 
retrievedReservation1.getEndTime());
+//        assertEquals(
+//                2,
+//                groupResourceProfileRepository
+//                        .getGroupComputeResourcePreference(resourceId1, 
groupResourceProfileId)
+//                        .getReservations()
+//                        .size());
+//        ComputeResourceReservation retrievedReservation1 = 
groupResourceProfileRepository
+//                .getGroupComputeResourcePreference(resourceId1, 
groupResourceProfileId)
+//                .getReservations()
+//                .get(0);
+//        assertEquals(reservation1.getReservationName(), 
retrievedReservation1.getReservationName());
+//        assertEquals(reservation1.getStartTime(), 
retrievedReservation1.getStartTime());
+//        assertEquals(reservation1.getEndTime(), 
retrievedReservation1.getEndTime());
 
         ComputeResourcePolicy getComputeResourcePolicy =
                 
groupResourceProfileRepository.getComputeResourcePolicy(computeResourcePolicyId1);
@@ -362,8 +362,8 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
 
         GroupComputeResourcePreference groupComputeResourcePreference1 = new 
GroupComputeResourcePreference();
         groupComputeResourcePreference1.setComputeResourceId(resourceId1);
-        groupComputeResourcePreference1.addToReservations(reservation1);
-        groupComputeResourcePreference1.addToReservations(reservation2);
+//        groupComputeResourcePreference1.addToReservations(reservation1);
+//        groupComputeResourcePreference1.addToReservations(reservation2);
 
         
groupResourceProfile.addToComputePreferences(groupComputeResourcePreference1);
 
@@ -373,10 +373,10 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(2, retrievedReservations.size());
-            retrievedReservations.remove(1);
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(2, retrievedReservations.size());
+//            retrievedReservations.remove(1);
 
             
groupResourceProfileRepository.updateGroupResourceProfile(retrievedGroupResourceProfile);
         }
@@ -384,12 +384,12 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(1, retrievedReservations.size());
-            assertEquals(
-                    reservation1.getReservationName(),
-                    retrievedReservations.get(0).getReservationName());
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(1, retrievedReservations.size());
+//            assertEquals(
+//                    reservation1.getReservationName(),
+//                    retrievedReservations.get(0).getReservationName());
         }
     }
 
@@ -415,8 +415,8 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
 
         GroupComputeResourcePreference groupComputeResourcePreference1 = new 
GroupComputeResourcePreference();
         groupComputeResourcePreference1.setComputeResourceId(resourceId1);
-        groupComputeResourcePreference1.addToReservations(reservation1);
-        groupComputeResourcePreference1.addToReservations(reservation2);
+//        groupComputeResourcePreference1.addToReservations(reservation1);
+//        groupComputeResourcePreference1.addToReservations(reservation2);
 
         
groupResourceProfile.addToComputePreferences(groupComputeResourcePreference1);
 
@@ -428,12 +428,12 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(2, retrievedReservations.size());
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(2, retrievedReservations.size());
             // push into future, should sort second on next retrieval
-            retrievedReservations.get(0).setStartTime(newStartTime);
-            retrievedReservations.get(0).setEndTime(newEndTime);
+//            retrievedReservations.get(0).setStartTime(newStartTime);
+//            retrievedReservations.get(0).setEndTime(newEndTime);
 
             
groupResourceProfileRepository.updateGroupResourceProfile(retrievedGroupResourceProfile);
         }
@@ -441,14 +441,14 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(2, retrievedReservations.size());
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(2, retrievedReservations.size());
             // first reservation should now sort second
-            ComputeResourceReservation reservation = 
retrievedReservations.get(1);
-            assertEquals(reservation1.getReservationName(), 
reservation.getReservationName());
-            assertEquals(newStartTime, reservation.getStartTime());
-            assertEquals(newEndTime, reservation.getEndTime());
+//            ComputeResourceReservation reservation = 
retrievedReservations.get(1);
+//            assertEquals(reservation1.getReservationName(), 
reservation.getReservationName());
+//            assertEquals(newStartTime, reservation.getStartTime());
+//            assertEquals(newEndTime, reservation.getEndTime());
         }
     }
 
@@ -467,7 +467,7 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
 
         GroupComputeResourcePreference groupComputeResourcePreference1 = new 
GroupComputeResourcePreference();
         groupComputeResourcePreference1.setComputeResourceId(resourceId1);
-        groupComputeResourcePreference1.addToReservations(reservation1);
+//        groupComputeResourcePreference1.addToReservations(reservation1);
 
         
groupResourceProfile.addToComputePreferences(groupComputeResourcePreference1);
 
@@ -477,12 +477,12 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(1, retrievedReservations.size());
-            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
-            assertEquals(1, reservation.getQueueNamesSize());
-            reservation.addToQueueNames(QUEUE2_NAME);
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(1, retrievedReservations.size());
+//            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
+//            assertEquals(1, reservation.getQueueNamesSize());
+//            reservation.addToQueueNames(QUEUE2_NAME);
 
             
groupResourceProfileRepository.updateGroupResourceProfile(retrievedGroupResourceProfile);
         }
@@ -490,12 +490,12 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(1, retrievedReservations.size());
-            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
-            assertEquals(
-                    new HashSet<>(Arrays.asList(QUEUE1_NAME, QUEUE2_NAME)), 
new HashSet<>(reservation.getQueueNames()));
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(1, retrievedReservations.size());
+//            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
+//            assertEquals(
+//                    new HashSet<>(Arrays.asList(QUEUE1_NAME, QUEUE2_NAME)), 
new HashSet<>(reservation.getQueueNames()));
         }
     }
 
@@ -515,7 +515,7 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
 
         GroupComputeResourcePreference groupComputeResourcePreference1 = new 
GroupComputeResourcePreference();
         groupComputeResourcePreference1.setComputeResourceId(resourceId1);
-        groupComputeResourcePreference1.addToReservations(reservation1);
+//        groupComputeResourcePreference1.addToReservations(reservation1);
 
         
groupResourceProfile.addToComputePreferences(groupComputeResourcePreference1);
 
@@ -525,14 +525,14 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(1, retrievedReservations.size());
-            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
-            assertEquals(
-                    new HashSet<>(Arrays.asList(QUEUE1_NAME, QUEUE2_NAME)), 
new HashSet<>(reservation.getQueueNames()));
-            reservation.unsetQueueNames();
-            reservation.addToQueueNames(QUEUE1_NAME);
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(1, retrievedReservations.size());
+//            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
+//            assertEquals(
+//                    new HashSet<>(Arrays.asList(QUEUE1_NAME, QUEUE2_NAME)), 
new HashSet<>(reservation.getQueueNames()));
+//            reservation.unsetQueueNames();
+//            reservation.addToQueueNames(QUEUE1_NAME);
 
             
groupResourceProfileRepository.updateGroupResourceProfile(retrievedGroupResourceProfile);
         }
@@ -540,11 +540,11 @@ public class GroupResourceProfileRepositoryTest extends 
TestBase {
         {
             GroupResourceProfile retrievedGroupResourceProfile =
                     
groupResourceProfileRepository.getGroupResourceProfile(groupResourceProfileId);
-            List<ComputeResourceReservation> retrievedReservations =
-                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
-            assertEquals(1, retrievedReservations.size());
-            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
-            assertEquals(new HashSet<>(Arrays.asList(QUEUE1_NAME)), new 
HashSet<>(reservation.getQueueNames()));
+//            List<ComputeResourceReservation> retrievedReservations =
+//                    
retrievedGroupResourceProfile.getComputePreferences().get(0).getReservations();
+//            assertEquals(1, retrievedReservations.size());
+//            ComputeResourceReservation reservation = 
retrievedReservations.get(0);
+//            assertEquals(new HashSet<>(Arrays.asList(QUEUE1_NAME)), new 
HashSet<>(reservation.getQueueNames()));
         }
     }
 }
diff --git 
a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
 
b/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
index 1db57626dc..2568083a12 100644
--- 
a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
+++ 
b/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java
@@ -1,30 +1,23 @@
 /**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.airavata.sharing.registry.migrator.airavata;
 
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.*;
-import java.util.stream.Collectors;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.common.utils.ServerSettings;
@@ -37,8 +30,10 @@ import 
org.apache.airavata.model.appcatalog.gatewaygroups.GatewayGroups;
 import 
org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourcePolicy;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
 import 
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile;
+import 
org.apache.airavata.model.appcatalog.groupresourceprofile.SlurmComputeResourcePreference;
 import org.apache.airavata.model.credential.store.CredentialSummary;
 import org.apache.airavata.model.credential.store.PasswordCredential;
 import org.apache.airavata.model.credential.store.SummaryType;
@@ -57,11 +52,33 @@ import 
org.apache.airavata.service.profile.iam.admin.services.cpi.IamAdminServic
 import 
org.apache.airavata.service.profile.iam.admin.services.cpi.exception.IamAdminServicesException;
 import org.apache.airavata.service.security.AiravataSecurityManager;
 import org.apache.airavata.service.security.SecurityManagerFactory;
-import org.apache.airavata.sharing.registry.models.*;
+import org.apache.airavata.sharing.registry.models.Domain;
+import org.apache.airavata.sharing.registry.models.Entity;
+import org.apache.airavata.sharing.registry.models.EntitySearchField;
+import org.apache.airavata.sharing.registry.models.EntityType;
+import org.apache.airavata.sharing.registry.models.GroupCardinality;
+import org.apache.airavata.sharing.registry.models.GroupType;
+import org.apache.airavata.sharing.registry.models.PermissionType;
+import org.apache.airavata.sharing.registry.models.SearchCondition;
+import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.registry.models.User;
+import org.apache.airavata.sharing.registry.models.UserGroup;
 import 
org.apache.airavata.sharing.registry.server.SharingRegistryServerHandler;
 import org.apache.airavata.sharing.registry.utils.ThriftDataModelConversion;
 import org.apache.thrift.TException;
 
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 public class AiravataDataMigrator {
 
     public static void main(String[] args)
@@ -826,27 +843,33 @@ public class AiravataDataMigrator {
                 computeResourcePreference.getPreferredJobSubmissionProtocol());
         groupComputeResourcePreference.setPreferredDataMovementProtocol(
                 computeResourcePreference.getPreferredDataMovementProtocol());
+        if 
(isValid(computeResourcePreference.getResourceSpecificCredentialStoreToken())) {
+            
groupComputeResourcePreference.setResourceSpecificCredentialStoreToken(
+                    
computeResourcePreference.getResourceSpecificCredentialStoreToken());
+        }
+
+        
groupComputeResourcePreference.setResourceType(org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType.SLURM);
+        SlurmComputeResourcePreference slurm = new 
SlurmComputeResourcePreference();
         if (isValid(computeResourcePreference.getPreferredBatchQueue())) {
-            
groupComputeResourcePreference.setPreferredBatchQueue(computeResourcePreference.getPreferredBatchQueue());
+            
slurm.setPreferredBatchQueue(computeResourcePreference.getPreferredBatchQueue());
         }
         if (isValid(computeResourcePreference.getScratchLocation())) {
-            
groupComputeResourcePreference.setScratchLocation(computeResourcePreference.getScratchLocation());
+            
slurm.setScratchLocation(computeResourcePreference.getScratchLocation());
         }
         if (isValid(computeResourcePreference.getAllocationProjectNumber())) {
-            groupComputeResourcePreference.setAllocationProjectNumber(
-                    computeResourcePreference.getAllocationProjectNumber());
-        }
-        if 
(isValid(computeResourcePreference.getResourceSpecificCredentialStoreToken())) {
-            
groupComputeResourcePreference.setResourceSpecificCredentialStoreToken(
-                    
computeResourcePreference.getResourceSpecificCredentialStoreToken());
+            
slurm.setAllocationProjectNumber(computeResourcePreference.getAllocationProjectNumber());
         }
         if (isValid(computeResourcePreference.getUsageReportingGatewayId())) {
-            groupComputeResourcePreference.setUsageReportingGatewayId(
-                    computeResourcePreference.getUsageReportingGatewayId());
+            
slurm.setUsageReportingGatewayId(computeResourcePreference.getUsageReportingGatewayId());
         }
-        if (isValid(groupComputeResourcePreference.getQualityOfService())) {
-            
groupComputeResourcePreference.setQualityOfService(computeResourcePreference.getQualityOfService());
+        if (isValid(computeResourcePreference.getQualityOfService())) {
+            
slurm.setQualityOfService(computeResourcePreference.getQualityOfService());
         }
+
+        EnvironmentSpecificPreferences esp = new 
EnvironmentSpecificPreferences();
+        esp.setSlurm(slurm);
+        groupComputeResourcePreference.setSpecificPreferences(esp);
+
         // Note: skipping copying of reservation time and ssh account 
provisioner configuration for now
         return groupComputeResourcePreference;
     }
diff --git 
a/thrift-interface-descriptions/data-models/group_resource_profile_model.thrift 
b/thrift-interface-descriptions/data-models/group_resource_profile_model.thrift
index f15f29d5a8..1f4f04a77e 100644
--- 
a/thrift-interface-descriptions/data-models/group_resource_profile_model.thrift
+++ 
b/thrift-interface-descriptions/data-models/group_resource_profile_model.thrift
@@ -42,6 +42,26 @@ struct ComputeResourceReservation {
     5: required i64 endTime,
 }
 
+enum ResourceType {
+  SLURM = 0,
+}
+
+struct SlurmComputeResourcePreference {
+    1: optional string allocationProjectNumber,
+    2: optional string preferredBatchQueue,
+    3: optional string scratchLocation,
+    4: optional string qualityOfService,
+    5: optional string usageReportingGatewayId,
+    6: optional string sshAccountProvisioner,
+    7: optional list<GroupAccountSSHProvisionerConfig> 
groupSSHAccountProvisionerConfigs,
+    8: optional string sshAccountProvisionerAdditionalInfo,
+    9: optional list<ComputeResourceReservation> reservations
+}
+
+union EnvironmentSpecificPreferences {
+    1: SlurmComputeResourcePreference slurm,
+}
+
 struct GroupComputeResourcePreference {
     1: required string computeResourceId,
     2: required string groupResourceProfileId = airavata_commons.DEFAULT_ID,
@@ -49,16 +69,9 @@ struct GroupComputeResourcePreference {
     4: optional string loginUserName,
     5: optional compute_resource_model.JobSubmissionProtocol 
preferredJobSubmissionProtocol,
     6: optional data_movement_models.DataMovementProtocol 
preferredDataMovementProtocol,
-    7: optional string preferredBatchQueue,
-    8: optional string scratchLocation,
-    9: optional string allocationProjectNumber,
-    10: optional string resourceSpecificCredentialStoreToken,
-    11: optional string usageReportingGatewayId,
-    12: optional string qualityOfService,
-    16: optional string sshAccountProvisioner,
-    17: optional list<GroupAccountSSHProvisionerConfig> 
groupSSHAccountProvisionerConfigs,
-    18: optional string sshAccountProvisionerAdditionalInfo,
-    19: optional list<ComputeResourceReservation> reservations,
+    7: optional string resourceSpecificCredentialStoreToken,
+    8: required ResourceType resourceType,
+    9: optional EnvironmentSpecificPreferences specificPreferences
 }
 
 struct ComputeResourcePolicy {

Reply via email to