You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2016/11/08 20:26:43 UTC

airavata git commit: Give precedence to User CR Pref over Gateway CR Pref

Repository: airavata
Updated Branches:
  refs/heads/develop b8977a7ec -> 3660cd8ff


Give precedence to User CR Pref over Gateway CR Pref


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/3660cd8f
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/3660cd8f
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/3660cd8f

Branch: refs/heads/develop
Commit: 3660cd8ff9f025b84ff9404792c4aca7f2b0a136
Parents: b8977a7
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Tue Nov 8 15:26:30 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Tue Nov 8 15:26:30 2016 -0500

----------------------------------------------------------------------
 .../resources/lib/Airavata/API/Airavata.php     |  82 +++++------
 .../model/util/ExperimentModelUtil.java         |   1 +
 .../apache/airavata/gfac/core/GFacUtils.java    |  44 +-----
 .../gfac/core/context/ProcessContext.java       | 135 +++++++++++++++++--
 .../org/apache/airavata/gfac/impl/Factory.java  |  46 +------
 .../airavata/gfac/impl/GFacEngineImpl.java      |  58 ++++++--
 .../impl/task/DefaultJobSubmissionTask.java     |   2 +-
 .../gfac/impl/task/utils/bes/JSDLGenerator.java |   5 +-
 .../catalog/impl/ExperimentRegistry.java        |   6 +-
 .../core/experiment/catalog/model/Process.java  |  10 ++
 .../catalog/resources/ProcessResource.java      |  11 ++
 .../experiment/catalog/resources/Utils.java     |   1 +
 .../utils/ThriftDataModelConversion.java        |   3 +-
 13 files changed, 257 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
index 0cea7e2..d75e594 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php
@@ -3027,7 +3027,7 @@ interface AiravataIf {
    * @param computeResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @param computeResourcePreference
+   * @param gatewayComputeResourcePreference
    *   The ComputeResourcePreference object to be added to the resource profile.
    * 
    * @return status
@@ -3038,14 +3038,14 @@ interface AiravataIf {
    * @param \Airavata\Model\Security\AuthzToken $authzToken
    * @param string $gatewayID
    * @param string $computeResourceId
-   * @param \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference
+   * @param \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference
    * @return bool
    * @throws \Airavata\API\Error\InvalidRequestException
    * @throws \Airavata\API\Error\AiravataClientException
    * @throws \Airavata\API\Error\AiravataSystemException
    * @throws \Airavata\API\Error\AuthorizationException
    */
-  public function addGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference);
+  public function addGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference);
   /**
    * Add a Storage Resource Preference to a registered gateway profile.
    * 
@@ -3055,7 +3055,7 @@ interface AiravataIf {
    * @param storageResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @param computeResourcePreference
+   * @param gatewayComputeResourcePreference
    *   The ComputeResourcePreference object to be added to the resource profile.
    * 
    * @return status
@@ -3084,7 +3084,7 @@ interface AiravataIf {
    * @param computeResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @return computeResourcePreference
+   * @return gatewayComputeResourcePreference
    *   Returns the ComputeResourcePreference object.
    * 
    * 
@@ -3161,7 +3161,7 @@ interface AiravataIf {
    * @param gatewayID
    *   The identifier for the gateway profile to be requested
    * 
-   * @return computeResourcePreference
+   * @return gatewayComputeResourcePreference
    *   Returns the ComputeResourcePreference object.
    * 
    * 
@@ -3219,7 +3219,7 @@ interface AiravataIf {
    * @param computeResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @param computeResourcePreference
+   * @param gatewayComputeResourcePreference
    *   The ComputeResourcePreference object to be updated to the resource profile.
    * 
    * @return status
@@ -3229,14 +3229,14 @@ interface AiravataIf {
    * @param \Airavata\Model\Security\AuthzToken $authzToken
    * @param string $gatewayID
    * @param string $computeResourceId
-   * @param \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference
+   * @param \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference
    * @return bool
    * @throws \Airavata\API\Error\InvalidRequestException
    * @throws \Airavata\API\Error\AiravataClientException
    * @throws \Airavata\API\Error\AiravataSystemException
    * @throws \Airavata\API\Error\AuthorizationException
    */
