You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/05/14 19:51:39 UTC

[1/2] change cloneExperiment method to have previousExpID and updated experiment - AIRAVATA-1207, fix issues in appcatalog thrift files

Repository: airavata
Updated Branches:
  refs/heads/master d76c9d57f -> 22d0a6f49


http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/thrift-interface-descriptions/applicationCatalogAPI.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/applicationCatalogAPI.thrift b/airavata-api/thrift-interface-descriptions/applicationCatalogAPI.thrift
index 9dd08be..9c2fb5c 100644
--- a/airavata-api/thrift-interface-descriptions/applicationCatalogAPI.thrift
+++ b/airavata-api/thrift-interface-descriptions/applicationCatalogAPI.thrift
@@ -26,7 +26,8 @@
 
 include "airavataErrors.thrift"
 include "airavataDataModel.thrift"
-include "computeResourceDescrption.thrift"
+include "applicationCatalogDataModel.thrift"
+include "computeResourceDescription.thrift"
 
 namespace java org.apache.airavata.api.appcatalog
 namespace php Airavata.API.AppCatalog
@@ -62,57 +63,59 @@ service ApplicationCatalogAPI {
   /**
    * Manage Computer Resources
   */
-  void addComputerResourceDescription(1: ComputeResourceDescription computeResourceDescription)
+  void addComputerResourceDescription(1: computeResourceDescription.ComputeResourceDescription computeResourceDescription)
     throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  void addJobSubmissionProtocol(1: string computeResourceId, 2: SSHJobSubmission jobSubmission)
+  void addJobSubmissionProtocol(1: string computeResourceId, 2: computeResourceDescription.SSHJobSubmission jobSubmission)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  void addJobSubmissionProtocol(1: string computeResourceId, 2: GSISSHJobSubmission jobSubmission)
-  	throws (1: airavataErrors.InvalidRequestException ire,
-            2: airavataErrors.AiravataClientException ace,
-            3: airavataErrors.AiravataSystemException ase)
-            
-  void addJobSubmissionProtocol(1: string computeResourceId, 2: GlobusJobSubmission jobSubmission)
-  	throws (1: airavataErrors.InvalidRequestException ire,
-            2: airavataErrors.AiravataClientException ace,
-            3: airavataErrors.AiravataSystemException ase)     
-            
-  void addDataMovementProtocol(1: string computeResourceId, 2: SCPDataMovement dataMovement)
-  	throws (1: airavataErrors.InvalidRequestException ire,
-            2: airavataErrors.AiravataClientException ace,
-            3: airavataErrors.AiravataSystemException ase) 
-            
+  /**
+  *void addJobSubmissionProtocol(1: string computeResourceId, 2: computeResourceDescrption.GSISSHJobSubmission jobSubmission)
+  *	throws (1: airavataErrors.InvalidRequestException ire,
+  *          2: airavataErrors.AiravataClientException ace,
+  *          3: airavataErrors.AiravataSystemException ase)
+  *
+  *void addJobSubmissionProtocol(1: string computeResourceId, 2: computeResourceDescrption.GlobusJobSubmission jobSubmission)
+  *	throws (1: airavataErrors.InvalidRequestException ire,
+  *          2: airavataErrors.AiravataClientException ace,
+  *          3: airavataErrors.AiravataSystemException ase)
+  *
+  *void addDataMovementProtocol(1: string computeResourceId, 2: computeResourceDescrption.SCPDataMovement dataMovement)
+  *	throws (1: airavataErrors.InvalidRequestException ire,
+  *          2: airavataErrors.AiravataClientException ace,
+  *          3: airavataErrors.AiravataSystemException ase)
+  */
+
   list<string> listComputeResourceDescriptions()
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
 
-  ComputeResourceDescription getComputeResourceDescription(1: string computeResourceId)
+  computeResourceDescription.ComputeResourceDescription getComputeResourceDescription(1: string computeResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
 
-  SSHJobSubmission getSSHJobSubmissionProtocol(1: string sshJobSubmissionProtocolResourceId)
+  computeResourceDescription.SSHJobSubmission getSSHJobSubmissionProtocol(1: string sshJobSubmissionProtocolResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  GSISSHJobSubmission getGSISSHJobSubmissionProtocol(1: string gsisshJobSubmissionProtocolResourceId)
+  computeResourceDescription.GSISSHJobSubmission getGSISSHJobSubmissionProtocol(1: string gsisshJobSubmissionProtocolResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  GlobusJobSubmission getGlobusJobSubmissionProtocol(1: string globusJobSubmissionProtocolResourceId)
+  computeResourceDescription.GlobusJobSubmission getGlobusJobSubmissionProtocol(1: string globusJobSubmissionProtocolResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)     
             
-  SCPDataMovement getSCPDataMovementProtocol(1: string scpDataMovementResourceId)
+  computeResourceDescription.SCPDataMovement getSCPDataMovementProtocol(1: string scpDataMovementResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase) 
@@ -122,7 +125,7 @@ service ApplicationCatalogAPI {
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
 
-  ComputeResourceDescription getComputeResourceDescriptionFromHostName(1: string hostName)
+  computeResourceDescription.ComputeResourceDescription getComputeResourceDescriptionFromHostName(1: string hostName)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
@@ -130,7 +133,7 @@ service ApplicationCatalogAPI {
   /**
    * Manage Application Interfaces
   */
-  void addApplicationInterface(1: ApplicationInterface applicationInterface)
+  void addApplicationInterface(1: applicationCatalogDataModel.ApplicationInterface applicationInterface)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
@@ -140,7 +143,7 @@ service ApplicationCatalogAPI {
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  
 
-  ApplicationInterface getApplicationInterface(1: string applicationInterfaceId)
+  applicationCatalogDataModel.ApplicationInterface getApplicationInterface(1: string applicationInterfaceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  
@@ -148,7 +151,7 @@ service ApplicationCatalogAPI {
   /**
    * Manage application deployments
   */
-  void addApplicationDeployment(1: string applicationInterfaceId, 2: ApplicationDeployment applicationDeployment)
+  void addApplicationDeployment(1: string applicationInterfaceId, 2: applicationCatalogDataModel.ApplicationDeployment applicationDeployment)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)   
@@ -158,7 +161,7 @@ service ApplicationCatalogAPI {
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  
 
-  ApplicationDeployment getApplicationDeployment(1: string applicationDeploymentId)
+  applicationCatalogDataModel.ApplicationDeployment getApplicationDeployment(1: string applicationDeploymentId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/thrift-interface-descriptions/applicationCatalogDataModel.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/applicationCatalogDataModel.thrift b/airavata-api/thrift-interface-descriptions/applicationCatalogDataModel.thrift
index 65314f0..a1921d2 100644
--- a/airavata-api/thrift-interface-descriptions/applicationCatalogDataModel.thrift
+++ b/airavata-api/thrift-interface-descriptions/applicationCatalogDataModel.thrift
@@ -192,12 +192,12 @@ struct ComputeResourceDescription {
     2: required string resourceId = DEFAULT_ID,
     3: required string hostName,
     4: optional set<string> hostAliases,
-    4: optional set<string> ipAddresses,
-    5: optional string resourceDescription,
-    6: optional string scratchLocation,
-    7: optional string preferredJobSubmissionProtocol,
-    8: required map<string, JobSubmissionProtocol> jobSubmissionProtocols,
-    9: required map<string, DataMovementProtocol> dataMovementProtocols
+    5: optional set<string> ipAddresses,
+    6: optional string resourceDescription,
+    7: optional string scratchLocation,
+    8: optional string preferredJobSubmissionProtocol,
+    9: required map<string, JobSubmissionProtocol> jobSubmissionProtocols,
+    10: required map<string, DataMovementProtocol> dataMovementProtocols
 }
 
 /**

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/thrift-interface-descriptions/computeResourceDescription.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/computeResourceDescription.thrift b/airavata-api/thrift-interface-descriptions/computeResourceDescription.thrift
index c025f12..4707c5f 100644
--- a/airavata-api/thrift-interface-descriptions/computeResourceDescription.thrift
+++ b/airavata-api/thrift-interface-descriptions/computeResourceDescription.thrift
@@ -192,12 +192,12 @@ struct ComputeResourceDescription {
     2: required string resourceId = DEFAULT_ID,
     3: required string hostName,
     4: optional set<string> hostAliases,
-    4: optional set<string> ipAddresses,
-    5: optional string resourceDescription,
-    6: optional string scratchLocation,
-    7: optional string preferredJobSubmissionProtocol,
-    8: required map<string, JobSubmissionProtocol> jobSubmissionProtocols,
-    9: required map<string, DataMovementProtocol> dataMovementProtocols
+    5: optional set<string> ipAddresses,
+    6: optional string resourceDescription,
+    7: optional string scratchLocation,
+    8: optional string preferredJobSubmissionProtocol,
+    9: required map<string, JobSubmissionProtocol> jobSubmissionProtocols,
+    10: required map<string, DataMovementProtocol> dataMovementProtocols
 }
 
 /*
@@ -225,9 +225,9 @@ struct Validation{
 struct InputParameter {
 	1:required string name,
 	2:required ParameterType type,
-	3:required bool optional=0,
+	3:required bool isOptional=0,
 	4:optional string defaultValue,
-	5:optional list<Validation> validations,
+	5:optional list<Validation> validations
 }
 
 struct OutputParameter {
@@ -246,6 +246,6 @@ struct Application {
     1: required bool isEmpty = 0,
     2: required string applicationId = DEFAULT_ID,
     4: optional list<InputParameter> input,
-    5: optional list<OutputParameter> input,
+    5: optional list<OutputParameter> output,
 	6: required list<ApplicationDeployment> deployment 
 }
\ No newline at end of file


[2/2] git commit: change cloneExperiment method to have previousExpID and updated experiment - AIRAVATA-1207, fix issues in appcatalog thrift files

Posted by ch...@apache.org.
change cloneExperiment method to have previousExpID and updated experiment - AIRAVATA-1207, fix issues in appcatalog thrift files


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

Branch: refs/heads/master
Commit: 22d0a6f49547a9143dc7ae68b8ffff4d8e18786f
Parents: d76c9d5
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Wed May 14 13:51:34 2014 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
Committed: Wed May 14 13:51:34 2014 -0400

----------------------------------------------------------------------
 .../server/handler/AiravataServerHandler.java   |  64 ++++--
 .../java/org/apache/airavata/api/Airavata.java  | 139 +++++------
 .../api/error/ExperimentNotFoundException.java  | 229 +++++--------------
 .../src/main/resources/lib/Airavata.cpp         |  22 +-
 .../src/main/resources/lib/Airavata.h           |  30 +--
 .../resources/lib/Airavata_server.skeleton.cpp  |   2 +-
 .../main/resources/lib/airavataErrors_types.cpp |  37 +--
 .../main/resources/lib/airavataErrors_types.h   |  34 +--
 .../resources/lib/Airavata/API/Airavata.php     |  26 +--
 .../resources/lib/Airavata/API/Error/Types.php  |  36 +--
 .../airavataAPI.thrift                          |  11 +-
 .../airavataErrors.thrift                       |   7 +-
 .../applicationCatalog.thrift                   |  46 ++--
 .../applicationCatalogAPI.thrift                |  59 ++---
 .../applicationCatalogDataModel.thrift          |  12 +-
 .../computeResourceDescription.thrift           |  18 +-
 16 files changed, 322 insertions(+), 450 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index 00b0241..0fb3e29 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -472,34 +472,56 @@ public class AiravataServerHandler implements Airavata.Iface {
 
     /**
      * Clone an specified experiment with a new name. A copy of the experiment configuration is made and is persisted with new metadata.
-     * The client has to subsequently update this configuration if needed and launch the cloned experiment.
+     *   The client has to subsequently update this configuration if needed and launch the cloned experiment.
+     *
+     * @param existingExperimentID
+     *    This is the experiment identifier that already exists in the system. Will use this experimentID to retrieve
+     *    user configuration which is used with the clone experiment.
      *
-     * @param airavataExperimentIdToBeCloned This is the experiment identifier that is to be cloned.
      * @param updatedExperiment
-     * @return The server-side generated airavata experiment globally unique identifier for the newly cloned experiment.
-     * @throws org.apache.airavata.api.error.InvalidRequestException     For any incorrect forming of the request itself.
-     * @throws org.apache.airavata.api.error.ExperimentNotFoundException If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
-     * @throws org.apache.airavata.api.error.AiravataClientException     The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
-     *                                                                   <p/>
-     *                                                                   UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
-     *                                                                   step, then Airavata Registry will not have a provenance area setup. The client has to follow
-     *                                                                   gateway registration steps and retry this request.
-     *                                                                   <p/>
-     *                                                                   AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
-     *                                                                   For now this is a place holder.
-     *                                                                   <p/>
-     *                                                                   INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
-     *                                                                   is implemented, the authorization will be more substantial.
-     * @throws org.apache.airavata.api.error.AiravataSystemException     This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
-     *                                                                   rather an Airavata Administrator will be notified to take corrective action.
+     *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
+     *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
+     *      should be shared public by default.
+     *
+     * @return
+     *   The server-side generated airavata experiment globally unique identifier for the newly cloned experiment.
+     *
+     * @throws org.apache.airavata.api.error.InvalidRequestException
+     *    For any incorrect forming of the request itself.
+     *
+     * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+     *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+     *
+     * @throws org.apache.airavata.api.error.AiravataClientException
+     *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+     *
+     *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+     *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+     *         gateway registration steps and retry this request.
+     *
+     *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+     *         For now this is a place holder.
+     *
+     *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+     *         is implemented, the authorization will be more substantial.
+     *
+     * @throws org.apache.airavata.api.error.AiravataSystemException
+     *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+     *       rather an Airavata Administrator will be notified to take corrective action.
+     *
+     *
+     * @param existingExperimentID
+     * @param updatedExperiment
      */
     @Override
-    public String cloneExperiment(String airavataExperimentIdToBeCloned, Experiment updatedExperiment) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException {
+    public String cloneExperiment(String existingExperimentID, Experiment updatedExperiment) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException {
         try {
             registry = RegistryFactory.getDefaultRegistry();
-            UserConfigurationData previousConfiguration = (UserConfigurationData)registry.get(RegistryModelType.EXPERIMENT_CONFIGURATION_DATA, updatedExperiment.getExperimentID());
+            if (!registry.isExist(RegistryModelType.EXPERIMENT, existingExperimentID)){
+                throw new ExperimentNotFoundException("Requested experiment id " + existingExperimentID + " does not exist in the system..");
+            }
+            UserConfigurationData previousConfiguration = (UserConfigurationData)registry.get(RegistryModelType.EXPERIMENT_CONFIGURATION_DATA, existingExperimentID);
             updatedExperiment.setUserConfigurationData(previousConfiguration);
-            updatedExperiment.setName(airavataExperimentIdToBeCloned);
             return (String)registry.add(ParentDataType.EXPERIMENT, updatedExperiment);
         } catch (Exception e) {
             logger.error("Error while cloning the experiment with existing configuration...", e);

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
index d1ed747..f8c9b49 100644
--- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
@@ -300,10 +300,11 @@ import org.slf4j.LoggerFactory;
      * Clone an specified experiment with a new name. A copy of the experiment configuration is made and is persisted with new metadata.
      *   The client has to subsequently update this configuration if needed and launch the cloned experiment.
      * 
-     * @param airavataExperimentIdToBeCloned
-     *    This is the experiment identifier that is to be cloned.
+     * @param existingExperimentID
+     *    This is the experiment identifier that already exists in the system. Will use this experimentID to retrieve
+     *    user configuration which is used with the clone experiment.
      * 
-     * @param basicExperimentMetadata
+     * @param updatedExperiment
      *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
      *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
      *      should be shared public by default.
@@ -335,10 +336,10 @@ import org.slf4j.LoggerFactory;
      *       rather an Airavata Administrator will be notified to take corrective action.
      * 
      * 
-     * @param airavataExperimentIdToBeCloned
+     * @param existingExperimentID
      * @param updatedExperiment
      */
-    public String cloneExperiment(String airavataExperimentIdToBeCloned, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException;
+    public String cloneExperiment(String existingExperimentID, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException;
 
     /**
      * Terminate a running experiment.
@@ -415,7 +416,7 @@ import org.slf4j.LoggerFactory;
 
     public void getJobStatuses(String airavataExperimentId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void cloneExperiment(String airavataExperimentIdToBeCloned, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void cloneExperiment(String existingExperimentID, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void terminateExperiment(String airavataExperimentId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
@@ -943,16 +944,16 @@ import org.slf4j.LoggerFactory;
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getJobStatuses failed: unknown result");
     }
 
-    public String cloneExperiment(String airavataExperimentIdToBeCloned, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
+    public String cloneExperiment(String existingExperimentID, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment) throws org.apache.airavata.api.error.InvalidRequestException, org.apache.airavata.api.error.ExperimentNotFoundException, org.apache.airavata.api.error.AiravataClientException, org.apache.airavata.api.error.AiravataSystemException, org.apache.thrift.TException
     {
-      send_cloneExperiment(airavataExperimentIdToBeCloned, updatedExperiment);
+      send_cloneExperiment(existingExperimentID, updatedExperiment);
       return recv_cloneExperiment();
     }
 
-    public void send_cloneExperiment(String airavataExperimentIdToBeCloned, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment) throws org.apache.thrift.TException
+    public void send_cloneExperiment(String existingExperimentID, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment) throws org.apache.thrift.TException
     {
       cloneExperiment_args args = new cloneExperiment_args();
-      args.setAiravataExperimentIdToBeCloned(airavataExperimentIdToBeCloned);
+      args.setExistingExperimentID(existingExperimentID);
       args.setUpdatedExperiment(updatedExperiment);
       sendBase("cloneExperiment", args);
     }
@@ -1582,26 +1583,26 @@ import org.slf4j.LoggerFactory;
       }
     }
 
-    public void cloneExperiment(String airavataExperimentIdToBeCloned, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void cloneExperiment(String existingExperimentID, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      cloneExperiment_call method_call = new cloneExperiment_call(airavataExperimentIdToBeCloned, updatedExperiment, resultHandler, this, ___protocolFactory, ___transport);
+      cloneExperiment_call method_call = new cloneExperiment_call(existingExperimentID, updatedExperiment, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class cloneExperiment_call extends org.apache.thrift.async.TAsyncMethodCall {
-      private String airavataExperimentIdToBeCloned;
+      private String existingExperimentID;
       private org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment;
-      public cloneExperiment_call(String airavataExperimentIdToBeCloned, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public cloneExperiment_call(String existingExperimentID, org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
-        this.airavataExperimentIdToBeCloned = airavataExperimentIdToBeCloned;
+        this.existingExperimentID = existingExperimentID;
         this.updatedExperiment = updatedExperiment;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("cloneExperiment", org.apache.thrift.protocol.TMessageType.CALL, 0));
         cloneExperiment_args args = new cloneExperiment_args();
-        args.setAiravataExperimentIdToBeCloned(airavataExperimentIdToBeCloned);
+        args.setExistingExperimentID(existingExperimentID);
         args.setUpdatedExperiment(updatedExperiment);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2147,7 +2148,7 @@ import org.slf4j.LoggerFactory;
       public cloneExperiment_result getResult(I iface, cloneExperiment_args args) throws org.apache.thrift.TException {
         cloneExperiment_result result = new cloneExperiment_result();
         try {
-          result.success = iface.cloneExperiment(args.airavataExperimentIdToBeCloned, args.updatedExperiment);
+          result.success = iface.cloneExperiment(args.existingExperimentID, args.updatedExperiment);
         } catch (org.apache.airavata.api.error.InvalidRequestException ire) {
           result.ire = ire;
         } catch (org.apache.airavata.api.error.ExperimentNotFoundException enf) {
@@ -3374,7 +3375,7 @@ import org.slf4j.LoggerFactory;
       }
 
       public void start(I iface, cloneExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
-        iface.cloneExperiment(args.airavataExperimentIdToBeCloned, args.updatedExperiment,resultHandler);
+        iface.cloneExperiment(args.existingExperimentID, args.updatedExperiment,resultHandler);
       }
     }
 
@@ -19646,7 +19647,7 @@ import org.slf4j.LoggerFactory;
   public static class cloneExperiment_args implements org.apache.thrift.TBase<cloneExperiment_args, cloneExperiment_args._Fields>, java.io.Serializable, Cloneable, Comparable<cloneExperiment_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("cloneExperiment_args");
 
-    private static final org.apache.thrift.protocol.TField AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED_FIELD_DESC = new org.apache.thrift.protocol.TField("airavataExperimentIdToBeCloned", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField EXISTING_EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("existingExperimentID", org.apache.thrift.protocol.TType.STRING, (short)1);
     private static final org.apache.thrift.protocol.TField UPDATED_EXPERIMENT_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedExperiment", org.apache.thrift.protocol.TType.STRUCT, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
@@ -19655,12 +19656,12 @@ import org.slf4j.LoggerFactory;
       schemes.put(TupleScheme.class, new cloneExperiment_argsTupleSchemeFactory());
     }
 
-    public String airavataExperimentIdToBeCloned; // required
+    public String existingExperimentID; // required
     public org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     @SuppressWarnings("all") public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED((short)1, "airavataExperimentIdToBeCloned"),
+      EXISTING_EXPERIMENT_ID((short)1, "existingExperimentID"),
       UPDATED_EXPERIMENT((short)2, "updatedExperiment");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
@@ -19676,8 +19677,8 @@ import org.slf4j.LoggerFactory;
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED
-            return AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED;
+          case 1: // EXISTING_EXPERIMENT_ID
+            return EXISTING_EXPERIMENT_ID;
           case 2: // UPDATED_EXPERIMENT
             return UPDATED_EXPERIMENT;
           default:
@@ -19723,7 +19724,7 @@ import org.slf4j.LoggerFactory;
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED, new org.apache.thrift.meta_data.FieldMetaData("airavataExperimentIdToBeCloned", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+      tmpMap.put(_Fields.EXISTING_EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("existingExperimentID", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.UPDATED_EXPERIMENT, new org.apache.thrift.meta_data.FieldMetaData("updatedExperiment", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workspace.experiment.Experiment.class)));
@@ -19735,11 +19736,11 @@ import org.slf4j.LoggerFactory;
     }
 
     public cloneExperiment_args(
-      String airavataExperimentIdToBeCloned,
+      String existingExperimentID,
       org.apache.airavata.model.workspace.experiment.Experiment updatedExperiment)
     {
       this();
-      this.airavataExperimentIdToBeCloned = airavataExperimentIdToBeCloned;
+      this.existingExperimentID = existingExperimentID;
       this.updatedExperiment = updatedExperiment;
     }
 
@@ -19747,8 +19748,8 @@ import org.slf4j.LoggerFactory;
      * Performs a deep copy on <i>other</i>.
      */
     public cloneExperiment_args(cloneExperiment_args other) {
-      if (other.isSetAiravataExperimentIdToBeCloned()) {
-        this.airavataExperimentIdToBeCloned = other.airavataExperimentIdToBeCloned;
+      if (other.isSetExistingExperimentID()) {
+        this.existingExperimentID = other.existingExperimentID;
       }
       if (other.isSetUpdatedExperiment()) {
         this.updatedExperiment = new org.apache.airavata.model.workspace.experiment.Experiment(other.updatedExperiment);
@@ -19761,31 +19762,31 @@ import org.slf4j.LoggerFactory;
 
     @Override
     public void clear() {
-      this.airavataExperimentIdToBeCloned = null;
+      this.existingExperimentID = null;
       this.updatedExperiment = null;
     }
 
-    public String getAiravataExperimentIdToBeCloned() {
-      return this.airavataExperimentIdToBeCloned;
+    public String getExistingExperimentID() {
+      return this.existingExperimentID;
     }
 
-    public cloneExperiment_args setAiravataExperimentIdToBeCloned(String airavataExperimentIdToBeCloned) {
-      this.airavataExperimentIdToBeCloned = airavataExperimentIdToBeCloned;
+    public cloneExperiment_args setExistingExperimentID(String existingExperimentID) {
+      this.existingExperimentID = existingExperimentID;
       return this;
     }
 
-    public void unsetAiravataExperimentIdToBeCloned() {
-      this.airavataExperimentIdToBeCloned = null;
+    public void unsetExistingExperimentID() {
+      this.existingExperimentID = null;
     }
 
-    /** Returns true if field airavataExperimentIdToBeCloned is set (has been assigned a value) and false otherwise */
-    public boolean isSetAiravataExperimentIdToBeCloned() {
-      return this.airavataExperimentIdToBeCloned != null;
+    /** Returns true if field existingExperimentID is set (has been assigned a value) and false otherwise */
+    public boolean isSetExistingExperimentID() {
+      return this.existingExperimentID != null;
     }
 
-    public void setAiravataExperimentIdToBeClonedIsSet(boolean value) {
+    public void setExistingExperimentIDIsSet(boolean value) {
       if (!value) {
-        this.airavataExperimentIdToBeCloned = null;
+        this.existingExperimentID = null;
       }
     }
 
@@ -19815,11 +19816,11 @@ import org.slf4j.LoggerFactory;
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
-      case AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED:
+      case EXISTING_EXPERIMENT_ID:
         if (value == null) {
-          unsetAiravataExperimentIdToBeCloned();
+          unsetExistingExperimentID();
         } else {
-          setAiravataExperimentIdToBeCloned((String)value);
+          setExistingExperimentID((String)value);
         }
         break;
 
@@ -19836,8 +19837,8 @@ import org.slf4j.LoggerFactory;
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
-      case AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED:
-        return getAiravataExperimentIdToBeCloned();
+      case EXISTING_EXPERIMENT_ID:
+        return getExistingExperimentID();
 
       case UPDATED_EXPERIMENT:
         return getUpdatedExperiment();
@@ -19853,8 +19854,8 @@ import org.slf4j.LoggerFactory;
       }
 
       switch (field) {
-      case AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED:
-        return isSetAiravataExperimentIdToBeCloned();
+      case EXISTING_EXPERIMENT_ID:
+        return isSetExistingExperimentID();
       case UPDATED_EXPERIMENT:
         return isSetUpdatedExperiment();
       }
@@ -19874,12 +19875,12 @@ import org.slf4j.LoggerFactory;
       if (that == null)
         return false;
 
-      boolean this_present_airavataExperimentIdToBeCloned = true && this.isSetAiravataExperimentIdToBeCloned();
-      boolean that_present_airavataExperimentIdToBeCloned = true && that.isSetAiravataExperimentIdToBeCloned();
-      if (this_present_airavataExperimentIdToBeCloned || that_present_airavataExperimentIdToBeCloned) {
-        if (!(this_present_airavataExperimentIdToBeCloned && that_present_airavataExperimentIdToBeCloned))
+      boolean this_present_existingExperimentID = true && this.isSetExistingExperimentID();
+      boolean that_present_existingExperimentID = true && that.isSetExistingExperimentID();
+      if (this_present_existingExperimentID || that_present_existingExperimentID) {
+        if (!(this_present_existingExperimentID && that_present_existingExperimentID))
           return false;
-        if (!this.airavataExperimentIdToBeCloned.equals(that.airavataExperimentIdToBeCloned))
+        if (!this.existingExperimentID.equals(that.existingExperimentID))
           return false;
       }
 
@@ -19908,12 +19909,12 @@ import org.slf4j.LoggerFactory;
 
       int lastComparison = 0;
 
-      lastComparison = Boolean.valueOf(isSetAiravataExperimentIdToBeCloned()).compareTo(other.isSetAiravataExperimentIdToBeCloned());
+      lastComparison = Boolean.valueOf(isSetExistingExperimentID()).compareTo(other.isSetExistingExperimentID());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetAiravataExperimentIdToBeCloned()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.airavataExperimentIdToBeCloned, other.airavataExperimentIdToBeCloned);
+      if (isSetExistingExperimentID()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.existingExperimentID, other.existingExperimentID);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -19948,11 +19949,11 @@ import org.slf4j.LoggerFactory;
       StringBuilder sb = new StringBuilder("cloneExperiment_args(");
       boolean first = true;
 
-      sb.append("airavataExperimentIdToBeCloned:");
-      if (this.airavataExperimentIdToBeCloned == null) {
+      sb.append("existingExperimentID:");
+      if (this.existingExperimentID == null) {
         sb.append("null");
       } else {
-        sb.append(this.airavataExperimentIdToBeCloned);
+        sb.append(this.existingExperimentID);
       }
       first = false;
       if (!first) sb.append(", ");
@@ -20009,10 +20010,10 @@ import org.slf4j.LoggerFactory;
             break;
           }
           switch (schemeField.id) {
-            case 1: // AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED
+            case 1: // EXISTING_EXPERIMENT_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.airavataExperimentIdToBeCloned = iprot.readString();
-                struct.setAiravataExperimentIdToBeClonedIsSet(true);
+                struct.existingExperimentID = iprot.readString();
+                struct.setExistingExperimentIDIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -20041,9 +20042,9 @@ import org.slf4j.LoggerFactory;
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.airavataExperimentIdToBeCloned != null) {
-          oprot.writeFieldBegin(AIRAVATA_EXPERIMENT_ID_TO_BE_CLONED_FIELD_DESC);
-          oprot.writeString(struct.airavataExperimentIdToBeCloned);
+        if (struct.existingExperimentID != null) {
+          oprot.writeFieldBegin(EXISTING_EXPERIMENT_ID_FIELD_DESC);
+          oprot.writeString(struct.existingExperimentID);
           oprot.writeFieldEnd();
         }
         if (struct.updatedExperiment != null) {
@@ -20069,15 +20070,15 @@ import org.slf4j.LoggerFactory;
       public void write(org.apache.thrift.protocol.TProtocol prot, cloneExperiment_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
         BitSet optionals = new BitSet();
-        if (struct.isSetAiravataExperimentIdToBeCloned()) {
+        if (struct.isSetExistingExperimentID()) {
           optionals.set(0);
         }
         if (struct.isSetUpdatedExperiment()) {
           optionals.set(1);
         }
         oprot.writeBitSet(optionals, 2);
-        if (struct.isSetAiravataExperimentIdToBeCloned()) {
-          oprot.writeString(struct.airavataExperimentIdToBeCloned);
+        if (struct.isSetExistingExperimentID()) {
+          oprot.writeString(struct.existingExperimentID);
         }
         if (struct.isSetUpdatedExperiment()) {
           struct.updatedExperiment.write(oprot);
@@ -20089,8 +20090,8 @@ import org.slf4j.LoggerFactory;
         TTupleProtocol iprot = (TTupleProtocol) prot;
         BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
-          struct.airavataExperimentIdToBeCloned = iprot.readString();
-          struct.setAiravataExperimentIdToBeClonedIsSet(true);
+          struct.existingExperimentID = iprot.readString();
+          struct.setExistingExperimentIDIsSet(true);
         }
         if (incoming.get(1)) {
           struct.updatedExperiment = new org.apache.airavata.model.workspace.experiment.Experiment();

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/ExperimentNotFoundException.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/ExperimentNotFoundException.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/ExperimentNotFoundException.java
index 9b1044b..17192cd 100644
--- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/ExperimentNotFoundException.java
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/ExperimentNotFoundException.java
@@ -58,8 +58,7 @@ import org.slf4j.LoggerFactory;
 @SuppressWarnings("all") public class ExperimentNotFoundException extends TException implements org.apache.thrift.TBase<ExperimentNotFoundException, ExperimentNotFoundException._Fields>, java.io.Serializable, Cloneable, Comparable<ExperimentNotFoundException> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ExperimentNotFoundException");
 
-  private static final org.apache.thrift.protocol.TField IDENTIFIER_FIELD_DESC = new org.apache.thrift.protocol.TField("identifier", org.apache.thrift.protocol.TType.STRING, (short)1);
-  private static final org.apache.thrift.protocol.TField KEY_FIELD_DESC = new org.apache.thrift.protocol.TField("key", org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("message", org.apache.thrift.protocol.TType.STRING, (short)1);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -67,13 +66,11 @@ import org.slf4j.LoggerFactory;
     schemes.put(TupleScheme.class, new ExperimentNotFoundExceptionTupleSchemeFactory());
   }
 
-  public String identifier; // optional
-  public String key; // optional
+  public String message; // required
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   @SuppressWarnings("all") public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-    IDENTIFIER((short)1, "identifier"),
-    KEY((short)2, "key");
+    MESSAGE((short)1, "message");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -88,10 +85,8 @@ import org.slf4j.LoggerFactory;
      */
     public static _Fields findByThriftId(int fieldId) {
       switch(fieldId) {
-        case 1: // IDENTIFIER
-          return IDENTIFIER;
-        case 2: // KEY
-          return KEY;
+        case 1: // MESSAGE
+          return MESSAGE;
         default:
           return null;
       }
@@ -132,13 +127,10 @@ import org.slf4j.LoggerFactory;
   }
 
   // isset id assignments
-  private _Fields optionals[] = {_Fields.IDENTIFIER,_Fields.KEY};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-    tmpMap.put(_Fields.IDENTIFIER, new org.apache.thrift.meta_data.FieldMetaData("identifier", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
-        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-    tmpMap.put(_Fields.KEY, new org.apache.thrift.meta_data.FieldMetaData("key", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+    tmpMap.put(_Fields.MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("message", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ExperimentNotFoundException.class, metaDataMap);
@@ -147,15 +139,19 @@ import org.slf4j.LoggerFactory;
   public ExperimentNotFoundException() {
   }
 
+  public ExperimentNotFoundException(
+    String message)
+  {
+    this();
+    this.message = message;
+  }
+
   /**
    * Performs a deep copy on <i>other</i>.
    */
   public ExperimentNotFoundException(ExperimentNotFoundException other) {
-    if (other.isSetIdentifier()) {
-      this.identifier = other.identifier;
-    }
-    if (other.isSetKey()) {
-      this.key = other.key;
+    if (other.isSetMessage()) {
+      this.message = other.message;
     }
   }
 
@@ -165,73 +161,40 @@ import org.slf4j.LoggerFactory;
 
   @Override
   public void clear() {
-    this.identifier = null;
-    this.key = null;
+    this.message = null;
   }
 
-  public String getIdentifier() {
-    return this.identifier;
+  public String getMessage() {
+    return this.message;
   }
 
-  public ExperimentNotFoundException setIdentifier(String identifier) {
-    this.identifier = identifier;
+  public ExperimentNotFoundException setMessage(String message) {
+    this.message = message;
     return this;
   }
 
-  public void unsetIdentifier() {
-    this.identifier = null;
+  public void unsetMessage() {
+    this.message = null;
   }
 
-  /** Returns true if field identifier is set (has been assigned a value) and false otherwise */
-  public boolean isSetIdentifier() {
-    return this.identifier != null;
+  /** Returns true if field message is set (has been assigned a value) and false otherwise */
+  public boolean isSetMessage() {
+    return this.message != null;
   }
 
-  public void setIdentifierIsSet(boolean value) {
+  public void setMessageIsSet(boolean value) {
     if (!value) {
-      this.identifier = null;
-    }
-  }
-
-  public String getKey() {
-    return this.key;
-  }
-
-  public ExperimentNotFoundException setKey(String key) {
-    this.key = key;
-    return this;
-  }
-
-  public void unsetKey() {
-    this.key = null;
-  }
-
-  /** Returns true if field key is set (has been assigned a value) and false otherwise */
-  public boolean isSetKey() {
-    return this.key != null;
-  }
-
-  public void setKeyIsSet(boolean value) {
-    if (!value) {
-      this.key = null;
+      this.message = null;
     }
   }
 
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
-    case IDENTIFIER:
+    case MESSAGE:
       if (value == null) {
-        unsetIdentifier();
+        unsetMessage();
       } else {
-        setIdentifier((String)value);
-      }
-      break;
-
-    case KEY:
-      if (value == null) {
-        unsetKey();
-      } else {
-        setKey((String)value);
+        setMessage((String)value);
       }
       break;
 
@@ -240,11 +203,8 @@ import org.slf4j.LoggerFactory;
 
   public Object getFieldValue(_Fields field) {
     switch (field) {
-    case IDENTIFIER:
-      return getIdentifier();
-
-    case KEY:
-      return getKey();
+    case MESSAGE:
+      return getMessage();
 
     }
     throw new IllegalStateException();
@@ -257,10 +217,8 @@ import org.slf4j.LoggerFactory;
     }
 
     switch (field) {
-    case IDENTIFIER:
-      return isSetIdentifier();
-    case KEY:
-      return isSetKey();
+    case MESSAGE:
+      return isSetMessage();
     }
     throw new IllegalStateException();
   }
@@ -278,21 +236,12 @@ import org.slf4j.LoggerFactory;
     if (that == null)
       return false;
 
-    boolean this_present_identifier = true && this.isSetIdentifier();
-    boolean that_present_identifier = true && that.isSetIdentifier();
-    if (this_present_identifier || that_present_identifier) {
-      if (!(this_present_identifier && that_present_identifier))
-        return false;
-      if (!this.identifier.equals(that.identifier))
-        return false;
-    }
-
-    boolean this_present_key = true && this.isSetKey();
-    boolean that_present_key = true && that.isSetKey();
-    if (this_present_key || that_present_key) {
-      if (!(this_present_key && that_present_key))
+    boolean this_present_message = true && this.isSetMessage();
+    boolean that_present_message = true && that.isSetMessage();
+    if (this_present_message || that_present_message) {
+      if (!(this_present_message && that_present_message))
         return false;
-      if (!this.key.equals(that.key))
+      if (!this.message.equals(that.message))
         return false;
     }
 
@@ -312,22 +261,12 @@ import org.slf4j.LoggerFactory;
 
     int lastComparison = 0;
 
-    lastComparison = Boolean.valueOf(isSetIdentifier()).compareTo(other.isSetIdentifier());
+    lastComparison = Boolean.valueOf(isSetMessage()).compareTo(other.isSetMessage());
     if (lastComparison != 0) {
       return lastComparison;
     }
-    if (isSetIdentifier()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.identifier, other.identifier);
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-    }
-    lastComparison = Boolean.valueOf(isSetKey()).compareTo(other.isSetKey());
-    if (lastComparison != 0) {
-      return lastComparison;
-    }
-    if (isSetKey()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.key, other.key);
+    if (isSetMessage()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.message, other.message);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -352,31 +291,22 @@ import org.slf4j.LoggerFactory;
     StringBuilder sb = new StringBuilder("ExperimentNotFoundException(");
     boolean first = true;
 
-    if (isSetIdentifier()) {
-      sb.append("identifier:");
-      if (this.identifier == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.identifier);
-      }
-      first = false;
-    }
-    if (isSetKey()) {
-      if (!first) sb.append(", ");
-      sb.append("key:");
-      if (this.key == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.key);
-      }
-      first = false;
+    sb.append("message:");
+    if (this.message == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.message);
     }
+    first = false;
     sb.append(")");
     return sb.toString();
   }
 
   public void validate() throws org.apache.thrift.TException {
     // check for required fields
+    if (message == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'message' was not present! Struct: " + toString());
+    }
     // check for sub-struct validity
   }
 
@@ -414,18 +344,10 @@ import org.slf4j.LoggerFactory;
           break;
         }
         switch (schemeField.id) {
-          case 1: // IDENTIFIER
+          case 1: // MESSAGE
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-              struct.identifier = iprot.readString();
-              struct.setIdentifierIsSet(true);
-            } else { 
-              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-            }
-            break;
-          case 2: // KEY
-            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-              struct.key = iprot.readString();
-              struct.setKeyIsSet(true);
+              struct.message = iprot.readString();
+              struct.setMessageIsSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
@@ -445,19 +367,10 @@ import org.slf4j.LoggerFactory;
       struct.validate();
 
       oprot.writeStructBegin(STRUCT_DESC);
-      if (struct.identifier != null) {
-        if (struct.isSetIdentifier()) {
-          oprot.writeFieldBegin(IDENTIFIER_FIELD_DESC);
-          oprot.writeString(struct.identifier);
-          oprot.writeFieldEnd();
-        }
-      }
-      if (struct.key != null) {
-        if (struct.isSetKey()) {
-          oprot.writeFieldBegin(KEY_FIELD_DESC);
-          oprot.writeString(struct.key);
-          oprot.writeFieldEnd();
-        }
+      if (struct.message != null) {
+        oprot.writeFieldBegin(MESSAGE_FIELD_DESC);
+        oprot.writeString(struct.message);
+        oprot.writeFieldEnd();
       }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
@@ -476,34 +389,14 @@ import org.slf4j.LoggerFactory;
     @Override
     public void write(org.apache.thrift.protocol.TProtocol prot, ExperimentNotFoundException struct) throws org.apache.thrift.TException {
       TTupleProtocol oprot = (TTupleProtocol) prot;
-      BitSet optionals = new BitSet();
-      if (struct.isSetIdentifier()) {
-        optionals.set(0);
-      }
-      if (struct.isSetKey()) {
-        optionals.set(1);
-      }
-      oprot.writeBitSet(optionals, 2);
-      if (struct.isSetIdentifier()) {
-        oprot.writeString(struct.identifier);
-      }
-      if (struct.isSetKey()) {
-        oprot.writeString(struct.key);
-      }
+      oprot.writeString(struct.message);
     }
 
     @Override
     public void read(org.apache.thrift.protocol.TProtocol prot, ExperimentNotFoundException struct) throws org.apache.thrift.TException {
       TTupleProtocol iprot = (TTupleProtocol) prot;
-      BitSet incoming = iprot.readBitSet(2);
-      if (incoming.get(0)) {
-        struct.identifier = iprot.readString();
-        struct.setIdentifierIsSet(true);
-      }
-      if (incoming.get(1)) {
-        struct.key = iprot.readString();
-        struct.setKeyIsSet(true);
-      }
+      struct.message = iprot.readString();
+      struct.setMessageIsSet(true);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
index 4b3d8f8..e7c868d 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.cpp
@@ -3752,8 +3752,8 @@ uint32_t Airavata_cloneExperiment_args::read(::apache::thrift::protocol::TProtoc
     {
       case 1:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
-          xfer += iprot->readString(this->airavataExperimentIdToBeCloned);
-          this->__isset.airavataExperimentIdToBeCloned = true;
+          xfer += iprot->readString(this->existingExperimentID);
+          this->__isset.existingExperimentID = true;
         } else {
           xfer += iprot->skip(ftype);
         }
@@ -3782,8 +3782,8 @@ uint32_t Airavata_cloneExperiment_args::write(::apache::thrift::protocol::TProto
   uint32_t xfer = 0;
   xfer += oprot->writeStructBegin("Airavata_cloneExperiment_args");
 
-  xfer += oprot->writeFieldBegin("airavataExperimentIdToBeCloned", ::apache::thrift::protocol::T_STRING, 1);
-  xfer += oprot->writeString(this->airavataExperimentIdToBeCloned);
+  xfer += oprot->writeFieldBegin("existingExperimentID", ::apache::thrift::protocol::T_STRING, 1);
+  xfer += oprot->writeString(this->existingExperimentID);
   xfer += oprot->writeFieldEnd();
 
   xfer += oprot->writeFieldBegin("updatedExperiment", ::apache::thrift::protocol::T_STRUCT, 2);
@@ -3799,8 +3799,8 @@ uint32_t Airavata_cloneExperiment_pargs::write(::apache::thrift::protocol::TProt
   uint32_t xfer = 0;
   xfer += oprot->writeStructBegin("Airavata_cloneExperiment_pargs");
 
-  xfer += oprot->writeFieldBegin("airavataExperimentIdToBeCloned", ::apache::thrift::protocol::T_STRING, 1);
-  xfer += oprot->writeString((*(this->airavataExperimentIdToBeCloned)));
+  xfer += oprot->writeFieldBegin("existingExperimentID", ::apache::thrift::protocol::T_STRING, 1);
+  xfer += oprot->writeString((*(this->existingExperimentID)));
   xfer += oprot->writeFieldEnd();
 
   xfer += oprot->writeFieldBegin("updatedExperiment", ::apache::thrift::protocol::T_STRUCT, 2);
@@ -5297,19 +5297,19 @@ void AiravataClient::recv_getJobStatuses(std::map<std::string,  ::JobStatus> & _
   throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "getJobStatuses failed: unknown result");
 }
 
-void AiravataClient::cloneExperiment(std::string& _return, const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment)
+void AiravataClient::cloneExperiment(std::string& _return, const std::string& existingExperimentID, const  ::Experiment& updatedExperiment)
 {
-  send_cloneExperiment(airavataExperimentIdToBeCloned, updatedExperiment);
+  send_cloneExperiment(existingExperimentID, updatedExperiment);
   recv_cloneExperiment(_return);
 }
 
-void AiravataClient::send_cloneExperiment(const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment)
+void AiravataClient::send_cloneExperiment(const std::string& existingExperimentID, const  ::Experiment& updatedExperiment)
 {
   int32_t cseqid = 0;
   oprot_->writeMessageBegin("cloneExperiment", ::apache::thrift::protocol::T_CALL, cseqid);
 
   Airavata_cloneExperiment_pargs args;
-  args.airavataExperimentIdToBeCloned = &airavataExperimentIdToBeCloned;
+  args.existingExperimentID = &existingExperimentID;
   args.updatedExperiment = &updatedExperiment;
   args.write(oprot_);
 
@@ -6511,7 +6511,7 @@ void AiravataProcessor::process_cloneExperiment(int32_t seqid, ::apache::thrift:
 
   Airavata_cloneExperiment_result result;
   try {
-    iface_->cloneExperiment(result.success, args.airavataExperimentIdToBeCloned, args.updatedExperiment);
+    iface_->cloneExperiment(result.success, args.existingExperimentID, args.updatedExperiment);
     result.__isset.success = true;
   } catch ( ::airavata::api::error::InvalidRequestException &ire) {
     result.ire = ire;

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
index 9cd12a1..06d5cf0 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata.h
@@ -32,7 +32,7 @@ class AiravataIf {
   virtual void getExperimentStatus( ::ExperimentStatus& _return, const std::string& airavataExperimentId) = 0;
   virtual void getExperimentOutputs(std::vector< ::DataObjectType> & _return, const std::string& airavataExperimentId) = 0;
   virtual void getJobStatuses(std::map<std::string,  ::JobStatus> & _return, const std::string& airavataExperimentId) = 0;
-  virtual void cloneExperiment(std::string& _return, const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment) = 0;
+  virtual void cloneExperiment(std::string& _return, const std::string& existingExperimentID, const  ::Experiment& updatedExperiment) = 0;
   virtual void terminateExperiment(const std::string& airavataExperimentId) = 0;
 };
 
@@ -115,7 +115,7 @@ class AiravataNull : virtual public AiravataIf {
   void getJobStatuses(std::map<std::string,  ::JobStatus> & /* _return */, const std::string& /* airavataExperimentId */) {
     return;
   }
-  void cloneExperiment(std::string& /* _return */, const std::string& /* airavataExperimentIdToBeCloned */, const  ::Experiment& /* updatedExperiment */) {
+  void cloneExperiment(std::string& /* _return */, const std::string& /* existingExperimentID */, const  ::Experiment& /* updatedExperiment */) {
     return;
   }
   void terminateExperiment(const std::string& /* airavataExperimentId */) {
@@ -2222,26 +2222,26 @@ class Airavata_getJobStatuses_presult {
 };
 
 typedef struct _Airavata_cloneExperiment_args__isset {
-  _Airavata_cloneExperiment_args__isset() : airavataExperimentIdToBeCloned(false), updatedExperiment(false) {}
-  bool airavataExperimentIdToBeCloned;
+  _Airavata_cloneExperiment_args__isset() : existingExperimentID(false), updatedExperiment(false) {}
+  bool existingExperimentID;
   bool updatedExperiment;
 } _Airavata_cloneExperiment_args__isset;
 
 class Airavata_cloneExperiment_args {
  public:
 
-  Airavata_cloneExperiment_args() : airavataExperimentIdToBeCloned() {
+  Airavata_cloneExperiment_args() : existingExperimentID() {
   }
 
   virtual ~Airavata_cloneExperiment_args() throw() {}
 
-  std::string airavataExperimentIdToBeCloned;
+  std::string existingExperimentID;
    ::Experiment updatedExperiment;
 
   _Airavata_cloneExperiment_args__isset __isset;
 
-  void __set_airavataExperimentIdToBeCloned(const std::string& val) {
-    airavataExperimentIdToBeCloned = val;
+  void __set_existingExperimentID(const std::string& val) {
+    existingExperimentID = val;
   }
 
   void __set_updatedExperiment(const  ::Experiment& val) {
@@ -2250,7 +2250,7 @@ class Airavata_cloneExperiment_args {
 
   bool operator == (const Airavata_cloneExperiment_args & rhs) const
   {
-    if (!(airavataExperimentIdToBeCloned == rhs.airavataExperimentIdToBeCloned))
+    if (!(existingExperimentID == rhs.existingExperimentID))
       return false;
     if (!(updatedExperiment == rhs.updatedExperiment))
       return false;
@@ -2274,7 +2274,7 @@ class Airavata_cloneExperiment_pargs {
 
   virtual ~Airavata_cloneExperiment_pargs() throw() {}
 
-  const std::string* airavataExperimentIdToBeCloned;
+  const std::string* existingExperimentID;
   const  ::Experiment* updatedExperiment;
 
   uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
@@ -2587,8 +2587,8 @@ class AiravataClient : virtual public AiravataIf {
   void getJobStatuses(std::map<std::string,  ::JobStatus> & _return, const std::string& airavataExperimentId);
   void send_getJobStatuses(const std::string& airavataExperimentId);
   void recv_getJobStatuses(std::map<std::string,  ::JobStatus> & _return);
-  void cloneExperiment(std::string& _return, const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment);
-  void send_cloneExperiment(const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment);
+  void cloneExperiment(std::string& _return, const std::string& existingExperimentID, const  ::Experiment& updatedExperiment);
+  void send_cloneExperiment(const std::string& existingExperimentID, const  ::Experiment& updatedExperiment);
   void recv_cloneExperiment(std::string& _return);
   void terminateExperiment(const std::string& airavataExperimentId);
   void send_terminateExperiment(const std::string& airavataExperimentId);
@@ -2841,13 +2841,13 @@ class AiravataMultiface : virtual public AiravataIf {
     return;
   }
 
-  void cloneExperiment(std::string& _return, const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment) {
+  void cloneExperiment(std::string& _return, const std::string& existingExperimentID, const  ::Experiment& updatedExperiment) {
     size_t sz = ifaces_.size();
     size_t i = 0;
     for (; i < (sz - 1); ++i) {
-      ifaces_[i]->cloneExperiment(_return, airavataExperimentIdToBeCloned, updatedExperiment);
+      ifaces_[i]->cloneExperiment(_return, existingExperimentID, updatedExperiment);
     }
-    ifaces_[i]->cloneExperiment(_return, airavataExperimentIdToBeCloned, updatedExperiment);
+    ifaces_[i]->cloneExperiment(_return, existingExperimentID, updatedExperiment);
     return;
   }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
index 761359d..5fb0668 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/Airavata_server.skeleton.cpp
@@ -107,7 +107,7 @@ class AiravataHandler : virtual public AiravataIf {
     printf("getJobStatuses\n");
   }
 
-  void cloneExperiment(std::string& _return, const std::string& airavataExperimentIdToBeCloned, const  ::Experiment& updatedExperiment) {
+  void cloneExperiment(std::string& _return, const std::string& existingExperimentID, const  ::Experiment& updatedExperiment) {
     // Your implementation goes here
     printf("cloneExperiment\n");
   }

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.cpp
index e52eab2..8021a96 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.cpp
@@ -32,8 +32,8 @@ const char* _kAiravataErrorTypeNames[] = {
 };
 const std::map<int, const char*> _AiravataErrorType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(8, _kAiravataErrorTypeValues, _kAiravataErrorTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
 
-const char* ExperimentNotFoundException::ascii_fingerprint = "D0297FC5011701BD87898CC36146A565";
-const uint8_t ExperimentNotFoundException::binary_fingerprint[16] = {0xD0,0x29,0x7F,0xC5,0x01,0x17,0x01,0xBD,0x87,0x89,0x8C,0xC3,0x61,0x46,0xA5,0x65};
+const char* ExperimentNotFoundException::ascii_fingerprint = "EFB929595D312AC8F305D5A794CFEDA1";
+const uint8_t ExperimentNotFoundException::binary_fingerprint[16] = {0xEF,0xB9,0x29,0x59,0x5D,0x31,0x2A,0xC8,0xF3,0x05,0xD5,0xA7,0x94,0xCF,0xED,0xA1};
 
 uint32_t ExperimentNotFoundException::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -46,6 +46,7 @@ uint32_t ExperimentNotFoundException::read(::apache::thrift::protocol::TProtocol
 
   using ::apache::thrift::protocol::TProtocolException;
 
+  bool isset_message = false;
 
   while (true)
   {
@@ -57,16 +58,8 @@ uint32_t ExperimentNotFoundException::read(::apache::thrift::protocol::TProtocol
     {
       case 1:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
-          xfer += iprot->readString(this->identifier);
-          this->__isset.identifier = true;
-        } else {
-          xfer += iprot->skip(ftype);
-        }
-        break;
-      case 2:
-        if (ftype == ::apache::thrift::protocol::T_STRING) {
-          xfer += iprot->readString(this->key);
-          this->__isset.key = true;
+          xfer += iprot->readString(this->message);
+          isset_message = true;
         } else {
           xfer += iprot->skip(ftype);
         }
@@ -80,6 +73,8 @@ uint32_t ExperimentNotFoundException::read(::apache::thrift::protocol::TProtocol
 
   xfer += iprot->readStructEnd();
 
+  if (!isset_message)
+    throw TProtocolException(TProtocolException::INVALID_DATA);
   return xfer;
 }
 
@@ -87,16 +82,10 @@ uint32_t ExperimentNotFoundException::write(::apache::thrift::protocol::TProtoco
   uint32_t xfer = 0;
   xfer += oprot->writeStructBegin("ExperimentNotFoundException");
 
-  if (this->__isset.identifier) {
-    xfer += oprot->writeFieldBegin("identifier", ::apache::thrift::protocol::T_STRING, 1);
-    xfer += oprot->writeString(this->identifier);
-    xfer += oprot->writeFieldEnd();
-  }
-  if (this->__isset.key) {
-    xfer += oprot->writeFieldBegin("key", ::apache::thrift::protocol::T_STRING, 2);
-    xfer += oprot->writeString(this->key);
-    xfer += oprot->writeFieldEnd();
-  }
+  xfer += oprot->writeFieldBegin("message", ::apache::thrift::protocol::T_STRING, 1);
+  xfer += oprot->writeString(this->message);
+  xfer += oprot->writeFieldEnd();
+
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -104,9 +93,7 @@ uint32_t ExperimentNotFoundException::write(::apache::thrift::protocol::TProtoco
 
 void swap(ExperimentNotFoundException &a, ExperimentNotFoundException &b) {
   using ::std::swap;
-  swap(a.identifier, b.identifier);
-  swap(a.key, b.key);
-  swap(a.__isset, b.__isset);
+  swap(a.message, b.message);
 }
 
 const char* InvalidRequestException::ascii_fingerprint = "EFB929595D312AC8F305D5A794CFEDA1";

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.h
index 877051e..6406404 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavataErrors_types.h
@@ -32,47 +32,27 @@ struct AiravataErrorType {
 
 extern const std::map<int, const char*> _AiravataErrorType_VALUES_TO_NAMES;
 
-typedef struct _ExperimentNotFoundException__isset {
-  _ExperimentNotFoundException__isset() : identifier(false), key(false) {}
-  bool identifier;
-  bool key;
-} _ExperimentNotFoundException__isset;
 
 class ExperimentNotFoundException : public ::apache::thrift::TException {
  public:
 
-  static const char* ascii_fingerprint; // = "D0297FC5011701BD87898CC36146A565";
-  static const uint8_t binary_fingerprint[16]; // = {0xD0,0x29,0x7F,0xC5,0x01,0x17,0x01,0xBD,0x87,0x89,0x8C,0xC3,0x61,0x46,0xA5,0x65};
+  static const char* ascii_fingerprint; // = "EFB929595D312AC8F305D5A794CFEDA1";
+  static const uint8_t binary_fingerprint[16]; // = {0xEF,0xB9,0x29,0x59,0x5D,0x31,0x2A,0xC8,0xF3,0x05,0xD5,0xA7,0x94,0xCF,0xED,0xA1};
 
-  ExperimentNotFoundException() : identifier(), key() {
+  ExperimentNotFoundException() : message() {
   }
 
   virtual ~ExperimentNotFoundException() throw() {}
 
-  std::string identifier;
-  std::string key;
-
-  _ExperimentNotFoundException__isset __isset;
-
-  void __set_identifier(const std::string& val) {
-    identifier = val;
-    __isset.identifier = true;
-  }
+  std::string message;
 
-  void __set_key(const std::string& val) {
-    key = val;
-    __isset.key = true;
+  void __set_message(const std::string& val) {
+    message = val;
   }
 
   bool operator == (const ExperimentNotFoundException & rhs) const
   {
-    if (__isset.identifier != rhs.__isset.identifier)
-      return false;
-    else if (__isset.identifier && !(identifier == rhs.identifier))
-      return false;
-    if (__isset.key != rhs.__isset.key)
-      return false;
-    else if (__isset.key && !(key == rhs.key))
+    if (!(message == rhs.message))
       return false;
     return true;
   }

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/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 a5a55d3..2e31b82 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
@@ -34,7 +34,7 @@ interface AiravataIf {
   public function getExperimentStatus($airavataExperimentId);
   public function getExperimentOutputs($airavataExperimentId);
   public function getJobStatuses($airavataExperimentId);
-  public function cloneExperiment($airavataExperimentIdToBeCloned, \Airavata\Model\Workspace\Experiment\Experiment $updatedExperiment);
+  public function cloneExperiment($existingExperimentID, \Airavata\Model\Workspace\Experiment\Experiment $updatedExperiment);
   public function terminateExperiment($airavataExperimentId);
 }
 
@@ -1027,16 +1027,16 @@ class AiravataClient implements \Airavata\API\AiravataIf {
     throw new \Exception("getJobStatuses failed: unknown result");
   }
 
-  public function cloneExperiment($airavataExperimentIdToBeCloned, \Airavata\Model\Workspace\Experiment\Experiment $updatedExperiment)
+  public function cloneExperiment($existingExperimentID, \Airavata\Model\Workspace\Experiment\Experiment $updatedExperiment)
   {
-    $this->send_cloneExperiment($airavataExperimentIdToBeCloned, $updatedExperiment);
+    $this->send_cloneExperiment($existingExperimentID, $updatedExperiment);
     return $this->recv_cloneExperiment();
   }
 
-  public function send_cloneExperiment($airavataExperimentIdToBeCloned, \Airavata\Model\Workspace\Experiment\Experiment $updatedExperiment)
+  public function send_cloneExperiment($existingExperimentID, \Airavata\Model\Workspace\Experiment\Experiment $updatedExperiment)
   {
     $args = new \Airavata\API\Airavata_cloneExperiment_args();
-    $args->airavataExperimentIdToBeCloned = $airavataExperimentIdToBeCloned;
+    $args->existingExperimentID = $existingExperimentID;
     $args->updatedExperiment = $updatedExperiment;
     $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
     if ($bin_accel)
@@ -4655,14 +4655,14 @@ class Airavata_getJobStatuses_result {
 class Airavata_cloneExperiment_args {
   static $_TSPEC;
 
-  public $airavataExperimentIdToBeCloned = null;
+  public $existingExperimentID = null;
   public $updatedExperiment = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
       self::$_TSPEC = array(
         1 => array(
-          'var' => 'airavataExperimentIdToBeCloned',
+          'var' => 'existingExperimentID',
           'type' => TType::STRING,
           ),
         2 => array(
@@ -4673,8 +4673,8 @@ class Airavata_cloneExperiment_args {
         );
     }
     if (is_array($vals)) {
-      if (isset($vals['airavataExperimentIdToBeCloned'])) {
-        $this->airavataExperimentIdToBeCloned = $vals['airavataExperimentIdToBeCloned'];
+      if (isset($vals['existingExperimentID'])) {
+        $this->existingExperimentID = $vals['existingExperimentID'];
       }
       if (isset($vals['updatedExperiment'])) {
         $this->updatedExperiment = $vals['updatedExperiment'];
@@ -4703,7 +4703,7 @@ class Airavata_cloneExperiment_args {
       {
         case 1:
           if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->airavataExperimentIdToBeCloned);
+            $xfer += $input->readString($this->existingExperimentID);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -4729,9 +4729,9 @@ class Airavata_cloneExperiment_args {
   public function write($output) {
     $xfer = 0;
     $xfer += $output->writeStructBegin('Airavata_cloneExperiment_args');
-    if ($this->airavataExperimentIdToBeCloned !== null) {
-      $xfer += $output->writeFieldBegin('airavataExperimentIdToBeCloned', TType::STRING, 1);
-      $xfer += $output->writeString($this->airavataExperimentIdToBeCloned);
+    if ($this->existingExperimentID !== null) {
+      $xfer += $output->writeFieldBegin('existingExperimentID', TType::STRING, 1);
+      $xfer += $output->writeString($this->existingExperimentID);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->updatedExperiment !== null) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Error/Types.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Error/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Error/Types.php
index 1eeaa02..d63e940 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Error/Types.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Error/Types.php
@@ -41,28 +41,20 @@ final class AiravataErrorType {
 class ExperimentNotFoundException extends TException {
   static $_TSPEC;
 
-  public $identifier = null;
-  public $key = null;
+  public $message = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
       self::$_TSPEC = array(
         1 => array(
-          'var' => 'identifier',
-          'type' => TType::STRING,
-          ),
-        2 => array(
-          'var' => 'key',
+          'var' => 'message',
           'type' => TType::STRING,
           ),
         );
     }
     if (is_array($vals)) {
-      if (isset($vals['identifier'])) {
-        $this->identifier = $vals['identifier'];
-      }
-      if (isset($vals['key'])) {
-        $this->key = $vals['key'];
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
       }
     }
   }
@@ -88,14 +80,7 @@ class ExperimentNotFoundException extends TException {
       {
         case 1:
           if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->identifier);
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
-        case 2:
-          if ($ftype == TType::STRING) {
-            $xfer += $input->readString($this->key);
+            $xfer += $input->readString($this->message);
           } else {
             $xfer += $input->skip($ftype);
           }
@@ -113,14 +98,9 @@ class ExperimentNotFoundException extends TException {
   public function write($output) {
     $xfer = 0;
     $xfer += $output->writeStructBegin('ExperimentNotFoundException');
-    if ($this->identifier !== null) {
-      $xfer += $output->writeFieldBegin('identifier', TType::STRING, 1);
-      $xfer += $output->writeString($this->identifier);
-      $xfer += $output->writeFieldEnd();
-    }
-    if ($this->key !== null) {
-      $xfer += $output->writeFieldBegin('key', TType::STRING, 2);
-      $xfer += $output->writeString($this->key);
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 1);
+      $xfer += $output->writeString($this->message);
       $xfer += $output->writeFieldEnd();
     }
     $xfer += $output->writeFieldStop();

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/airavataAPI.thrift b/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
index 445e721..45294be 100644
--- a/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
+++ b/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
@@ -378,10 +378,11 @@ service Airavata {
    * Clone an specified experiment with a new name. A copy of the experiment configuration is made and is persisted with new metadata.
    *   The client has to subsequently update this configuration if needed and launch the cloned experiment. 
    *
-   * @param airavataExperimentIdToBeCloned
-   *    This is the experiment identifier that is to be cloned.
+   * @param existingExperimentID
+   *    This is the experiment identifier that already exists in the system. Will use this experimentID to retrieve
+   *    user configuration which is used with the clone experiment.
    *
-   * @param basicExperimentMetadata
+   * @param updatedExperiment
    *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
    *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
    *      should be shared public by default.
@@ -413,8 +414,8 @@ service Airavata {
    *       rather an Airavata Administrator will be notified to take corrective action.
    *
   */
-  string cloneExperiment(1: string airavataExperimentIdToBeCloned,
-                                      2: experimentModel.Experiment updatedExperiment)
+  string cloneExperiment(1: string existingExperimentID,
+                         2: experimentModel.Experiment updatedExperiment)
     throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.ExperimentNotFoundException enf,
             3: airavataErrors.AiravataClientException ace,

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/airavataErrors.thrift b/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
index 0031b5a..cfb554b 100644
--- a/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
+++ b/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
@@ -70,8 +70,11 @@ enum AiravataErrorType {
  * key:  The value passed from the client in the identifier, which was not found.
  */
 exception ExperimentNotFoundException {
-  1:  optional  string identifier,
-  2:  optional  string key
+  1: required string message
+  /**
+  * 1:  optional  string identifier,
+  * 2:  optional  string key
+  **/
 }
 
 /** 

http://git-wip-us.apache.org/repos/asf/airavata/blob/22d0a6f4/airavata-api/thrift-interface-descriptions/applicationCatalog.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/applicationCatalog.thrift b/airavata-api/thrift-interface-descriptions/applicationCatalog.thrift
index 19f81e5..545706f 100644
--- a/airavata-api/thrift-interface-descriptions/applicationCatalog.thrift
+++ b/airavata-api/thrift-interface-descriptions/applicationCatalog.thrift
@@ -25,8 +25,8 @@
 */
 
 include "airavataErrors.thrift"
-include "airavataDataModel.thrift"
-include "computeResourceDescrption.thrift"
+include "computeResourceDescription.thrift"
+include "applicationCatalogDataModel.thrift"
 
 namespace java org.apache.airavata.api.appcatalog
 namespace php Airavata.API.AppCatalog
@@ -62,27 +62,27 @@ service ApplicationCatalog {
   /**
    * Manage Computer Resources
   */
-  void addComputerResourceDescription(1: ComputeResourceDescription computeResourceDescription)
+  void addComputerResourceDescription(1: computeResourceDescription.ComputeResourceDescription computeResourceDescription)
     throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  void addSSHJobSubmissionProtocol(1: string computeResourceId, 2: SSHJobSubmission jobSubmission)
+  void addSSHJobSubmissionProtocol(1: string computeResourceId, 2: computeResourceDescription.SSHJobSubmission jobSubmission)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  void addGSISSHJobSubmissionProtocol(1: string computeResourceId, 2: GSISSHJobSubmission jobSubmission)
+  void addGSISSHJobSubmissionProtocol(1: string computeResourceId, 2: computeResourceDescription.GSISSHJobSubmission jobSubmission)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  void addGlobusJobSubmissionProtocol(1: string computeResourceId, 2: GlobusJobSubmission jobSubmission)
+  void addGlobusJobSubmissionProtocol(1: string computeResourceId, 2: computeResourceDescription.GlobusJobSubmission jobSubmission)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)     
             
-  void addDataMovementProtocol(1: string computeResourceId, 2: SCPDataMovement dataMovement)
+  void addDataMovementProtocol(1: string computeResourceId, 2: computeResourceDescription.SCPDataMovement dataMovement)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase) 
@@ -92,42 +92,44 @@ service ApplicationCatalog {
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
 
-  ComputeResourceDescription getComputeResourceDescription(1: string computeResourceId)
+  computeResourceDescription.ComputeResourceDescription getComputeResourceDescription(1: string computeResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
 
-  SSHJobSubmission getSSHJobSubmissionProtocol(1: string sshJobSubmissionProtocolResourceId)
+  computeResourceDescription.SSHJobSubmission getSSHJobSubmissionProtocol(1: string sshJobSubmissionProtocolResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  GSISSHJobSubmission getGSISSHJobSubmissionProtocol(1: string gsisshJobSubmissionProtocolResourceId)
+  computeResourceDescription.GSISSHJobSubmission getGSISSHJobSubmissionProtocol(1: string gsisshJobSubmissionProtocolResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
             
-  GlobusJobSubmission getGlobusJobSubmissionProtocol(1: string globusJobSubmissionProtocolResourceId)
+  computeResourceDescription.GlobusJobSubmission getGlobusJobSubmissionProtocol(1: string globusJobSubmissionProtocolResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)     
             
-  SCPDataMovement getDataMovementProtocol(1: string scpDataMovementResourceId)
+  computeResourceDescription.SCPDataMovement getDataMovementProtocol(1: string scpDataMovementResourceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase) 
-  
-  list<string> listComputeResourceDescriptions()
-  	throws (1: airavataErrors.InvalidRequestException ire,
-            2: airavataErrors.AiravataClientException ace,
-            3: airavataErrors.AiravataSystemException ase)
+
+  /**
+  *list<string> listComputeResourceDescriptions()
+  *	throws (1: airavataErrors.InvalidRequestException ire,
+  *          2: airavataErrors.AiravataClientException ace,
+  *          3: airavataErrors.AiravataSystemException ase)
+  */
 
   bool isComputeResourceDescriptionRegistered(1: string hostName)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
 
-  ComputeResourceDescription getComputeResourceDescriptionFromHostName(1: string hostName)
+  computeResourceDescription.ComputeResourceDescription getComputeResourceDescriptionFromHostName(1: string hostName)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
@@ -135,7 +137,7 @@ service ApplicationCatalog {
   /**
    * Manage Application Interfaces
   */
-  void addApplicationInterface(1: ApplicationInterface applicationInterface)
+  void addApplicationInterface(1: applicationCatalogDataModel.ApplicationInterface applicationInterface)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)
@@ -145,7 +147,7 @@ service ApplicationCatalog {
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  
 
-  ApplicationInterface getApplicationInterface(1: string applicationInterfaceId)
+  applicationCatalogDataModel.ApplicationInterface getApplicationInterface(1: string applicationInterfaceId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  
@@ -153,7 +155,7 @@ service ApplicationCatalog {
   /**
    * Manage application deployments
   */
-  void addApplicationDeployment(1: string applicationInterfaceId, 2: ApplicationDeployment applicationDeployment)
+  void addApplicationDeployment(1: string applicationInterfaceId, 2: applicationCatalogDataModel.ApplicationDeployment applicationDeployment)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)   
@@ -163,7 +165,7 @@ service ApplicationCatalog {
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)  
 
-  ApplicationDeployment getApplicationDeployment(1: string applicationDeploymentId)
+  applicationCatalogDataModel.ApplicationDeployment getApplicationDeployment(1: string applicationDeploymentId)
   	throws (1: airavataErrors.InvalidRequestException ire,
             2: airavataErrors.AiravataClientException ace,
             3: airavataErrors.AiravataSystemException ase)