-  public function updateGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference);
+  public function updateGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference);
   /**
    * Update a Storage Resource Preference of a registered gateway profile.
    * 
@@ -3437,7 +3437,7 @@ interface AiravataIf {
    * @param computeResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @param computeResourcePreference
+   * @param gatewayComputeResourcePreference
    *   The ComputeResourcePreference object to be added to the resource profile.
    * 
    * @return status
@@ -3469,7 +3469,7 @@ interface AiravataIf {
    * @param storageResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @param computeResourcePreference
+   * @param gatewayComputeResourcePreference
    *   The ComputeResourcePreference object to be added to the resource profile.
    * 
    * @return status
@@ -3502,7 +3502,7 @@ interface AiravataIf {
    * @param userComputeResourceId
    *   Preferences related to a particular compute resource
    * 
-   * @return computeResourcePreference
+   * @return gatewayComputeResourcePreference
    *   Returns the ComputeResourcePreference object.
    * 
    * 
@@ -3580,7 +3580,7 @@ interface AiravataIf {
    * @param gatewayID
    *   The identifier for the gateway profile to be requested
    * 
-   * @return computeResourcePreference
+   * @return gatewayComputeResourcePreference
    *   Returns the ComputeResourcePreference object.
    * 
    * 
@@ -11807,19 +11807,19 @@ class AiravataClient implements \Airavata\API\AiravataIf {
     throw new \Exception("deleteGatewayResourceProfile failed: unknown result");
   }
 
-  public function addGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference)
+  public function addGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference)
   {
-    $this->send_addGatewayComputeResourcePreference($authzToken, $gatewayID, $computeResourceId, $computeResourcePreference);
+    $this->send_addGatewayComputeResourcePreference($authzToken, $gatewayID, $computeResourceId, $gatewayComputeResourcePreference);
     return $this->recv_addGatewayComputeResourcePreference();
   }
 
-  public function send_addGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference)
+  public function send_addGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference)
   {
     $args = new \Airavata\API\Airavata_addGatewayComputeResourcePreference_args();
     $args->authzToken = $authzToken;
     $args->gatewayID = $gatewayID;
     $args->computeResourceId = $computeResourceId;
-    $args->computeResourcePreference = $computeResourcePreference;
+    $args->gatewayComputeResourcePreference = $gatewayComputeResourcePreference;
     $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
     if ($bin_accel)
     {
@@ -12260,19 +12260,19 @@ class AiravataClient implements \Airavata\API\AiravataIf {
     throw new \Exception("getAllGatewayResourceProfiles failed: unknown result");
   }
 
-  public function updateGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference)
+  public function updateGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference)
   {
-    $this->send_updateGatewayComputeResourcePreference($authzToken, $gatewayID, $computeResourceId, $computeResourcePreference);
+    $this->send_updateGatewayComputeResourcePreference($authzToken, $gatewayID, $computeResourceId, $gatewayComputeResourcePreference);
     return $this->recv_updateGatewayComputeResourcePreference();
   }
 
-  public function send_updateGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference)
+  public function send_updateGatewayComputeResourcePreference(\Airavata\Model\Security\AuthzToken $authzToken, $gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $gatewayComputeResourcePreference)
   {
     $args = new \Airavata\API\Airavata_updateGatewayComputeResourcePreference_args();
     $args->authzToken = $authzToken;
     $args->gatewayID = $gatewayID;
     $args->computeResourceId = $computeResourceId;
-    $args->computeResourcePreference = $computeResourcePreference;
+    $args->gatewayComputeResourcePreference = $gatewayComputeResourcePreference;
     $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
     if ($bin_accel)
     {
@@ -51622,7 +51622,7 @@ class Airavata_addGatewayComputeResourcePreference_args {
   /**
    * @var \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference
    */
-  public $computeResourcePreference = null;
+  public $gatewayComputeResourcePreference = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -51641,7 +51641,7 @@ class Airavata_addGatewayComputeResourcePreference_args {
           'type' => TType::STRING,
           ),
         4 => array(
-          'var' => 'computeResourcePreference',
+          'var' => 'gatewayComputeResourcePreference',
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference',
           ),
@@ -51657,8 +51657,8 @@ class Airavata_addGatewayComputeResourcePreference_args {
       if (isset($vals['computeResourceId'])) {
         $this->computeResourceId = $vals['computeResourceId'];
       }
-      if (isset($vals['computeResourcePreference'])) {
-        $this->computeResourcePreference = $vals['computeResourcePreference'];
+      if (isset($vals['gatewayComputeResourcePreference'])) {
+        $this->gatewayComputeResourcePreference = $vals['gatewayComputeResourcePreference'];
       }
     }
   }
@@ -51706,8 +51706,8 @@ class Airavata_addGatewayComputeResourcePreference_args {
           break;
         case 4:
           if ($ftype == TType::STRUCT) {
-            $this->computeResourcePreference = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
-            $xfer += $this->computeResourcePreference->read($input);
+            $this->gatewayComputeResourcePreference = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
+            $xfer += $this->gatewayComputeResourcePreference->read($input);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -51743,12 +51743,12 @@ class Airavata_addGatewayComputeResourcePreference_args {
       $xfer += $output->writeString($this->computeResourceId);
       $xfer += $output->writeFieldEnd();
     }
-    if ($this->computeResourcePreference !== null) {
-      if (!is_object($this->computeResourcePreference)) {
+    if ($this->gatewayComputeResourcePreference !== null) {
+      if (!is_object($this->gatewayComputeResourcePreference)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('computeResourcePreference', TType::STRUCT, 4);
-      $xfer += $this->computeResourcePreference->write($output);
+      $xfer += $output->writeFieldBegin('gatewayComputeResourcePreference', TType::STRUCT, 4);
+      $xfer += $this->gatewayComputeResourcePreference->write($output);
       $xfer += $output->writeFieldEnd();
     }
     $xfer += $output->writeFieldStop();
@@ -53787,7 +53787,7 @@ class Airavata_updateGatewayComputeResourcePreference_args {
   /**
    * @var \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference
    */
-  public $computeResourcePreference = null;
+  public $gatewayComputeResourcePreference = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -53806,7 +53806,7 @@ class Airavata_updateGatewayComputeResourcePreference_args {
           'type' => TType::STRING,
           ),
         4 => array(
-          'var' => 'computeResourcePreference',
+          'var' => 'gatewayComputeResourcePreference',
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference',
           ),
@@ -53822,8 +53822,8 @@ class Airavata_updateGatewayComputeResourcePreference_args {
       if (isset($vals['computeResourceId'])) {
         $this->computeResourceId = $vals['computeResourceId'];
       }
-      if (isset($vals['computeResourcePreference'])) {
-        $this->computeResourcePreference = $vals['computeResourcePreference'];
+      if (isset($vals['gatewayComputeResourcePreference'])) {
+        $this->gatewayComputeResourcePreference = $vals['gatewayComputeResourcePreference'];
       }
     }
   }
@@ -53871,8 +53871,8 @@ class Airavata_updateGatewayComputeResourcePreference_args {
           break;
         case 4:
           if ($ftype == TType::STRUCT) {
-            $this->computeResourcePreference = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
-            $xfer += $this->computeResourcePreference->read($input);
+            $this->gatewayComputeResourcePreference = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
+            $xfer += $this->gatewayComputeResourcePreference->read($input);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -53908,12 +53908,12 @@ class Airavata_updateGatewayComputeResourcePreference_args {
       $xfer += $output->writeString($this->computeResourceId);
       $xfer += $output->writeFieldEnd();
     }
-    if ($this->computeResourcePreference !== null) {
-      if (!is_object($this->computeResourcePreference)) {
+    if ($this->gatewayComputeResourcePreference !== null) {
+      if (!is_object($this->gatewayComputeResourcePreference)) {
         throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
       }
-      $xfer += $output->writeFieldBegin('computeResourcePreference', TType::STRUCT, 4);
-      $xfer += $this->computeResourcePreference->write($output);
+      $xfer += $output->writeFieldBegin('gatewayComputeResourcePreference', TType::STRUCT, 4);
+      $xfer += $this->gatewayComputeResourcePreference->write($output);
       $xfer += $output->writeFieldEnd();
     }
     $xfer += $output->writeFieldStop();

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ExperimentModelUtil.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ExperimentModelUtil.java b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ExperimentModelUtil.java
index 07f38e4..0647a8d 100644
--- a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ExperimentModelUtil.java
+++ b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ExperimentModelUtil.java
@@ -106,6 +106,7 @@ public class ExperimentModelUtil {
                 processModel.setProcessResourceSchedule(scheduling);
                 processModel.setComputeResourceId(scheduling.getResourceHostId());
             }
+            processModel.setUseUserCRPref(configData.isUseUserCRPref());
         }
         processModel.setUserName(experiment.getUserName());
         return processModel;

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
index 66998c3..bef7bfb 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
@@ -502,11 +502,8 @@ public class GFacUtils {
         groovyMap.add(Script.GATEWAY_USER_NAME, processContext.getProcessModel().getUserName());
         groovyMap.add(Script.APPLICATION_NAME, processContext.getApplicationInterfaceDescription().getApplicationName());
 
-        ComputeResourcePreference crp = getComputeResourcePreference(processContext);
-        if (isValid(crp.getAllocationProjectNumber())) {
-            groovyMap.add(Script.ACCOUNT_STRING, crp.getAllocationProjectNumber());
-        }
-        groovyMap.add(Script.RESERVATION, getReservation(crp));
+        groovyMap.add(Script.ACCOUNT_STRING, processContext.getAllocationProjectNumber());
+        groovyMap.add(Script.RESERVATION, processContext.getReservation());
 
         // To make job name alpha numeric
         groovyMap.add(Script.JOB_NAME, "A" + String.valueOf(generateJobName()));
@@ -544,7 +541,7 @@ public class GFacUtils {
                 groovyMap.add(Script.NODES, totalNodeCount);
             }
             // qos per queue
-            String qoS = getQoS(crp.getQualityOfService(), scheduling.getQueueName());
+            String qoS = getQoS(processContext.getQualityOfService(), processContext.getQueueName());
             if (qoS != null) {
                 groovyMap.add(Script.QUALITY_OF_SERVICE, qoS);
             }
@@ -664,21 +661,6 @@ public class GFacUtils {
         }
     }
 
-    private static String getReservation(ComputeResourcePreference crp) {
-        long start = crp.getReservationStartTime();
-        long end = crp.getReservationEndTime();
-        String reservation = null;
-        if (start > 0 && start < end) {
-            long now = Calendar.getInstance().getTimeInMillis();
-            if (now > start && now < end) {
-                reservation = crp.getReservation();
-            }
-        } else {
-            reservation = crp.getReservation();
-        }
-       return reservation;
-    }
-
     private static List<String> getProcessOutputValues(List<OutputDataObjectType> processOutputs) {
         List<String> inputValues = new ArrayList<>();
         if (processOutputs != null) {
@@ -825,12 +807,11 @@ public class GFacUtils {
         }
     }
 
-    public static JobSubmissionInterface getPreferredJobSubmissionInterface(ProcessContext context) throws AppCatalogException {
+    public static JobSubmissionInterface getPreferredJobSubmissionInterface(ProcessContext processContext) throws AppCatalogException {
         try {
-            String resourceHostId = context.getComputeResourceDescription().getComputeResourceId();
-            ComputeResourcePreference resourcePreference = context.getComputeResourcePreference();
-            JobSubmissionProtocol preferredJobSubmissionProtocol = resourcePreference.getPreferredJobSubmissionProtocol();
-            ComputeResourceDescription resourceDescription = context.getAppCatalog().getComputeResource().getComputeResource(resourceHostId);
+            String resourceHostId = processContext.getComputeResourceDescription().getComputeResourceId();
+            JobSubmissionProtocol preferredJobSubmissionProtocol = processContext.getPreferredJobSubmissionProtocol();
+            ComputeResourceDescription resourceDescription = processContext.getAppCatalog().getComputeResource().getComputeResource(resourceHostId);
             List<JobSubmissionInterface> jobSubmissionInterfaces = resourceDescription.getJobSubmissionInterfaces();
             Map<JobSubmissionProtocol, List<JobSubmissionInterface>> orderedInterfaces = new HashMap<>();
             List<JobSubmissionInterface> interfaces = new ArrayList<>();
@@ -885,17 +866,6 @@ public class GFacUtils {
         }
     }
 
-    public static ComputeResourcePreference getComputeResourcePreference(ProcessContext context) throws AppCatalogException {
-        try {
-            GwyResourceProfile gatewayProfile = context.getAppCatalog().getGatewayProfile();
-            String resourceHostId = context.getComputeResourceDescription().getComputeResourceId();
-            return gatewayProfile.getComputeResourcePreference(context.getGatewayId(), resourceHostId);
-        } catch (AppCatalogException e) {
-            log.error("Error occurred while initializing app catalog", e);
-            throw new AppCatalogException("Error occurred while initializing app catalog", e);
-        }
-    }
-
     public static File createJobFile(GroovyMap groovyMap, TaskContext tc, JobManagerConfiguration jMC)
             throws GFacException{
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/context/ProcessContext.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/context/ProcessContext.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/context/ProcessContext.java
index 8079e2a..1b2fb22 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/context/ProcessContext.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/context/ProcessContext.java
@@ -34,6 +34,8 @@ import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePrefer
 import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile;
 import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference;
 import org.apache.airavata.model.appcatalog.storageresource.StorageResourceDescription;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile;
 import org.apache.airavata.model.data.movement.DataMovementProtocol;
 import org.apache.airavata.model.job.JobModel;
 import org.apache.airavata.model.process.ProcessModel;
@@ -47,6 +49,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -69,6 +72,9 @@ public class ProcessContext {
 	private String outputDir;
 	private String localWorkingDir;
 	private GatewayResourceProfile gatewayResourceProfile;
+	private ComputeResourcePreference gatewayComputeResourcePreference;
+	private UserResourceProfile userResourceProfile;
+	private UserComputeResourcePreference userComputeResourcePreference;
 	private ComputeResourceDescription computeResourceDescription;
 	private ApplicationDeploymentDescription applicationDeploymentDescription;
 	private ApplicationInterfaceDescription applicationInterfaceDescription;
@@ -80,7 +86,6 @@ public class ProcessContext {
 	private JobSubmissionProtocol jobSubmissionProtocol;
 	private DataMovementProtocol dataMovementProtocol;
 	private JobModel jobModel;
-	private ComputeResourcePreference computeResourcePreference;
     private StoragePreference storagePreference;
     private StorageResourceDescription storageResource;
 	private MonitorMode monitorMode;
@@ -98,6 +103,7 @@ public class ProcessContext {
 	private boolean acknowledge;
 	private SSHKeyAuthentication sshKeyAuthentication;
 	private boolean recoveryWithCancel = false;
+	private String usageReportingGatewayId;
 
 	/**
 	 * Note: process context property use lazy loading approach. In runtime you will see some properties as null
@@ -177,9 +183,12 @@ public class ProcessContext {
 
 	public String getScratchLocation() {
 		if (scratchLocation == null) {
-			scratchLocation = processModel.getProcessResourceSchedule().getOverrideScratchLocation();
-			if(scratchLocation == null || scratchLocation.isEmpty()){
-				scratchLocation = computeResourcePreference.getScratchLocation();
+			if (processModel.isUseUserCRPref() && isValid(userComputeResourcePreference.getScratchLocation())) {
+				scratchLocation = userComputeResourcePreference.getScratchLocation();
+			} else if (isValid(processModel.getProcessResourceSchedule().getOverrideScratchLocation())) {
+				scratchLocation = processModel.getProcessResourceSchedule().getOverrideScratchLocation();
+			}else {
+				scratchLocation = gatewayComputeResourcePreference.getScratchLocation();
 			}
 		}
 		return scratchLocation;
@@ -197,6 +206,22 @@ public class ProcessContext {
 		this.gatewayResourceProfile = gatewayResourceProfile;
 	}
 
+	public UserResourceProfile getUserResourceProfile() {
+		return userResourceProfile;
+	}
+
+	public void setUserResourceProfile(UserResourceProfile userResourceProfile) {
+		this.userResourceProfile = userResourceProfile;
+	}
+
+	private UserComputeResourcePreference getUserComputeResourcePreference() {
+		return userComputeResourcePreference;
+	}
+
+	public void setUserComputeResourcePreference(UserComputeResourcePreference userComputeResourcePreference) {
+		this.userComputeResourcePreference = userComputeResourcePreference;
+	}
+
 	public RemoteCluster getJobSubmissionRemoteCluster() {
 		return jobSubmissionRemoteCluster;
 	}
@@ -286,7 +311,7 @@ public class ProcessContext {
 
 	public JobSubmissionProtocol getJobSubmissionProtocol() {
 		if (jobSubmissionProtocol == null) {
-			jobSubmissionProtocol = computeResourcePreference.getPreferredJobSubmissionProtocol();
+			jobSubmissionProtocol = gatewayComputeResourcePreference.getPreferredJobSubmissionProtocol();
 		}
 		return jobSubmissionProtocol;
 	}
@@ -297,7 +322,7 @@ public class ProcessContext {
 
 	public DataMovementProtocol getDataMovementProtocol() {
 		if (dataMovementProtocol == null) {
-			dataMovementProtocol = computeResourcePreference.getPreferredDataMovementProtocol();
+			dataMovementProtocol = gatewayComputeResourcePreference.getPreferredDataMovementProtocol();
 		}
 		return dataMovementProtocol;
 	}
@@ -358,12 +383,12 @@ public class ProcessContext {
 		this.jobModel = jobModel;
 	}
 
-	public ComputeResourcePreference getComputeResourcePreference() {
-		return computeResourcePreference;
+	private ComputeResourcePreference getGatewayComputeResourcePreference() {
+		return gatewayComputeResourcePreference;
 	}
 
-	public void setComputeResourcePreference(ComputeResourcePreference computeResourcePreference) {
-		this.computeResourcePreference = computeResourcePreference;
+	public void setGatewayComputeResourcePreference(ComputeResourcePreference gatewayComputeResourcePreference) {
+		this.gatewayComputeResourcePreference = gatewayComputeResourcePreference;
 	}
 
 	public ProcessState getProcessState() {
@@ -391,7 +416,29 @@ public class ProcessContext {
 	}
 
 	public String getComputeResourceId() {
-		return getComputeResourceDescription().getComputeResourceId();
+		if (isUseUserCRPref()) {
+			return userComputeResourcePreference.getComputeResourceId();
+		} else {
+			return gatewayComputeResourcePreference.getComputeResourceId();
+		}
+	}
+
+	public String getCredentialToken(){
+		if (isUseUserCRPref() && isValid(userComputeResourcePreference.getResourceSpecificCredentialStoreToken())) {
+			return userComputeResourcePreference.getResourceSpecificCredentialStoreToken();
+		} else if (isValid(gatewayComputeResourcePreference.getResourceSpecificCredentialStoreToken())) {
+			return gatewayComputeResourcePreference.getResourceSpecificCredentialStoreToken();
+		} else {
+			return gatewayResourceProfile.getCredentialStoreToken();
+		}
+	}
+
+	public JobSubmissionProtocol getPreferredJobSubmissionProtocol(){
+		return gatewayComputeResourcePreference.getPreferredJobSubmissionProtocol();
+	}
+
+	public DataMovementProtocol getPreferredDataMovementProtocol() {
+		return gatewayComputeResourcePreference.getPreferredDataMovementProtocol();
 	}
 
 	public void setMonitorMode(MonitorMode monitorMode) {
@@ -529,6 +576,72 @@ public class ProcessContext {
 		this.recoveryWithCancel = recoveryWithCancel;
 	}
 
+	public boolean isUseUserCRPref() {
+		return getProcessModel().isUseUserCRPref();
+	}
 
+	public String getLoginUserName(){
+		if (isUseUserCRPref() && isValid(userComputeResourcePreference.getLoginUserName())) {
+			return userComputeResourcePreference.getLoginUserName();
+		} else if (isValid(processModel.getProcessResourceSchedule().getOverrideLoginUserName())) {
+			return processModel.getProcessResourceSchedule().getOverrideLoginUserName();
+		} else {
+			return gatewayComputeResourcePreference.getLoginUserName();
+		}
+	}
+
+	private boolean isValid(String str) {
+		return str != null && !str.trim().isEmpty();
+	}
+
+	public String getUsageReportingGatewayId() {
+		return gatewayComputeResourcePreference.getUsageReportingGatewayId();
+	}
+
+	public String getAllocationProjectNumber() {
+		return gatewayComputeResourcePreference.getAllocationProjectNumber();
+	}
+
+	public String getReservation() {
+		long start, end ;
+		String reservation = null;
+		if (isUseUserCRPref() && isValid(userComputeResourcePreference.getReservation())) {
+			reservation = userComputeResourcePreference.getReservation();
+			start = userComputeResourcePreference.getReservationStartTime();
+			end = userComputeResourcePreference.getReservationEndTime();
+		}else {
+			reservation = gatewayComputeResourcePreference.getReservation();
+			start = gatewayComputeResourcePreference.getReservationStartTime();
+			end = gatewayComputeResourcePreference.getReservationEndTime();
+		}
+		if (start > 0 && start < end) {
+			long now = Calendar.getInstance().getTimeInMillis();
+			if (now > start && now < end) {
+				return reservation;
+			}
+		} else {
+			return reservation;
+		}
+		return reservation;
+	}
+
+	public String getQualityOfService() {
+		if (isUseUserCRPref() && isValid(userComputeResourcePreference.getQualityOfService())) {
+			return userComputeResourcePreference.getQualityOfService();
+		} else {
+			return gatewayComputeResourcePreference.getQualityOfService();
+		}
+	}
+
+
+	public String getQueueName() {
+		if (isUseUserCRPref() && isValid(userComputeResourcePreference.getPreferredBatchQueue())) {
+			return userComputeResourcePreference.getPreferredBatchQueue();
+		} else if (isValid(processModel.getProcessResourceSchedule().getQueueName())) {
+			return processModel.getProcessResourceSchedule().getQueueName();
+		} else {
+			return gatewayComputeResourcePreference.getPreferredBatchQueue();
+		}
+	}
 }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
index 5e8de6d..ac40c80 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
@@ -262,7 +262,7 @@ public abstract class Factory {
             AuthenticationInfo authentication = remoteCluster.getAuthentication();
             if (authentication instanceof SSHKeyAuthentication){
                 SSHKeyAuthentication sshKeyAuthentication = (SSHKeyAuthentication)authentication;
-                if (!sshKeyAuthentication.getUserName().equals(getLoginUserName(processContext))){
+                if (!sshKeyAuthentication.getUserName().equals(processContext.getLoginUserName())){
                     JobManagerConfiguration jobManagerConfiguration =
 							getJobManagerConfiguration(processContext.getResourceJobManager());
                     if (jobSubmissionProtocol == JobSubmissionProtocol.SSH ||
@@ -301,7 +301,7 @@ public abstract class Factory {
             AuthenticationInfo authentication = remoteCluster.getAuthentication();
             if (authentication instanceof SSHKeyAuthentication){
                 SSHKeyAuthentication sshKeyAuthentication = (SSHKeyAuthentication)authentication;
-                if (!sshKeyAuthentication.getUserName().equals(getLoginUserName(processContext))){
+                if (!sshKeyAuthentication.getUserName().equals(processContext.getLoginUserName())){
                     JobManagerConfiguration jobManagerConfiguration =
 							getJobManagerConfiguration(processContext.getResourceJobManager());
                     dataMovementProtocol = processContext.getDataMovementProtocol();
@@ -318,13 +318,7 @@ public abstract class Factory {
 
 	public static SSHKeyAuthentication getComputerResourceSSHKeyAuthentication(ProcessContext pc) throws GFacException {
         try {
-            ComputeResourcePreference computeResourcePreference = pc.getComputeResourcePreference();
-            String loginUserName = getLoginUserName(pc);
-            String credentialStoreToken = computeResourcePreference.getResourceSpecificCredentialStoreToken();
-            if (credentialStoreToken == null || credentialStoreToken.isEmpty()) {
-                credentialStoreToken = pc.getGatewayResourceProfile().getCredentialStoreToken();
-            }
-            return getSshKeyAuthentication(pc.getGatewayId(),loginUserName, credentialStoreToken);
+            return getSshKeyAuthentication(pc.getGatewayId(),pc.getLoginUserName(), pc.getCredentialToken());
         } catch (ApplicationSettingsException | IllegalAccessException | InstantiationException | CredentialStoreException e) {
             throw new GFacException("Couldn't build ssh authentication object", e);
         }
@@ -344,40 +338,6 @@ public abstract class Factory {
         }
     }
 
-    public static String  getLoginUserName(ProcessContext processContext) throws GFacException {
-        try {
-            ProcessModel processModel = processContext.getProcessModel();
-            String loginUserName = null;
-            String overrideLoginUserName = processModel.getProcessResourceSchedule().getOverrideLoginUserName();
-            if (overrideLoginUserName != null && !overrideLoginUserName.equals("")) {
-                loginUserName = overrideLoginUserName;
-            } else {
-                loginUserName = processContext.getComputeResourcePreference().getLoginUserName();
-            }
-
-            return loginUserName;
-        }  catch (Exception e) {
-            throw new GFacException("Couldn't fetch loginUserName", e);
-        }
-    }
-
-    public static String  getScratchLocation(ProcessContext processContext) throws GFacException {
-        try {
-            ProcessModel processModel = processContext.getProcessModel();
-            String scratchLocation = null;
-            String overrideScratchLocation = processModel.getProcessResourceSchedule().getOverrideScratchLocation();
-            if (overrideScratchLocation != null && !overrideScratchLocation.equals("")) {
-                scratchLocation = overrideScratchLocation;
-            } else {
-                scratchLocation = processContext.getComputeResourcePreference().getScratchLocation();
-            }
-
-            return scratchLocation;
-        }  catch (Exception e) {
-            throw new GFacException("Couldn't fetch scratchLocation", e);
-        }
-    }
-
     private static SSHKeyAuthentication getSshKeyAuthentication(String gatewayId,
                                                                 String loginUserName,
                                                                 String credentialStoreToken)

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
index 71750b3..d94580c 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
@@ -45,6 +45,8 @@ import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePrefer
 import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile;
 import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference;
 import org.apache.airavata.model.appcatalog.storageresource.StorageResourceDescription;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile;
 import org.apache.airavata.model.application.io.DataType;
 import org.apache.airavata.model.application.io.InputDataObjectType;
 import org.apache.airavata.model.application.io.OutputDataObjectType;
@@ -101,15 +103,17 @@ public class GFacEngineImpl implements GFacEngine {
                         processContext.getExperimentId(), processContext.getProcessId());
             }
 
-            GatewayResourceProfile gatewayProfile = appCatalog.getGatewayProfile().getGatewayProfile(gatewayId);
-            processContext.setGatewayResourceProfile(gatewayProfile);
-            ComputeResourcePreference computeResourcePreference = appCatalog.getGatewayProfile().getComputeResourcePreference
-                    (gatewayId, processModel.getComputeResourceId());
+            setGatewayResourceProfile(gatewayId, processContext);
+            setGatewayComputeResourcePreference(gatewayId, processContext);
+            if (processModel.isUseUserCRPref()) {
+                setUserResourceProfile(gatewayId, processContext);
+                setUserComputeResourcePreference(gatewayId, processContext);
+            }
             //FIXME: Temporary revert, this needs a proper fix.
 //            String scratchLocation = Factory.getScratchLocation(processContext);
-            String scratchLocation = computeResourcePreference.getScratchLocation();
+
+            String scratchLocation = processContext.getScratchLocation();
             scratchLocation = scratchLocation + File.separator + processId + File.separator;
-            processContext.setComputeResourcePreference(computeResourcePreference);
             StoragePreference storagePreference = appCatalog.getGatewayProfile().getStoragePreference(gatewayId, processModel.getStorageResourceId());
             StorageResourceDescription storageResource = appCatalog.getStorageResource().getStorageResource(processModel.getStorageResourceId());
             if (storageResource != null){
@@ -138,7 +142,7 @@ public class GFacEngineImpl implements GFacEngine {
                 processContext.setStorageResource(storageResource);
             }*/
             processContext.setComputeResourceDescription(appCatalog.getComputeResource().getComputeResource
-                    (processContext.getComputeResourcePreference().getComputeResourceId()));
+                    (processContext.getComputeResourceId()));
             processContext.setApplicationDeploymentDescription(appCatalog.getApplicationDeployment()
                     .getApplicationDeployement(processModel.getApplicationDeploymentId()));
             ApplicationInterfaceDescription applicationInterface = appCatalog.getApplicationInterface()
@@ -146,7 +150,7 @@ public class GFacEngineImpl implements GFacEngine {
             processContext.setApplicationInterfaceDescription(applicationInterface);
             String computeResourceId = processContext.getComputeResourceDescription().getComputeResourceId();
             String hostName = Factory.getDefaultAppCatalog().getComputeResource().getComputeResource(computeResourceId).getHostName();
-            ServerInfo serverInfo = new ServerInfo(Factory.getLoginUserName(processContext), hostName);
+            ServerInfo serverInfo = new ServerInfo(processContext.getLoginUserName(), hostName);
             processContext.setServerInfo(serverInfo);
             List<OutputDataObjectType> applicationOutputs = applicationInterface.getApplicationOutputs();
             if (applicationOutputs != null && !applicationOutputs.isEmpty()) {
@@ -220,6 +224,42 @@ public class GFacEngineImpl implements GFacEngine {
 
     }
 
+    private void setGatewayComputeResourcePreference(String gatewayId, ProcessContext processContext) throws AppCatalogException {
+        AppCatalog appCatalog = processContext.getAppCatalog();
+        ProcessModel processModel = processContext.getProcessModel();
+        ComputeResourcePreference computeResourcePreference =
+                appCatalog.getGatewayProfile().getComputeResourcePreference(gatewayId, processModel.getComputeResourceId());
+        processContext.setGatewayComputeResourcePreference(computeResourcePreference);
+    }
+
+    private void setGatewayResourceProfile(String gatewayId, ProcessContext processContext) throws AppCatalogException {
+        AppCatalog appCatalog = processContext.getAppCatalog();
+        GatewayResourceProfile gatewayProfile = appCatalog.getGatewayProfile().getGatewayProfile(gatewayId);
+        processContext.setGatewayResourceProfile(gatewayProfile);
+    }
+
+    private void setUserResourceProfile(String gatewayId, ProcessContext processContext) throws AppCatalogException {
+        AppCatalog appCatalog = processContext.getAppCatalog();
+        ProcessModel processModel = processContext.getProcessModel();
+
+        UserResourceProfile userResourceProfile =
+                appCatalog.getUserResourceProfile()
+                        .getUserResourceProfile(processModel.getUserName(), gatewayId);
+
+        processContext.setUserResourceProfile(userResourceProfile);
+    }
+
+    private void setUserComputeResourcePreference(String gatewayId, ProcessContext processContext) throws AppCatalogException {
+        AppCatalog appCatalog = processContext.getAppCatalog();
+        ProcessModel processModel = processContext.getProcessModel();
+        UserComputeResourcePreference userComputeResourcePreference =
+                appCatalog.getUserResourceProfile().getUserComputeResourcePreference(
+                        processModel.getUserName(),
+                        gatewayId,
+                        processModel.getComputeResourceId());
+        processContext.setUserComputeResourcePreference(userComputeResourcePreference);
+    }
+
     private void checkRecoveryWithCancel(ProcessContext processContext) throws Exception {
         CuratorFramework curatorClient = processContext.getCuratorClient();
         String experimentId = processContext.getExperimentId();
@@ -364,7 +404,7 @@ public class GFacEngineImpl implements GFacEngine {
                                         submodel.setType(DataStageType.OUPUT);
                                         submodel.setProcessOutput(output);
                                         URI source = new URI(processContext.getDataMovementProtocol().name(),
-                                                Factory.getLoginUserName(processContext),
+                                                processContext.getLoginUserName(),
                                                 processContext.getComputeResourceDescription().getHostName(),
                                                 22,
                                                 processContext.getWorkingDir() + output.getValue(), null, null);

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
index 657de00..97956bd 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/DefaultJobSubmissionTask.java
@@ -168,7 +168,7 @@ public class DefaultJobSubmissionTask implements JobSubmissionTask {
                         String loadCommand = computeResourceDescription.getGatewayUsageModuleLoadCommand();
                         String usageExecutable = computeResourceDescription.getGatewayUsageExecutable();
                         ExperimentModel experiment = (ExperimentModel)taskContext.getParentProcessContext().getExperimentCatalog().get(ExperimentCatalogModelType.EXPERIMENT, experimentId);
-                        String username = experiment.getUserName() + "@" + taskContext.getParentProcessContext().getComputeResourcePreference().getUsageReportingGatewayId();
+                        String username = experiment.getUserName() + "@" + taskContext.getParentProcessContext().getUsageReportingGatewayId();
                         RawCommandInfo rawCommandInfo = new RawCommandInfo(loadCommand + " && " + usageExecutable + " -gateway_user " +  username  +
                                                                            " -submit_time \"`date '+%F %T %:z'`\"  -jobid " + jobId );
                         remoteCluster.execute(rawCommandInfo);

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/utils/bes/JSDLGenerator.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/utils/bes/JSDLGenerator.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/utils/bes/JSDLGenerator.java
index 3403240..d30f383 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/utils/bes/JSDLGenerator.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/utils/bes/JSDLGenerator.java
@@ -101,8 +101,8 @@ public class JSDLGenerator implements BESConstants {
 	private static void createJobIdentification(JobDefinitionType value, ProcessContext context) {
 
 		if (context != null) {
-			if (context.getComputeResourcePreference() != null && context.getComputeResourcePreference().getAllocationProjectNumber() != null)
-				JSDLUtils.addProjectName(value, context.getComputeResourcePreference().getAllocationProjectNumber());
+			if (context.getAllocationProjectNumber() != null)
+				JSDLUtils.addProjectName(value, context.getAllocationProjectNumber());
 			
 			if (context.getApplicationInterfaceDescription() != null && context.getApplicationInterfaceDescription().getApplicationDescription() != null)
 				JSDLUtils.getOrCreateJobIdentification(value).setDescription(context.getApplicationInterfaceDescription().getApplicationDescription());
@@ -112,4 +112,5 @@ public class JSDLGenerator implements BESConstants {
 		}
 	}
 
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
index 5599a4b..9b8ab09 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
@@ -284,6 +284,7 @@ public class ExperimentRegistry {
             processResource.setGenerateCert(process.isGenerateCert());
             processResource.setExperimentDataDir(process.getExperimentDataDir());
             processResource.setUserName(process.getUserName());
+            processResource.setUseUserCRPref(process.isUseUserCRPref());
             if(process.isEnableEmailNotification()){
                 processResource.setEnableEmailNotification(true);
                 if(process.getEmailAddresses() != null){
@@ -750,6 +751,7 @@ public class ExperimentRegistry {
             processResource.setGenerateCert(process.isGenerateCert());
             processResource.setExperimentDataDir(process.getExperimentDataDir());
             processResource.setUserName(process.getUserName());
+            processResource.setUseUserCRPref(process.isUseUserCRPref());
             if(process.isEnableEmailNotification()){
                 processResource.setEnableEmailNotification(true);
                 if(process.getEmailAddresses() != null){
@@ -1074,7 +1076,7 @@ public class ExperimentRegistry {
             ExperimentResource experimentResource = new ExperimentResource();
             ProcessResource resource = experimentResource.getProcess(processId);
             if (fieldName == null) {
-                return ThriftDataModelConversion.getProcesModel(resource);
+                return ThriftDataModelConversion.getProcessModel(resource);
             } else if (fieldName.equals(Constants.FieldConstants.ProcessConstants.PROCESS_ERROR)) {
                 return ThriftDataModelConversion.getErrorModel(resource.getProcessError());
             } else if (fieldName.equals(Constants.FieldConstants.ProcessConstants.PROCESS_STATUS)) {
@@ -1214,7 +1216,7 @@ public class ExperimentRegistry {
                 experimentResource.setExperimentId((String) value);
                 List<ProcessResource> resources = experimentResource.getProcessList();
                 for (ProcessResource processResource : resources) {
-                    ProcessModel processModel = ThriftDataModelConversion.getProcesModel(processResource);
+                    ProcessModel processModel = ThriftDataModelConversion.getProcessModel(processResource);
                     processes.add(processModel);
                 }
                 return processes;

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
index 3ea2150..80528ef 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
@@ -55,6 +55,7 @@ public class Process {
     private Collection<Task> tasks;
     private String userDn;
     private boolean generateCert;
+    private boolean useUserCRPref;
 
     @Id
     @Column(name = "PROCESS_ID")
@@ -311,4 +312,13 @@ public class Process {
     public void setTasks(Collection<Task> taskByProcessId) {
         this.tasks = taskByProcessId;
     }
+
+    @Column(name = "USE_USER_CR_PREF")
+    public boolean isUseUserCRPref() {
+        return useUserCRPref;
+    }
+
+    public void setUseUserCRPref(boolean useUserCRPref) {
+        this.useUserCRPref = useUserCRPref;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java
index c0c974d..aa16460 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java
@@ -57,6 +57,7 @@ public class ProcessResource extends AbstractExpCatResource {
     private String userName;
     private boolean generateCert;
     private String experimentDataDir;
+    private boolean useUserCRPref;
 
     public String getProcessId() {
         return processId;
@@ -194,6 +195,14 @@ public class ProcessResource extends AbstractExpCatResource {
         this.userName = userName;
     }
 
+    public boolean isUseUserCRPref() {
+        return useUserCRPref;
+    }
+
+    public void setUseUserCRPref(boolean useUserCRPref) {
+        this.useUserCRPref = useUserCRPref;
+    }
+
     public ExperimentCatResource create(ResourceType type) throws RegistryException{
        switch (type){
            case PROCESS_ERROR:
@@ -600,6 +609,8 @@ public class ProcessResource extends AbstractExpCatResource {
             process.setGenerateCert(generateCert);
             process.setExperimentDataDir(experimentDataDir);
             process.setUserName(userName);
+            process.setUseUserCRPref(useUserCRPref);
+
             if (existingProcess == null){
                 em.persist(process);
             }else {

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
index 2c36442..2f5ff99 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
@@ -582,6 +582,7 @@ public class Utils {
             processResource.setGenerateCert(o.getGenerateCert());
             processResource.setExperimentDataDir(o.getExperimentDataDir());
             processResource.setUserName(o.getUserName());
+            processResource.setUseUserCRPref(o.isUseUserCRPref());
         }
         return processResource;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/3660cd8f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
index a498de5..f84b3d8 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java
@@ -359,7 +359,7 @@ public class ThriftDataModelConversion {
         return null;
     }
 
-    public static ProcessModel getProcesModel (ProcessResource processResource) throws RegistryException {
+    public static ProcessModel getProcessModel(ProcessResource processResource) throws RegistryException {
         if (processResource != null){
             ProcessModel processModel = new ProcessModel();
             processModel.setProcessId(processResource.getProcessId());
@@ -374,6 +374,7 @@ public class ThriftDataModelConversion {
             processModel.setComputeResourceId(processResource.getComputeResourceId());
             processModel.setEnableEmailNotification(processResource.getEnableEmailNotification());
             processModel.setExperimentDataDir(processResource.getExperimentDataDir());
+            processModel.setUseUserCRPref(processResource.isUseUserCRPref());
             if (processModel.isEnableEmailNotification()){
                 String notificationEmails = processResource.getEmailAddresses();
                 processModel.setEmailAddresses(getEmailAddresses(notificationEmails.split(",")));