You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2020/06/10 01:03:17 UTC

[airavata] branch param-sweep updated: Attaching parsing templates to experiment and adding a sweep range for experiment

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

dimuthuupe pushed a commit to branch param-sweep
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/param-sweep by this push:
     new 53edd2c  Attaching parsing templates to experiment and adding a sweep range for experiment
53edd2c is described below

commit 53edd2c98028733f7f10c33394a0db59fcdb5dbb
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Tue Jun 9 21:02:58 2020 -0400

    Attaching parsing templates to experiment and adding a sweep range for experiment
---
 .../api/server/handler/AiravataServerHandler.java  |   32 +
 .../java/org/apache/airavata/api/Airavata.java     | 4413 +++++++++++++++++---
 .../airavata/api/Airavata-remote                   |   14 +
 .../airavata-python-sdk/airavata/api/Airavata.py   | 1108 +++--
 .../airavata/model/experiment/ttypes.py            |   94 +-
 .../airavata/model/job/ttypes.py                   |  125 +
 .../airavata/model/status/ttypes.py                |   98 +
 .../airavata/model/experiment/ExperimentModel.java |  123 +-
 .../org/apache/airavata/helix/impl/SpecUtils.java  |   49 +
 .../airavata/helix/impl/task/TaskContext.java      |    5 +-
 .../airavata/helix/impl/task/env/EnvSetupTask.java |    7 +-
 .../task/staging/SweepingInputDataStagingTask.java |    7 +-
 .../task/submission/DefaultJobSubmissionTask.java  |   13 +-
 .../impl/task/submission/JobSubmissionTask.java    |    2 +-
 .../task/submission/config/GroovyMapBuilder.java   |    2 +-
 .../impl/task/submission/config/GroovyMapData.java |   12 +-
 .../helix/impl/workflow/PostWorkflowManager.java   |    6 +-
 .../src/main/resources/SLURM_Arr_Groovy.template   |    2 +-
 .../src/main/resources/META-INF/persistence.xml    |    2 +
 .../database_scripts/expcatalog-mysql.sql          |    8 +-
 .../init/05-parameter-sweep-migration.sql          |    8 +-
 .../src/main/resources/email-config.yaml           |    1 +
 .../core/entities/expcatalog/ExperimentEntity.java |   12 +-
 .../ExperimentParsingTemplateEntity.java           |   55 +
 .../expcatalog/ExperimentParsingTemplatePK.java    |   68 +
 .../ExperimentParsingTemplateRepository.java       |   72 +
 .../airavata/registry/core/utils/DBConstants.java  |    5 +
 .../registry/core/utils/QueryConstants.java        |    6 +
 .../src/main/resources/META-INF/persistence.xml    |    1 +
 .../src/main/resources/expcatalog-mysql.sql        |    8 +-
 .../api/service/handler/RegistryServerHandler.java |   29 +-
 .../airavata/registry/api/RegistryService.java     | 2709 ++++++++++--
 .../airavata-apis/airavata_api.thrift              |   13 +
 .../component-cpis/registry-api.thrift             |    5 +
 .../experiment_model.thrift                        |    7 +-
 35 files changed, 7801 insertions(+), 1320 deletions(-)

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 724e27c..8a8a5e1 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
@@ -6011,6 +6011,38 @@ public class AiravataServerHandler implements Airavata.Iface {
 
     @Override
     @SecurityCheck
+    public List<ParsingTemplate> getParsingTemplatesForApplication(AuthzToken authzToken, String appInterfaceId, String gatewayId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException {
+        RegistryService.Client regClient = registryClientPool.getResource();
+        try {
+            return regClient.getParsingTemplatesForApplication(appInterfaceId, gatewayId);
+        } catch (Exception e) {
+            String msg = "Error retrieving parsing templates for application interface id: " + appInterfaceId;
+            logger.error(msg, e);
+            AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage(msg+" More info : " + e.getMessage());
+            registryClientPool.returnBrokenResource(regClient);
+            throw exception;
+        }
+    }
+
+    @Override
+    @SecurityCheck
+    public void addParsingTemplatesForExperiment(AuthzToken authzToken, List<String> templateIds, String experimentId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException {
+        RegistryService.Client regClient = registryClientPool.getResource();
+        try {
+            regClient.addParsingTemplatesForExperiment(templateIds, experimentId);
+        } catch (Exception e) {
+            String msg = "Error adding parsing templates for experiment: " + experimentId;
+            logger.error(msg, e);
+            AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage(msg+" More info : " + e.getMessage());
+            registryClientPool.returnBrokenResource(regClient);
+            throw exception;
+        }
+    }
+
+    @Override
+    @SecurityCheck
     public List<ParsingTemplate> getParsingTemplatesForExperiment(AuthzToken authzToken, String experimentId, String gatewayId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException {
         RegistryService.Client regClient = registryClientPool.getResource();
         try {
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 bd46d89..16b4185 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
@@ -2992,6 +2992,10 @@ public class Airavata {
 
     public org.apache.airavata.model.appcatalog.parser.ParsingTemplate getParsingTemplate(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String templateId, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException;
 
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForApplication(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appInterfaceId, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift. [...]
+
+    public void addParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.util.List<java.lang.String> templateIds, java.lang.String experimentId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException;
+
     public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String experimentId, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TEx [...]
 
     public java.lang.String saveParsingTemplate(org.apache.airavata.model.security.AuthzToken authzToken, org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException;
@@ -3378,6 +3382,10 @@ public class Airavata {
 
     public void getParsingTemplate(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String templateId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> resultHandler) throws org.apache.thrift.TException;
 
+    public void getParsingTemplatesForApplication(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appInterfaceId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException;
+
+    public void addParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.util.List<java.lang.String> templateIds, java.lang.String experimentId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException;
+
     public void getParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String experimentId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException;
 
     public void saveParsingTemplate(org.apache.airavata.model.security.AuthzToken authzToken, org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException;
@@ -10290,6 +10298,77 @@ public class Airavata {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getParsingTemplate failed: unknown result");
     }
 
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForApplication(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appInterfaceId, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift. [...]
+    {
+      send_getParsingTemplatesForApplication(authzToken, appInterfaceId, gatewayId);
+      return recv_getParsingTemplatesForApplication();
+    }
+
+    public void send_getParsingTemplatesForApplication(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appInterfaceId, java.lang.String gatewayId) throws org.apache.thrift.TException
+    {
+      getParsingTemplatesForApplication_args args = new getParsingTemplatesForApplication_args();
+      args.setAuthzToken(authzToken);
+      args.setAppInterfaceId(appInterfaceId);
+      args.setGatewayId(gatewayId);
+      sendBase("getParsingTemplatesForApplication", args);
+    }
+
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> recv_getParsingTemplatesForApplication() throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException
+    {
+      getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
+      receiveBase(result, "getParsingTemplatesForApplication");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.ire != null) {
+        throw result.ire;
+      }
+      if (result.ace != null) {
+        throw result.ace;
+      }
+      if (result.ase != null) {
+        throw result.ase;
+      }
+      if (result.ae != null) {
+        throw result.ae;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getParsingTemplatesForApplication failed: unknown result");
+    }
+
+    public void addParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.util.List<java.lang.String> templateIds, java.lang.String experimentId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException
+    {
+      send_addParsingTemplatesForExperiment(authzToken, templateIds, experimentId);
+      recv_addParsingTemplatesForExperiment();
+    }
+
+    public void send_addParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.util.List<java.lang.String> templateIds, java.lang.String experimentId) throws org.apache.thrift.TException
+    {
+      addParsingTemplatesForExperiment_args args = new addParsingTemplatesForExperiment_args();
+      args.setAuthzToken(authzToken);
+      args.setTemplateIds(templateIds);
+      args.setExperimentId(experimentId);
+      sendBase("addParsingTemplatesForExperiment", args);
+    }
+
+    public void recv_addParsingTemplatesForExperiment() throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException
+    {
+      addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
+      receiveBase(result, "addParsingTemplatesForExperiment");
+      if (result.ire != null) {
+        throw result.ire;
+      }
+      if (result.ace != null) {
+        throw result.ace;
+      }
+      if (result.ase != null) {
+        throw result.ase;
+      }
+      if (result.ae != null) {
+        throw result.ae;
+      }
+      return;
+    }
+
     public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String experimentId, java.lang.String gatewayId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException
     {
       send_getParsingTemplatesForExperiment(authzToken, experimentId, gatewayId);
@@ -17413,6 +17492,82 @@ public class Airavata {
       }
     }
 
+    public void getParsingTemplatesForApplication(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appInterfaceId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      getParsingTemplatesForApplication_call method_call = new getParsingTemplatesForApplication_call(authzToken, appInterfaceId, gatewayId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class getParsingTemplatesForApplication_call extends org.apache.thrift.async.TAsyncMethodCall<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
+      private org.apache.airavata.model.security.AuthzToken authzToken;
+      private java.lang.String appInterfaceId;
+      private java.lang.String gatewayId;
+      public getParsingTemplatesForApplication_call(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String appInterfaceId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache. [...]
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.authzToken = authzToken;
+        this.appInterfaceId = appInterfaceId;
+        this.gatewayId = gatewayId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getParsingTemplatesForApplication", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        getParsingTemplatesForApplication_args args = new getParsingTemplatesForApplication_args();
+        args.setAuthzToken(authzToken);
+        args.setAppInterfaceId(appInterfaceId);
+        args.setGatewayId(gatewayId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getResult() throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_getParsingTemplatesForApplication();
+      }
+    }
+
+    public void addParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.util.List<java.lang.String> templateIds, java.lang.String experimentId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      addParsingTemplatesForExperiment_call method_call = new addParsingTemplatesForExperiment_call(authzToken, templateIds, experimentId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class addParsingTemplatesForExperiment_call extends org.apache.thrift.async.TAsyncMethodCall<Void> {
+      private org.apache.airavata.model.security.AuthzToken authzToken;
+      private java.util.List<java.lang.String> templateIds;
+      private java.lang.String experimentId;
+      public addParsingTemplatesForExperiment_call(org.apache.airavata.model.security.AuthzToken authzToken, java.util.List<java.lang.String> templateIds, java.lang.String experimentId, org.apache.thrift.async.AsyncMethodCallback<Void> 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.authzToken = authzToken;
+        this.templateIds = templateIds;
+        this.experimentId = experimentId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("addParsingTemplatesForExperiment", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        addParsingTemplatesForExperiment_args args = new addParsingTemplatesForExperiment_args();
+        args.setAuthzToken(authzToken);
+        args.setTemplateIds(templateIds);
+        args.setExperimentId(experimentId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public Void getResult() throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.AuthorizationException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return null;
+      }
+    }
+
     public void getParsingTemplatesForExperiment(org.apache.airavata.model.security.AuthzToken authzToken, java.lang.String experimentId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
       checkReady();
       getParsingTemplatesForExperiment_call method_call = new getParsingTemplatesForExperiment_call(authzToken, experimentId, gatewayId, resultHandler, this, ___protocolFactory, ___transport);
@@ -17759,6 +17914,8 @@ public class Airavata {
       processMap.put("listAllParsers", new listAllParsers());
       processMap.put("removeParser", new removeParser());
       processMap.put("getParsingTemplate", new getParsingTemplate());
+      processMap.put("getParsingTemplatesForApplication", new getParsingTemplatesForApplication());
+      processMap.put("addParsingTemplatesForExperiment", new addParsingTemplatesForExperiment());
       processMap.put("getParsingTemplatesForExperiment", new getParsingTemplatesForExperiment());
       processMap.put("saveParsingTemplate", new saveParsingTemplate());
       processMap.put("removeParsingTemplate", new removeParsingTemplate());
@@ -23465,6 +23622,66 @@ public class Airavata {
       }
     }
 
+    public static class getParsingTemplatesForApplication<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getParsingTemplatesForApplication_args> {
+      public getParsingTemplatesForApplication() {
+        super("getParsingTemplatesForApplication");
+      }
+
+      public getParsingTemplatesForApplication_args getEmptyArgsInstance() {
+        return new getParsingTemplatesForApplication_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public getParsingTemplatesForApplication_result getResult(I iface, getParsingTemplatesForApplication_args args) throws org.apache.thrift.TException {
+        getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
+        try {
+          result.success = iface.getParsingTemplatesForApplication(args.authzToken, args.appInterfaceId, args.gatewayId);
+        } catch (org.apache.airavata.model.error.InvalidRequestException ire) {
+          result.ire = ire;
+        } catch (org.apache.airavata.model.error.AiravataClientException ace) {
+          result.ace = ace;
+        } catch (org.apache.airavata.model.error.AiravataSystemException ase) {
+          result.ase = ase;
+        } catch (org.apache.airavata.model.error.AuthorizationException ae) {
+          result.ae = ae;
+        }
+        return result;
+      }
+    }
+
+    public static class addParsingTemplatesForExperiment<I extends Iface> extends org.apache.thrift.ProcessFunction<I, addParsingTemplatesForExperiment_args> {
+      public addParsingTemplatesForExperiment() {
+        super("addParsingTemplatesForExperiment");
+      }
+
+      public addParsingTemplatesForExperiment_args getEmptyArgsInstance() {
+        return new addParsingTemplatesForExperiment_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public addParsingTemplatesForExperiment_result getResult(I iface, addParsingTemplatesForExperiment_args args) throws org.apache.thrift.TException {
+        addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
+        try {
+          iface.addParsingTemplatesForExperiment(args.authzToken, args.templateIds, args.experimentId);
+        } catch (org.apache.airavata.model.error.InvalidRequestException ire) {
+          result.ire = ire;
+        } catch (org.apache.airavata.model.error.AiravataClientException ace) {
+          result.ace = ace;
+        } catch (org.apache.airavata.model.error.AiravataSystemException ase) {
+          result.ase = ase;
+        } catch (org.apache.airavata.model.error.AuthorizationException ae) {
+          result.ae = ae;
+        }
+        return result;
+      }
+    }
+
     public static class getParsingTemplatesForExperiment<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getParsingTemplatesForExperiment_args> {
       public getParsingTemplatesForExperiment() {
         super("getParsingTemplatesForExperiment");
@@ -23786,6 +24003,8 @@ public class Airavata {
       processMap.put("listAllParsers", new listAllParsers());
       processMap.put("removeParser", new removeParser());
       processMap.put("getParsingTemplate", new getParsingTemplate());
+      processMap.put("getParsingTemplatesForApplication", new getParsingTemplatesForApplication());
+      processMap.put("addParsingTemplatesForExperiment", new addParsingTemplatesForExperiment());
       processMap.put("getParsingTemplatesForExperiment", new getParsingTemplatesForExperiment());
       processMap.put("saveParsingTemplate", new saveParsingTemplate());
       processMap.put("removeParsingTemplate", new removeParsingTemplate());
@@ -38296,97 +38515,20 @@ public class Airavata {
       }
     }
 
-    public static class getParsingTemplatesForExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getParsingTemplatesForExperiment_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
-      public getParsingTemplatesForExperiment() {
-        super("getParsingTemplatesForExperiment");
+    public static class getParsingTemplatesForApplication<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getParsingTemplatesForApplication_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
+      public getParsingTemplatesForApplication() {
+        super("getParsingTemplatesForApplication");
       }
 
-      public getParsingTemplatesForExperiment_args getEmptyArgsInstance() {
-        return new getParsingTemplatesForExperiment_args();
+      public getParsingTemplatesForApplication_args getEmptyArgsInstance() {
+        return new getParsingTemplatesForApplication_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>>() { 
           public void onComplete(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> o) {
-            getParsingTemplatesForExperiment_result result = new getParsingTemplatesForExperiment_result();
-            result.success = o;
-            try {
-              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-            } catch (org.apache.thrift.transport.TTransportException e) {
-              _LOGGER.error("TTransportException writing to internal frame buffer", e);
-              fb.close();
-            } catch (java.lang.Exception e) {
-              _LOGGER.error("Exception writing to internal frame buffer", e);
-              onError(e);
-            }
-          }
-          public void onError(java.lang.Exception e) {
-            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-            org.apache.thrift.TSerializable msg;
-            getParsingTemplatesForExperiment_result result = new getParsingTemplatesForExperiment_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-              result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-              result.setIreIsSet(true);
-              msg = result;
-            } else if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-              result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-              result.setAceIsSet(true);
-              msg = result;
-            } else if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-              result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-              result.setAseIsSet(true);
-              msg = result;
-            } else if (e instanceof org.apache.airavata.model.error.AuthorizationException) {
-              result.ae = (org.apache.airavata.model.error.AuthorizationException) e;
-              result.setAeIsSet(true);
-              msg = result;
-            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
-              _LOGGER.error("TTransportException inside handler", e);
-              fb.close();
-              return;
-            } else if (e instanceof org.apache.thrift.TApplicationException) {
-              _LOGGER.error("TApplicationException inside handler", e);
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = (org.apache.thrift.TApplicationException)e;
-            } else {
-              _LOGGER.error("Exception inside handler", e);
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-            }
-            try {
-              fcall.sendResponse(fb,msg,msgType,seqid);
-            } catch (java.lang.Exception ex) {
-              _LOGGER.error("Exception writing to internal frame buffer", ex);
-              fb.close();
-            }
-          }
-        };
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public void start(I iface, getParsingTemplatesForExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
-        iface.getParsingTemplatesForExperiment(args.authzToken, args.experimentId, args.gatewayId,resultHandler);
-      }
-    }
-
-    public static class saveParsingTemplate<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, saveParsingTemplate_args, java.lang.String> {
-      public saveParsingTemplate() {
-        super("saveParsingTemplate");
-      }
-
-      public saveParsingTemplate_args getEmptyArgsInstance() {
-        return new saveParsingTemplate_args();
-      }
-
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
-        final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
-          public void onComplete(java.lang.String o) {
-            saveParsingTemplate_result result = new saveParsingTemplate_result();
+            getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -38401,7 +38543,7 @@ public class Airavata {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            saveParsingTemplate_result result = new saveParsingTemplate_result();
+            getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
               result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
               result.setIreIsSet(true);
@@ -38445,27 +38587,25 @@ public class Airavata {
         return false;
       }
 
-      public void start(I iface, saveParsingTemplate_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
-        iface.saveParsingTemplate(args.authzToken, args.parsingTemplate,resultHandler);
+      public void start(I iface, getParsingTemplatesForApplication_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
+        iface.getParsingTemplatesForApplication(args.authzToken, args.appInterfaceId, args.gatewayId,resultHandler);
       }
     }
 
-    public static class removeParsingTemplate<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, removeParsingTemplate_args, java.lang.Boolean> {
-      public removeParsingTemplate() {
-        super("removeParsingTemplate");
+    public static class addParsingTemplatesForExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, addParsingTemplatesForExperiment_args, Void> {
+      public addParsingTemplatesForExperiment() {
+        super("addParsingTemplatesForExperiment");
       }
 
-      public removeParsingTemplate_args getEmptyArgsInstance() {
-        return new removeParsingTemplate_args();
+      public addParsingTemplatesForExperiment_args getEmptyArgsInstance() {
+        return new addParsingTemplatesForExperiment_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            removeParsingTemplate_result result = new removeParsingTemplate_result();
-            result.success = o;
-            result.setSuccessIsSet(true);
+        return new org.apache.thrift.async.AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+            addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -38479,7 +38619,7 @@ public class Airavata {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            removeParsingTemplate_result result = new removeParsingTemplate_result();
+            addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
               result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
               result.setIreIsSet(true);
@@ -38523,25 +38663,25 @@ public class Airavata {
         return false;
       }
 
-      public void start(I iface, removeParsingTemplate_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.removeParsingTemplate(args.authzToken, args.templateId, args.gatewayId,resultHandler);
+      public void start(I iface, addParsingTemplatesForExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
+        iface.addParsingTemplatesForExperiment(args.authzToken, args.templateIds, args.experimentId,resultHandler);
       }
     }
 
-    public static class listAllParsingTemplates<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, listAllParsingTemplates_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
-      public listAllParsingTemplates() {
-        super("listAllParsingTemplates");
+    public static class getParsingTemplatesForExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getParsingTemplatesForExperiment_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
+      public getParsingTemplatesForExperiment() {
+        super("getParsingTemplatesForExperiment");
       }
 
-      public listAllParsingTemplates_args getEmptyArgsInstance() {
-        return new listAllParsingTemplates_args();
+      public getParsingTemplatesForExperiment_args getEmptyArgsInstance() {
+        return new getParsingTemplatesForExperiment_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>>() { 
           public void onComplete(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> o) {
-            listAllParsingTemplates_result result = new listAllParsingTemplates_result();
+            getParsingTemplatesForExperiment_result result = new getParsingTemplatesForExperiment_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -38556,7 +38696,239 @@ public class Airavata {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            listAllParsingTemplates_result result = new listAllParsingTemplates_result();
+            getParsingTemplatesForExperiment_result result = new getParsingTemplatesForExperiment_result();
+            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
+              result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
+              result.setIreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
+              result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
+              result.setAceIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
+              result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
+              result.setAseIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AuthorizationException) {
+              result.ae = (org.apache.airavata.model.error.AuthorizationException) e;
+              result.setAeIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, getParsingTemplatesForExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
+        iface.getParsingTemplatesForExperiment(args.authzToken, args.experimentId, args.gatewayId,resultHandler);
+      }
+    }
+
+    public static class saveParsingTemplate<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, saveParsingTemplate_args, java.lang.String> {
+      public saveParsingTemplate() {
+        super("saveParsingTemplate");
+      }
+
+      public saveParsingTemplate_args getEmptyArgsInstance() {
+        return new saveParsingTemplate_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
+          public void onComplete(java.lang.String o) {
+            saveParsingTemplate_result result = new saveParsingTemplate_result();
+            result.success = o;
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            saveParsingTemplate_result result = new saveParsingTemplate_result();
+            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
+              result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
+              result.setIreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
+              result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
+              result.setAceIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
+              result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
+              result.setAseIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AuthorizationException) {
+              result.ae = (org.apache.airavata.model.error.AuthorizationException) e;
+              result.setAeIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, saveParsingTemplate_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
+        iface.saveParsingTemplate(args.authzToken, args.parsingTemplate,resultHandler);
+      }
+    }
+
+    public static class removeParsingTemplate<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, removeParsingTemplate_args, java.lang.Boolean> {
+      public removeParsingTemplate() {
+        super("removeParsingTemplate");
+      }
+
+      public removeParsingTemplate_args getEmptyArgsInstance() {
+        return new removeParsingTemplate_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            removeParsingTemplate_result result = new removeParsingTemplate_result();
+            result.success = o;
+            result.setSuccessIsSet(true);
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            removeParsingTemplate_result result = new removeParsingTemplate_result();
+            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
+              result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
+              result.setIreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
+              result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
+              result.setAceIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
+              result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
+              result.setAseIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.airavata.model.error.AuthorizationException) {
+              result.ae = (org.apache.airavata.model.error.AuthorizationException) e;
+              result.setAeIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, removeParsingTemplate_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.removeParsingTemplate(args.authzToken, args.templateId, args.gatewayId,resultHandler);
+      }
+    }
+
+    public static class listAllParsingTemplates<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, listAllParsingTemplates_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
+      public listAllParsingTemplates() {
+        super("listAllParsingTemplates");
+      }
+
+      public listAllParsingTemplates_args getEmptyArgsInstance() {
+        return new listAllParsingTemplates_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> o) {
+            listAllParsingTemplates_result result = new listAllParsingTemplates_result();
+            result.success = o;
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            listAllParsingTemplates_result result = new listAllParsingTemplates_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
               result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
               result.setIreIsSet(true);
@@ -289238,24 +289610,24 @@ public class Airavata {
     }
   }
 
-  public static class getParsingTemplatesForExperiment_args implements org.apache.thrift.TBase<getParsingTemplatesForExperiment_args, getParsingTemplatesForExperiment_args._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForExperiment_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForExperiment_args");
+  public static class getParsingTemplatesForApplication_args implements org.apache.thrift.TBase<getParsingTemplatesForApplication_args, getParsingTemplatesForApplication_args._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForApplication_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForApplication_args");
 
     private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
-    private static final org.apache.thrift.protocol.TField EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField APP_INTERFACE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("appInterfaceId", org.apache.thrift.protocol.TType.STRING, (short)2);
     private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForExperiment_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForExperiment_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForApplication_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForApplication_argsTupleSchemeFactory();
 
     public org.apache.airavata.model.security.AuthzToken authzToken; // required
-    public java.lang.String experimentId; // required
+    public java.lang.String appInterfaceId; // required
     public java.lang.String gatewayId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       AUTHZ_TOKEN((short)1, "authzToken"),
-      EXPERIMENT_ID((short)2, "experimentId"),
+      APP_INTERFACE_ID((short)2, "appInterfaceId"),
       GATEWAY_ID((short)3, "gatewayId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
@@ -289273,8 +289645,8 @@ public class Airavata {
         switch(fieldId) {
           case 1: // AUTHZ_TOKEN
             return AUTHZ_TOKEN;
-          case 2: // EXPERIMENT_ID
-            return EXPERIMENT_ID;
+          case 2: // APP_INTERFACE_ID
+            return APP_INTERFACE_ID;
           case 3: // GATEWAY_ID
             return GATEWAY_ID;
           default:
@@ -289322,51 +289694,51 @@ public class Airavata {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.AUTHZ_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("authzToken", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
-      tmpMap.put(_Fields.EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("experimentId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+      tmpMap.put(_Fields.APP_INTERFACE_ID, new org.apache.thrift.meta_data.FieldMetaData("appInterfaceId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForExperiment_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForApplication_args.class, metaDataMap);
     }
 
-    public getParsingTemplatesForExperiment_args() {
+    public getParsingTemplatesForApplication_args() {
     }
 
-    public getParsingTemplatesForExperiment_args(
+    public getParsingTemplatesForApplication_args(
       org.apache.airavata.model.security.AuthzToken authzToken,
-      java.lang.String experimentId,
+      java.lang.String appInterfaceId,
       java.lang.String gatewayId)
     {
       this();
       this.authzToken = authzToken;
-      this.experimentId = experimentId;
+      this.appInterfaceId = appInterfaceId;
       this.gatewayId = gatewayId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getParsingTemplatesForExperiment_args(getParsingTemplatesForExperiment_args other) {
+    public getParsingTemplatesForApplication_args(getParsingTemplatesForApplication_args other) {
       if (other.isSetAuthzToken()) {
         this.authzToken = new org.apache.airavata.model.security.AuthzToken(other.authzToken);
       }
-      if (other.isSetExperimentId()) {
-        this.experimentId = other.experimentId;
+      if (other.isSetAppInterfaceId()) {
+        this.appInterfaceId = other.appInterfaceId;
       }
       if (other.isSetGatewayId()) {
         this.gatewayId = other.gatewayId;
       }
     }
 
-    public getParsingTemplatesForExperiment_args deepCopy() {
-      return new getParsingTemplatesForExperiment_args(this);
+    public getParsingTemplatesForApplication_args deepCopy() {
+      return new getParsingTemplatesForApplication_args(this);
     }
 
     @Override
     public void clear() {
       this.authzToken = null;
-      this.experimentId = null;
+      this.appInterfaceId = null;
       this.gatewayId = null;
     }
 
@@ -289374,7 +289746,7 @@ public class Airavata {
       return this.authzToken;
     }
 
-    public getParsingTemplatesForExperiment_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
+    public getParsingTemplatesForApplication_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
       this.authzToken = authzToken;
       return this;
     }
@@ -289394,27 +289766,27 @@ public class Airavata {
       }
     }
 
-    public java.lang.String getExperimentId() {
-      return this.experimentId;
+    public java.lang.String getAppInterfaceId() {
+      return this.appInterfaceId;
     }
 
-    public getParsingTemplatesForExperiment_args setExperimentId(java.lang.String experimentId) {
-      this.experimentId = experimentId;
+    public getParsingTemplatesForApplication_args setAppInterfaceId(java.lang.String appInterfaceId) {
+      this.appInterfaceId = appInterfaceId;
       return this;
     }
 
-    public void unsetExperimentId() {
-      this.experimentId = null;
+    public void unsetAppInterfaceId() {
+      this.appInterfaceId = null;
     }
 
-    /** Returns true if field experimentId is set (has been assigned a value) and false otherwise */
-    public boolean isSetExperimentId() {
-      return this.experimentId != null;
+    /** Returns true if field appInterfaceId is set (has been assigned a value) and false otherwise */
+    public boolean isSetAppInterfaceId() {
+      return this.appInterfaceId != null;
     }
 
-    public void setExperimentIdIsSet(boolean value) {
+    public void setAppInterfaceIdIsSet(boolean value) {
       if (!value) {
-        this.experimentId = null;
+        this.appInterfaceId = null;
       }
     }
 
@@ -289422,7 +289794,7 @@ public class Airavata {
       return this.gatewayId;
     }
 
-    public getParsingTemplatesForExperiment_args setGatewayId(java.lang.String gatewayId) {
+    public getParsingTemplatesForApplication_args setGatewayId(java.lang.String gatewayId) {
       this.gatewayId = gatewayId;
       return this;
     }
@@ -289452,11 +289824,11 @@ public class Airavata {
         }
         break;
 
-      case EXPERIMENT_ID:
+      case APP_INTERFACE_ID:
         if (value == null) {
-          unsetExperimentId();
+          unsetAppInterfaceId();
         } else {
-          setExperimentId((java.lang.String)value);
+          setAppInterfaceId((java.lang.String)value);
         }
         break;
 
@@ -289476,8 +289848,8 @@ public class Airavata {
       case AUTHZ_TOKEN:
         return getAuthzToken();
 
-      case EXPERIMENT_ID:
-        return getExperimentId();
+      case APP_INTERFACE_ID:
+        return getAppInterfaceId();
 
       case GATEWAY_ID:
         return getGatewayId();
@@ -289495,8 +289867,8 @@ public class Airavata {
       switch (field) {
       case AUTHZ_TOKEN:
         return isSetAuthzToken();
-      case EXPERIMENT_ID:
-        return isSetExperimentId();
+      case APP_INTERFACE_ID:
+        return isSetAppInterfaceId();
       case GATEWAY_ID:
         return isSetGatewayId();
       }
@@ -289507,12 +289879,12 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getParsingTemplatesForExperiment_args)
-        return this.equals((getParsingTemplatesForExperiment_args)that);
+      if (that instanceof getParsingTemplatesForApplication_args)
+        return this.equals((getParsingTemplatesForApplication_args)that);
       return false;
     }
 
-    public boolean equals(getParsingTemplatesForExperiment_args that) {
+    public boolean equals(getParsingTemplatesForApplication_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -289527,12 +289899,12 @@ public class Airavata {
           return false;
       }
 
-      boolean this_present_experimentId = true && this.isSetExperimentId();
-      boolean that_present_experimentId = true && that.isSetExperimentId();
-      if (this_present_experimentId || that_present_experimentId) {
-        if (!(this_present_experimentId && that_present_experimentId))
+      boolean this_present_appInterfaceId = true && this.isSetAppInterfaceId();
+      boolean that_present_appInterfaceId = true && that.isSetAppInterfaceId();
+      if (this_present_appInterfaceId || that_present_appInterfaceId) {
+        if (!(this_present_appInterfaceId && that_present_appInterfaceId))
           return false;
-        if (!this.experimentId.equals(that.experimentId))
+        if (!this.appInterfaceId.equals(that.appInterfaceId))
           return false;
       }
 
@@ -289556,9 +289928,9 @@ public class Airavata {
       if (isSetAuthzToken())
         hashCode = hashCode * 8191 + authzToken.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetExperimentId()) ? 131071 : 524287);
-      if (isSetExperimentId())
-        hashCode = hashCode * 8191 + experimentId.hashCode();
+      hashCode = hashCode * 8191 + ((isSetAppInterfaceId()) ? 131071 : 524287);
+      if (isSetAppInterfaceId())
+        hashCode = hashCode * 8191 + appInterfaceId.hashCode();
 
       hashCode = hashCode * 8191 + ((isSetGatewayId()) ? 131071 : 524287);
       if (isSetGatewayId())
@@ -289568,7 +289940,7 @@ public class Airavata {
     }
 
     @Override
-    public int compareTo(getParsingTemplatesForExperiment_args other) {
+    public int compareTo(getParsingTemplatesForApplication_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -289585,12 +289957,12 @@ public class Airavata {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetExperimentId()).compareTo(other.isSetExperimentId());
+      lastComparison = java.lang.Boolean.valueOf(isSetAppInterfaceId()).compareTo(other.isSetAppInterfaceId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetExperimentId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentId, other.experimentId);
+      if (isSetAppInterfaceId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.appInterfaceId, other.appInterfaceId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -289622,7 +289994,7 @@ public class Airavata {
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getParsingTemplatesForExperiment_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getParsingTemplatesForApplication_args(");
       boolean first = true;
 
       sb.append("authzToken:");
@@ -289633,11 +290005,11 @@ public class Airavata {
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("experimentId:");
-      if (this.experimentId == null) {
+      sb.append("appInterfaceId:");
+      if (this.appInterfaceId == null) {
         sb.append("null");
       } else {
-        sb.append(this.experimentId);
+        sb.append(this.appInterfaceId);
       }
       first = false;
       if (!first) sb.append(", ");
@@ -289657,8 +290029,8 @@ public class Airavata {
       if (authzToken == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'authzToken' was not present! Struct: " + toString());
       }
-      if (experimentId == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'experimentId' was not present! Struct: " + toString());
+      if (appInterfaceId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'appInterfaceId' was not present! Struct: " + toString());
       }
       if (gatewayId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'gatewayId' was not present! Struct: " + toString());
@@ -289685,15 +290057,15 @@ public class Airavata {
       }
     }
 
-    private static class getParsingTemplatesForExperiment_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getParsingTemplatesForExperiment_argsStandardScheme getScheme() {
-        return new getParsingTemplatesForExperiment_argsStandardScheme();
+    private static class getParsingTemplatesForApplication_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForApplication_argsStandardScheme getScheme() {
+        return new getParsingTemplatesForApplication_argsStandardScheme();
       }
     }
 
-    private static class getParsingTemplatesForExperiment_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getParsingTemplatesForExperiment_args> {
+    private static class getParsingTemplatesForApplication_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getParsingTemplatesForApplication_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getParsingTemplatesForApplication_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -289712,10 +290084,10 @@ public class Airavata {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // EXPERIMENT_ID
+            case 2: // APP_INTERFACE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.experimentId = iprot.readString();
-                struct.setExperimentIdIsSet(true);
+                struct.appInterfaceId = iprot.readString();
+                struct.setAppInterfaceIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -289739,7 +290111,7 @@ public class Airavata {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getParsingTemplatesForApplication_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -289748,9 +290120,9 @@ public class Airavata {
           struct.authzToken.write(oprot);
           oprot.writeFieldEnd();
         }
-        if (struct.experimentId != null) {
-          oprot.writeFieldBegin(EXPERIMENT_ID_FIELD_DESC);
-          oprot.writeString(struct.experimentId);
+        if (struct.appInterfaceId != null) {
+          oprot.writeFieldBegin(APP_INTERFACE_ID_FIELD_DESC);
+          oprot.writeString(struct.appInterfaceId);
           oprot.writeFieldEnd();
         }
         if (struct.gatewayId != null) {
@@ -289764,30 +290136,30 @@ public class Airavata {
 
     }
 
-    private static class getParsingTemplatesForExperiment_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getParsingTemplatesForExperiment_argsTupleScheme getScheme() {
-        return new getParsingTemplatesForExperiment_argsTupleScheme();
+    private static class getParsingTemplatesForApplication_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForApplication_argsTupleScheme getScheme() {
+        return new getParsingTemplatesForApplication_argsTupleScheme();
       }
     }
 
-    private static class getParsingTemplatesForExperiment_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getParsingTemplatesForExperiment_args> {
+    private static class getParsingTemplatesForApplication_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getParsingTemplatesForApplication_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForApplication_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken.write(oprot);
-        oprot.writeString(struct.experimentId);
+        oprot.writeString(struct.appInterfaceId);
         oprot.writeString(struct.gatewayId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForApplication_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
         struct.authzToken.read(iprot);
         struct.setAuthzTokenIsSet(true);
-        struct.experimentId = iprot.readString();
-        struct.setExperimentIdIsSet(true);
+        struct.appInterfaceId = iprot.readString();
+        struct.setAppInterfaceIdIsSet(true);
         struct.gatewayId = iprot.readString();
         struct.setGatewayIdIsSet(true);
       }
@@ -289798,8 +290170,8 @@ public class Airavata {
     }
   }
 
-  public static class getParsingTemplatesForExperiment_result implements org.apache.thrift.TBase<getParsingTemplatesForExperiment_result, getParsingTemplatesForExperiment_result._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForExperiment_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForExperiment_result");
+  public static class getParsingTemplatesForApplication_result implements org.apache.thrift.TBase<getParsingTemplatesForApplication_result, getParsingTemplatesForApplication_result._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForApplication_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForApplication_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
     private static final org.apache.thrift.protocol.TField IRE_FIELD_DESC = new org.apache.thrift.protocol.TField("ire", org.apache.thrift.protocol.TType.STRUCT, (short)1);
@@ -289807,8 +290179,8 @@ public class Airavata {
     private static final org.apache.thrift.protocol.TField ASE_FIELD_DESC = new org.apache.thrift.protocol.TField("ase", org.apache.thrift.protocol.TType.STRUCT, (short)3);
     private static final org.apache.thrift.protocol.TField AE_FIELD_DESC = new org.apache.thrift.protocol.TField("ae", org.apache.thrift.protocol.TType.STRUCT, (short)4);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForExperiment_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForExperiment_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForApplication_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForApplication_resultTupleSchemeFactory();
 
     public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success; // required
     public org.apache.airavata.model.error.InvalidRequestException ire; // required
@@ -289902,13 +290274,13 @@ public class Airavata {
       tmpMap.put(_Fields.AE, new org.apache.thrift.meta_data.FieldMetaData("ae", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AuthorizationException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForExperiment_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForApplication_result.class, metaDataMap);
     }
 
-    public getParsingTemplatesForExperiment_result() {
+    public getParsingTemplatesForApplication_result() {
     }
 
-    public getParsingTemplatesForExperiment_result(
+    public getParsingTemplatesForApplication_result(
       java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success,
       org.apache.airavata.model.error.InvalidRequestException ire,
       org.apache.airavata.model.error.AiravataClientException ace,
@@ -289926,7 +290298,7 @@ public class Airavata {
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getParsingTemplatesForExperiment_result(getParsingTemplatesForExperiment_result other) {
+    public getParsingTemplatesForApplication_result(getParsingTemplatesForApplication_result other) {
       if (other.isSetSuccess()) {
         java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> __this__success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(other.success.size());
         for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate other_element : other.success) {
@@ -289948,8 +290320,8 @@ public class Airavata {
       }
     }
 
-    public getParsingTemplatesForExperiment_result deepCopy() {
-      return new getParsingTemplatesForExperiment_result(this);
+    public getParsingTemplatesForApplication_result deepCopy() {
+      return new getParsingTemplatesForApplication_result(this);
     }
 
     @Override
@@ -289980,7 +290352,7 @@ public class Airavata {
       return this.success;
     }
 
-    public getParsingTemplatesForExperiment_result setSuccess(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success) {
+    public getParsingTemplatesForApplication_result setSuccess(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success) {
       this.success = success;
       return this;
     }
@@ -290004,7 +290376,7 @@ public class Airavata {
       return this.ire;
     }
 
-    public getParsingTemplatesForExperiment_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
+    public getParsingTemplatesForApplication_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
       this.ire = ire;
       return this;
     }
@@ -290028,7 +290400,7 @@ public class Airavata {
       return this.ace;
     }
 
-    public getParsingTemplatesForExperiment_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
+    public getParsingTemplatesForApplication_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
       this.ace = ace;
       return this;
     }
@@ -290052,7 +290424,7 @@ public class Airavata {
       return this.ase;
     }
 
-    public getParsingTemplatesForExperiment_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
+    public getParsingTemplatesForApplication_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
       this.ase = ase;
       return this;
     }
@@ -290076,7 +290448,7 @@ public class Airavata {
       return this.ae;
     }
 
-    public getParsingTemplatesForExperiment_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
+    public getParsingTemplatesForApplication_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
       this.ae = ae;
       return this;
     }
@@ -290187,12 +290559,12 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getParsingTemplatesForExperiment_result)
-        return this.equals((getParsingTemplatesForExperiment_result)that);
+      if (that instanceof getParsingTemplatesForApplication_result)
+        return this.equals((getParsingTemplatesForApplication_result)that);
       return false;
     }
 
-    public boolean equals(getParsingTemplatesForExperiment_result that) {
+    public boolean equals(getParsingTemplatesForApplication_result that) {
       if (that == null)
         return false;
       if (this == that)
@@ -290274,7 +290646,7 @@ public class Airavata {
     }
 
     @Override
-    public int compareTo(getParsingTemplatesForExperiment_result other) {
+    public int compareTo(getParsingTemplatesForApplication_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -290348,7 +290720,7 @@ public class Airavata {
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getParsingTemplatesForExperiment_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getParsingTemplatesForApplication_result(");
       boolean first = true;
 
       sb.append("success:");
@@ -290415,15 +290787,15 @@ public class Airavata {
       }
     }
 
-    private static class getParsingTemplatesForExperiment_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getParsingTemplatesForExperiment_resultStandardScheme getScheme() {
-        return new getParsingTemplatesForExperiment_resultStandardScheme();
+    private static class getParsingTemplatesForApplication_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForApplication_resultStandardScheme getScheme() {
+        return new getParsingTemplatesForApplication_resultStandardScheme();
       }
     }
 
-    private static class getParsingTemplatesForExperiment_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getParsingTemplatesForExperiment_result> {
+    private static class getParsingTemplatesForApplication_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getParsingTemplatesForApplication_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getParsingTemplatesForApplication_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -290499,7 +290871,7 @@ public class Airavata {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getParsingTemplatesForApplication_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -290541,16 +290913,16 @@ public class Airavata {
 
     }
 
-    private static class getParsingTemplatesForExperiment_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getParsingTemplatesForExperiment_resultTupleScheme getScheme() {
-        return new getParsingTemplatesForExperiment_resultTupleScheme();
+    private static class getParsingTemplatesForApplication_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForApplication_resultTupleScheme getScheme() {
+        return new getParsingTemplatesForApplication_resultTupleScheme();
       }
     }
 
-    private static class getParsingTemplatesForExperiment_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getParsingTemplatesForExperiment_result> {
+    private static class getParsingTemplatesForApplication_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getParsingTemplatesForApplication_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForApplication_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
         if (struct.isSetSuccess()) {
@@ -290593,7 +290965,7 @@ public class Airavata {
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForApplication_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet incoming = iprot.readBitSet(5);
         if (incoming.get(0)) {
@@ -290638,22 +291010,25 @@ public class Airavata {
     }
   }
 
-  public static class saveParsingTemplate_args implements org.apache.thrift.TBase<saveParsingTemplate_args, saveParsingTemplate_args._Fields>, java.io.Serializable, Cloneable, Comparable<saveParsingTemplate_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("saveParsingTemplate_args");
+  public static class addParsingTemplatesForExperiment_args implements org.apache.thrift.TBase<addParsingTemplatesForExperiment_args, addParsingTemplatesForExperiment_args._Fields>, java.io.Serializable, Cloneable, Comparable<addParsingTemplatesForExperiment_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addParsingTemplatesForExperiment_args");
 
     private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
-    private static final org.apache.thrift.protocol.TField PARSING_TEMPLATE_FIELD_DESC = new org.apache.thrift.protocol.TField("parsingTemplate", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+    private static final org.apache.thrift.protocol.TField TEMPLATE_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("templateIds", org.apache.thrift.protocol.TType.LIST, (short)2);
+    private static final org.apache.thrift.protocol.TField EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new saveParsingTemplate_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new saveParsingTemplate_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addParsingTemplatesForExperiment_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addParsingTemplatesForExperiment_argsTupleSchemeFactory();
 
     public org.apache.airavata.model.security.AuthzToken authzToken; // required
-    public org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate; // required
+    public java.util.List<java.lang.String> templateIds; // required
+    public java.lang.String experimentId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       AUTHZ_TOKEN((short)1, "authzToken"),
-      PARSING_TEMPLATE((short)2, "parsingTemplate");
+      TEMPLATE_IDS((short)2, "templateIds"),
+      EXPERIMENT_ID((short)3, "experimentId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -290670,8 +291045,10 @@ public class Airavata {
         switch(fieldId) {
           case 1: // AUTHZ_TOKEN
             return AUTHZ_TOKEN;
-          case 2: // PARSING_TEMPLATE
-            return PARSING_TEMPLATE;
+          case 2: // TEMPLATE_IDS
+            return TEMPLATE_IDS;
+          case 3: // EXPERIMENT_ID
+            return EXPERIMENT_ID;
           default:
             return null;
         }
@@ -290717,51 +291094,61 @@ public class Airavata {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.AUTHZ_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("authzToken", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
-      tmpMap.put(_Fields.PARSING_TEMPLATE, new org.apache.thrift.meta_data.FieldMetaData("parsingTemplate", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.appcatalog.parser.ParsingTemplate.class)));
+      tmpMap.put(_Fields.TEMPLATE_IDS, new org.apache.thrift.meta_data.FieldMetaData("templateIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
+      tmpMap.put(_Fields.EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("experimentId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(saveParsingTemplate_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addParsingTemplatesForExperiment_args.class, metaDataMap);
     }
 
-    public saveParsingTemplate_args() {
+    public addParsingTemplatesForExperiment_args() {
     }
 
-    public saveParsingTemplate_args(
+    public addParsingTemplatesForExperiment_args(
       org.apache.airavata.model.security.AuthzToken authzToken,
-      org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate)
+      java.util.List<java.lang.String> templateIds,
+      java.lang.String experimentId)
     {
       this();
       this.authzToken = authzToken;
-      this.parsingTemplate = parsingTemplate;
+      this.templateIds = templateIds;
+      this.experimentId = experimentId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public saveParsingTemplate_args(saveParsingTemplate_args other) {
+    public addParsingTemplatesForExperiment_args(addParsingTemplatesForExperiment_args other) {
       if (other.isSetAuthzToken()) {
         this.authzToken = new org.apache.airavata.model.security.AuthzToken(other.authzToken);
       }
-      if (other.isSetParsingTemplate()) {
-        this.parsingTemplate = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate(other.parsingTemplate);
+      if (other.isSetTemplateIds()) {
+        java.util.List<java.lang.String> __this__templateIds = new java.util.ArrayList<java.lang.String>(other.templateIds);
+        this.templateIds = __this__templateIds;
+      }
+      if (other.isSetExperimentId()) {
+        this.experimentId = other.experimentId;
       }
     }
 
-    public saveParsingTemplate_args deepCopy() {
-      return new saveParsingTemplate_args(this);
+    public addParsingTemplatesForExperiment_args deepCopy() {
+      return new addParsingTemplatesForExperiment_args(this);
     }
 
     @Override
     public void clear() {
       this.authzToken = null;
-      this.parsingTemplate = null;
+      this.templateIds = null;
+      this.experimentId = null;
     }
 
     public org.apache.airavata.model.security.AuthzToken getAuthzToken() {
       return this.authzToken;
     }
 
-    public saveParsingTemplate_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
+    public addParsingTemplatesForExperiment_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
       this.authzToken = authzToken;
       return this;
     }
@@ -290781,27 +291168,66 @@ public class Airavata {
       }
     }
 
-    public org.apache.airavata.model.appcatalog.parser.ParsingTemplate getParsingTemplate() {
-      return this.parsingTemplate;
+    public int getTemplateIdsSize() {
+      return (this.templateIds == null) ? 0 : this.templateIds.size();
     }
 
-    public saveParsingTemplate_args setParsingTemplate(org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate) {
-      this.parsingTemplate = parsingTemplate;
+    public java.util.Iterator<java.lang.String> getTemplateIdsIterator() {
+      return (this.templateIds == null) ? null : this.templateIds.iterator();
+    }
+
+    public void addToTemplateIds(java.lang.String elem) {
+      if (this.templateIds == null) {
+        this.templateIds = new java.util.ArrayList<java.lang.String>();
+      }
+      this.templateIds.add(elem);
+    }
+
+    public java.util.List<java.lang.String> getTemplateIds() {
+      return this.templateIds;
+    }
+
+    public addParsingTemplatesForExperiment_args setTemplateIds(java.util.List<java.lang.String> templateIds) {
+      this.templateIds = templateIds;
       return this;
     }
 
-    public void unsetParsingTemplate() {
-      this.parsingTemplate = null;
+    public void unsetTemplateIds() {
+      this.templateIds = null;
     }
 
-    /** Returns true if field parsingTemplate is set (has been assigned a value) and false otherwise */
-    public boolean isSetParsingTemplate() {
-      return this.parsingTemplate != null;
+    /** Returns true if field templateIds is set (has been assigned a value) and false otherwise */
+    public boolean isSetTemplateIds() {
+      return this.templateIds != null;
     }
 
-    public void setParsingTemplateIsSet(boolean value) {
+    public void setTemplateIdsIsSet(boolean value) {
       if (!value) {
-        this.parsingTemplate = null;
+        this.templateIds = null;
+      }
+    }
+
+    public java.lang.String getExperimentId() {
+      return this.experimentId;
+    }
+
+    public addParsingTemplatesForExperiment_args setExperimentId(java.lang.String experimentId) {
+      this.experimentId = experimentId;
+      return this;
+    }
+
+    public void unsetExperimentId() {
+      this.experimentId = null;
+    }
+
+    /** Returns true if field experimentId is set (has been assigned a value) and false otherwise */
+    public boolean isSetExperimentId() {
+      return this.experimentId != null;
+    }
+
+    public void setExperimentIdIsSet(boolean value) {
+      if (!value) {
+        this.experimentId = null;
       }
     }
 
@@ -290815,11 +291241,19 @@ public class Airavata {
         }
         break;
 
-      case PARSING_TEMPLATE:
+      case TEMPLATE_IDS:
         if (value == null) {
-          unsetParsingTemplate();
+          unsetTemplateIds();
         } else {
-          setParsingTemplate((org.apache.airavata.model.appcatalog.parser.ParsingTemplate)value);
+          setTemplateIds((java.util.List<java.lang.String>)value);
+        }
+        break;
+
+      case EXPERIMENT_ID:
+        if (value == null) {
+          unsetExperimentId();
+        } else {
+          setExperimentId((java.lang.String)value);
         }
         break;
 
@@ -290831,8 +291265,11 @@ public class Airavata {
       case AUTHZ_TOKEN:
         return getAuthzToken();
 
-      case PARSING_TEMPLATE:
-        return getParsingTemplate();
+      case TEMPLATE_IDS:
+        return getTemplateIds();
+
+      case EXPERIMENT_ID:
+        return getExperimentId();
 
       }
       throw new java.lang.IllegalStateException();
@@ -290847,8 +291284,10 @@ public class Airavata {
       switch (field) {
       case AUTHZ_TOKEN:
         return isSetAuthzToken();
-      case PARSING_TEMPLATE:
-        return isSetParsingTemplate();
+      case TEMPLATE_IDS:
+        return isSetTemplateIds();
+      case EXPERIMENT_ID:
+        return isSetExperimentId();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -290857,12 +291296,12 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof saveParsingTemplate_args)
-        return this.equals((saveParsingTemplate_args)that);
+      if (that instanceof addParsingTemplatesForExperiment_args)
+        return this.equals((addParsingTemplatesForExperiment_args)that);
       return false;
     }
 
-    public boolean equals(saveParsingTemplate_args that) {
+    public boolean equals(addParsingTemplatesForExperiment_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -290877,12 +291316,21 @@ public class Airavata {
           return false;
       }
 
-      boolean this_present_parsingTemplate = true && this.isSetParsingTemplate();
-      boolean that_present_parsingTemplate = true && that.isSetParsingTemplate();
-      if (this_present_parsingTemplate || that_present_parsingTemplate) {
-        if (!(this_present_parsingTemplate && that_present_parsingTemplate))
+      boolean this_present_templateIds = true && this.isSetTemplateIds();
+      boolean that_present_templateIds = true && that.isSetTemplateIds();
+      if (this_present_templateIds || that_present_templateIds) {
+        if (!(this_present_templateIds && that_present_templateIds))
           return false;
-        if (!this.parsingTemplate.equals(that.parsingTemplate))
+        if (!this.templateIds.equals(that.templateIds))
+          return false;
+      }
+
+      boolean this_present_experimentId = true && this.isSetExperimentId();
+      boolean that_present_experimentId = true && that.isSetExperimentId();
+      if (this_present_experimentId || that_present_experimentId) {
+        if (!(this_present_experimentId && that_present_experimentId))
+          return false;
+        if (!this.experimentId.equals(that.experimentId))
           return false;
       }
 
@@ -290897,15 +291345,19 @@ public class Airavata {
       if (isSetAuthzToken())
         hashCode = hashCode * 8191 + authzToken.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetParsingTemplate()) ? 131071 : 524287);
-      if (isSetParsingTemplate())
-        hashCode = hashCode * 8191 + parsingTemplate.hashCode();
+      hashCode = hashCode * 8191 + ((isSetTemplateIds()) ? 131071 : 524287);
+      if (isSetTemplateIds())
+        hashCode = hashCode * 8191 + templateIds.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetExperimentId()) ? 131071 : 524287);
+      if (isSetExperimentId())
+        hashCode = hashCode * 8191 + experimentId.hashCode();
 
       return hashCode;
     }
 
     @Override
-    public int compareTo(saveParsingTemplate_args other) {
+    public int compareTo(addParsingTemplatesForExperiment_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -290922,12 +291374,22 @@ public class Airavata {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetParsingTemplate()).compareTo(other.isSetParsingTemplate());
+      lastComparison = java.lang.Boolean.valueOf(isSetTemplateIds()).compareTo(other.isSetTemplateIds());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetParsingTemplate()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.parsingTemplate, other.parsingTemplate);
+      if (isSetTemplateIds()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.templateIds, other.templateIds);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetExperimentId()).compareTo(other.isSetExperimentId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetExperimentId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentId, other.experimentId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -290949,7 +291411,7 @@ public class Airavata {
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("saveParsingTemplate_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("addParsingTemplatesForExperiment_args(");
       boolean first = true;
 
       sb.append("authzToken:");
@@ -290960,11 +291422,19 @@ public class Airavata {
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("parsingTemplate:");
-      if (this.parsingTemplate == null) {
+      sb.append("templateIds:");
+      if (this.templateIds == null) {
         sb.append("null");
       } else {
-        sb.append(this.parsingTemplate);
+        sb.append(this.templateIds);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("experimentId:");
+      if (this.experimentId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.experimentId);
       }
       first = false;
       sb.append(")");
@@ -290976,16 +291446,16 @@ public class Airavata {
       if (authzToken == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'authzToken' was not present! Struct: " + toString());
       }
-      if (parsingTemplate == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'parsingTemplate' was not present! Struct: " + toString());
+      if (templateIds == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'templateIds' was not present! Struct: " + toString());
+      }
+      if (experimentId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'experimentId' was not present! Struct: " + toString());
       }
       // check for sub-struct validity
       if (authzToken != null) {
         authzToken.validate();
       }
-      if (parsingTemplate != null) {
-        parsingTemplate.validate();
-      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -291004,15 +291474,15 @@ public class Airavata {
       }
     }
 
-    private static class saveParsingTemplate_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public saveParsingTemplate_argsStandardScheme getScheme() {
-        return new saveParsingTemplate_argsStandardScheme();
+    private static class addParsingTemplatesForExperiment_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addParsingTemplatesForExperiment_argsStandardScheme getScheme() {
+        return new addParsingTemplatesForExperiment_argsStandardScheme();
       }
     }
 
-    private static class saveParsingTemplate_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<saveParsingTemplate_args> {
+    private static class addParsingTemplatesForExperiment_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<addParsingTemplatesForExperiment_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, addParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -291031,11 +291501,28 @@ public class Airavata {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // PARSING_TEMPLATE
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
-                struct.parsingTemplate = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
-                struct.parsingTemplate.read(iprot);
-                struct.setParsingTemplateIsSet(true);
+            case 2: // TEMPLATE_IDS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list450 = iprot.readListBegin();
+                  struct.templateIds = new java.util.ArrayList<java.lang.String>(_list450.size);
+                  java.lang.String _elem451;
+                  for (int _i452 = 0; _i452 < _list450.size; ++_i452)
+                  {
+                    _elem451 = iprot.readString();
+                    struct.templateIds.add(_elem451);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setTemplateIdsIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // EXPERIMENT_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.experimentId = iprot.readString();
+                struct.setExperimentIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -291051,7 +291538,7 @@ public class Airavata {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, addParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -291060,9 +291547,21 @@ public class Airavata {
           struct.authzToken.write(oprot);
           oprot.writeFieldEnd();
         }
-        if (struct.parsingTemplate != null) {
-          oprot.writeFieldBegin(PARSING_TEMPLATE_FIELD_DESC);
-          struct.parsingTemplate.write(oprot);
+        if (struct.templateIds != null) {
+          oprot.writeFieldBegin(TEMPLATE_IDS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.templateIds.size()));
+            for (java.lang.String _iter453 : struct.templateIds)
+            {
+              oprot.writeString(_iter453);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.experimentId != null) {
+          oprot.writeFieldBegin(EXPERIMENT_ID_FIELD_DESC);
+          oprot.writeString(struct.experimentId);
           oprot.writeFieldEnd();
         }
         oprot.writeFieldStop();
@@ -291071,30 +291570,47 @@ public class Airavata {
 
     }
 
-    private static class saveParsingTemplate_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public saveParsingTemplate_argsTupleScheme getScheme() {
-        return new saveParsingTemplate_argsTupleScheme();
+    private static class addParsingTemplatesForExperiment_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addParsingTemplatesForExperiment_argsTupleScheme getScheme() {
+        return new addParsingTemplatesForExperiment_argsTupleScheme();
       }
     }
 
-    private static class saveParsingTemplate_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<saveParsingTemplate_args> {
+    private static class addParsingTemplatesForExperiment_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<addParsingTemplatesForExperiment_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, addParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken.write(oprot);
-        struct.parsingTemplate.write(oprot);
+        {
+          oprot.writeI32(struct.templateIds.size());
+          for (java.lang.String _iter454 : struct.templateIds)
+          {
+            oprot.writeString(_iter454);
+          }
+        }
+        oprot.writeString(struct.experimentId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, addParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
         struct.authzToken.read(iprot);
         struct.setAuthzTokenIsSet(true);
-        struct.parsingTemplate = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
-        struct.parsingTemplate.read(iprot);
-        struct.setParsingTemplateIsSet(true);
+        {
+          org.apache.thrift.protocol.TList _list455 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.templateIds = new java.util.ArrayList<java.lang.String>(_list455.size);
+          java.lang.String _elem456;
+          for (int _i457 = 0; _i457 < _list455.size; ++_i457)
+          {
+            _elem456 = iprot.readString();
+            struct.templateIds.add(_elem456);
+          }
+        }
+        struct.setTemplateIdsIsSet(true);
+        struct.experimentId = iprot.readString();
+        struct.setExperimentIdIsSet(true);
       }
     }
 
@@ -291103,19 +291619,17 @@ public class Airavata {
     }
   }
 
-  public static class saveParsingTemplate_result implements org.apache.thrift.TBase<saveParsingTemplate_result, saveParsingTemplate_result._Fields>, java.io.Serializable, Cloneable, Comparable<saveParsingTemplate_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("saveParsingTemplate_result");
+  public static class addParsingTemplatesForExperiment_result implements org.apache.thrift.TBase<addParsingTemplatesForExperiment_result, addParsingTemplatesForExperiment_result._Fields>, java.io.Serializable, Cloneable, Comparable<addParsingTemplatesForExperiment_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addParsingTemplatesForExperiment_result");
 
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
     private static final org.apache.thrift.protocol.TField IRE_FIELD_DESC = new org.apache.thrift.protocol.TField("ire", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField ACE_FIELD_DESC = new org.apache.thrift.protocol.TField("ace", org.apache.thrift.protocol.TType.STRUCT, (short)2);
     private static final org.apache.thrift.protocol.TField ASE_FIELD_DESC = new org.apache.thrift.protocol.TField("ase", org.apache.thrift.protocol.TType.STRUCT, (short)3);
     private static final org.apache.thrift.protocol.TField AE_FIELD_DESC = new org.apache.thrift.protocol.TField("ae", org.apache.thrift.protocol.TType.STRUCT, (short)4);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new saveParsingTemplate_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new saveParsingTemplate_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addParsingTemplatesForExperiment_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addParsingTemplatesForExperiment_resultTupleSchemeFactory();
 
-    public java.lang.String success; // required
     public org.apache.airavata.model.error.InvalidRequestException ire; // required
     public org.apache.airavata.model.error.AiravataClientException ace; // required
     public org.apache.airavata.model.error.AiravataSystemException ase; // required
@@ -291123,7 +291637,6 @@ public class Airavata {
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SUCCESS((short)0, "success"),
       IRE((short)1, "ire"),
       ACE((short)2, "ace"),
       ASE((short)3, "ase"),
@@ -291142,8 +291655,6 @@ public class Airavata {
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 0: // SUCCESS
-            return SUCCESS;
           case 1: // IRE
             return IRE;
           case 2: // ACE
@@ -291195,8 +291706,6 @@ public class Airavata {
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.IRE, new org.apache.thrift.meta_data.FieldMetaData("ire", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.InvalidRequestException.class)));
       tmpMap.put(_Fields.ACE, new org.apache.thrift.meta_data.FieldMetaData("ace", org.apache.thrift.TFieldRequirementType.DEFAULT, 
@@ -291206,21 +291715,19 @@ public class Airavata {
       tmpMap.put(_Fields.AE, new org.apache.thrift.meta_data.FieldMetaData("ae", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AuthorizationException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(saveParsingTemplate_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addParsingTemplatesForExperiment_result.class, metaDataMap);
     }
 
-    public saveParsingTemplate_result() {
+    public addParsingTemplatesForExperiment_result() {
     }
 
-    public saveParsingTemplate_result(
-      java.lang.String success,
+    public addParsingTemplatesForExperiment_result(
       org.apache.airavata.model.error.InvalidRequestException ire,
       org.apache.airavata.model.error.AiravataClientException ace,
       org.apache.airavata.model.error.AiravataSystemException ase,
       org.apache.airavata.model.error.AuthorizationException ae)
     {
       this();
-      this.success = success;
       this.ire = ire;
       this.ace = ace;
       this.ase = ase;
@@ -291230,10 +291737,7 @@ public class Airavata {
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public saveParsingTemplate_result(saveParsingTemplate_result other) {
-      if (other.isSetSuccess()) {
-        this.success = other.success;
-      }
+    public addParsingTemplatesForExperiment_result(addParsingTemplatesForExperiment_result other) {
       if (other.isSetIre()) {
         this.ire = new org.apache.airavata.model.error.InvalidRequestException(other.ire);
       }
@@ -291248,48 +291752,23 @@ public class Airavata {
       }
     }
 
-    public saveParsingTemplate_result deepCopy() {
-      return new saveParsingTemplate_result(this);
+    public addParsingTemplatesForExperiment_result deepCopy() {
+      return new addParsingTemplatesForExperiment_result(this);
     }
 
     @Override
     public void clear() {
-      this.success = null;
       this.ire = null;
       this.ace = null;
       this.ase = null;
       this.ae = null;
     }
 
-    public java.lang.String getSuccess() {
-      return this.success;
-    }
-
-    public saveParsingTemplate_result setSuccess(java.lang.String success) {
-      this.success = success;
-      return this;
-    }
-
-    public void unsetSuccess() {
-      this.success = null;
-    }
-
-    /** Returns true if field success is set (has been assigned a value) and false otherwise */
-    public boolean isSetSuccess() {
-      return this.success != null;
-    }
-
-    public void setSuccessIsSet(boolean value) {
-      if (!value) {
-        this.success = null;
-      }
-    }
-
     public org.apache.airavata.model.error.InvalidRequestException getIre() {
       return this.ire;
     }
 
-    public saveParsingTemplate_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
+    public addParsingTemplatesForExperiment_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
       this.ire = ire;
       return this;
     }
@@ -291313,7 +291792,7 @@ public class Airavata {
       return this.ace;
     }
 
-    public saveParsingTemplate_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
+    public addParsingTemplatesForExperiment_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
       this.ace = ace;
       return this;
     }
@@ -291337,7 +291816,7 @@ public class Airavata {
       return this.ase;
     }
 
-    public saveParsingTemplate_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
+    public addParsingTemplatesForExperiment_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
       this.ase = ase;
       return this;
     }
@@ -291361,7 +291840,7 @@ public class Airavata {
       return this.ae;
     }
 
-    public saveParsingTemplate_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
+    public addParsingTemplatesForExperiment_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
       this.ae = ae;
       return this;
     }
@@ -291383,14 +291862,6 @@ public class Airavata {
 
     public void setFieldValue(_Fields field, java.lang.Object value) {
       switch (field) {
-      case SUCCESS:
-        if (value == null) {
-          unsetSuccess();
-        } else {
-          setSuccess((java.lang.String)value);
-        }
-        break;
-
       case IRE:
         if (value == null) {
           unsetIre();
@@ -291428,9 +291899,6 @@ public class Airavata {
 
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
-      case SUCCESS:
-        return getSuccess();
-
       case IRE:
         return getIre();
 
@@ -291454,8 +291922,6 @@ public class Airavata {
       }
 
       switch (field) {
-      case SUCCESS:
-        return isSetSuccess();
       case IRE:
         return isSetIre();
       case ACE:
@@ -291472,26 +291938,17 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof saveParsingTemplate_result)
-        return this.equals((saveParsingTemplate_result)that);
+      if (that instanceof addParsingTemplatesForExperiment_result)
+        return this.equals((addParsingTemplatesForExperiment_result)that);
       return false;
     }
 
-    public boolean equals(saveParsingTemplate_result that) {
+    public boolean equals(addParsingTemplatesForExperiment_result that) {
       if (that == null)
         return false;
       if (this == that)
         return true;
 
-      boolean this_present_success = true && this.isSetSuccess();
-      boolean that_present_success = true && that.isSetSuccess();
-      if (this_present_success || that_present_success) {
-        if (!(this_present_success && that_present_success))
-          return false;
-        if (!this.success.equals(that.success))
-          return false;
-      }
-
       boolean this_present_ire = true && this.isSetIre();
       boolean that_present_ire = true && that.isSetIre();
       if (this_present_ire || that_present_ire) {
@@ -291535,10 +291992,6 @@ public class Airavata {
     public int hashCode() {
       int hashCode = 1;
 
-      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
-      if (isSetSuccess())
-        hashCode = hashCode * 8191 + success.hashCode();
-
       hashCode = hashCode * 8191 + ((isSetIre()) ? 131071 : 524287);
       if (isSetIre())
         hashCode = hashCode * 8191 + ire.hashCode();
@@ -291559,23 +292012,13 @@ public class Airavata {
     }
 
     @Override
-    public int compareTo(saveParsingTemplate_result other) {
+    public int compareTo(addParsingTemplatesForExperiment_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
 
       int lastComparison = 0;
 
-      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-      if (isSetSuccess()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
-        if (lastComparison != 0) {
-          return lastComparison;
-        }
-      }
       lastComparison = java.lang.Boolean.valueOf(isSetIre()).compareTo(other.isSetIre());
       if (lastComparison != 0) {
         return lastComparison;
@@ -291633,17 +292076,9 @@ public class Airavata {
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("saveParsingTemplate_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("addParsingTemplatesForExperiment_result(");
       boolean first = true;
 
-      sb.append("success:");
-      if (this.success == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.success);
-      }
-      first = false;
-      if (!first) sb.append(", ");
       sb.append("ire:");
       if (this.ire == null) {
         sb.append("null");
@@ -291700,15 +292135,15 @@ public class Airavata {
       }
     }
 
-    private static class saveParsingTemplate_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public saveParsingTemplate_resultStandardScheme getScheme() {
-        return new saveParsingTemplate_resultStandardScheme();
+    private static class addParsingTemplatesForExperiment_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addParsingTemplatesForExperiment_resultStandardScheme getScheme() {
+        return new addParsingTemplatesForExperiment_resultStandardScheme();
       }
     }
 
-    private static class saveParsingTemplate_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<saveParsingTemplate_result> {
+    private static class addParsingTemplatesForExperiment_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<addParsingTemplatesForExperiment_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, addParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -291718,14 +292153,6 @@ public class Airavata {
             break;
           }
           switch (schemeField.id) {
-            case 0: // SUCCESS
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.success = iprot.readString();
-                struct.setSuccessIsSet(true);
-              } else { 
-                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-              }
-              break;
             case 1: // IRE
               if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
                 struct.ire = new org.apache.airavata.model.error.InvalidRequestException();
@@ -291773,15 +292200,10 @@ public class Airavata {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, addParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.success != null) {
-          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-          oprot.writeString(struct.success);
-          oprot.writeFieldEnd();
-        }
         if (struct.ire != null) {
           oprot.writeFieldBegin(IRE_FIELD_DESC);
           struct.ire.write(oprot);
@@ -291808,37 +292230,31 @@ public class Airavata {
 
     }
 
-    private static class saveParsingTemplate_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public saveParsingTemplate_resultTupleScheme getScheme() {
-        return new saveParsingTemplate_resultTupleScheme();
+    private static class addParsingTemplatesForExperiment_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addParsingTemplatesForExperiment_resultTupleScheme getScheme() {
+        return new addParsingTemplatesForExperiment_resultTupleScheme();
       }
     }
 
-    private static class saveParsingTemplate_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<saveParsingTemplate_result> {
+    private static class addParsingTemplatesForExperiment_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<addParsingTemplatesForExperiment_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, addParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
-        if (struct.isSetSuccess()) {
-          optionals.set(0);
-        }
         if (struct.isSetIre()) {
-          optionals.set(1);
+          optionals.set(0);
         }
         if (struct.isSetAce()) {
-          optionals.set(2);
+          optionals.set(1);
         }
         if (struct.isSetAse()) {
-          optionals.set(3);
+          optionals.set(2);
         }
         if (struct.isSetAe()) {
-          optionals.set(4);
-        }
-        oprot.writeBitSet(optionals, 5);
-        if (struct.isSetSuccess()) {
-          oprot.writeString(struct.success);
+          optionals.set(3);
         }
+        oprot.writeBitSet(optionals, 4);
         if (struct.isSetIre()) {
           struct.ire.write(oprot);
         }
@@ -291854,29 +292270,25 @@ public class Airavata {
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, addParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
-        java.util.BitSet incoming = iprot.readBitSet(5);
+        java.util.BitSet incoming = iprot.readBitSet(4);
         if (incoming.get(0)) {
-          struct.success = iprot.readString();
-          struct.setSuccessIsSet(true);
-        }
-        if (incoming.get(1)) {
           struct.ire = new org.apache.airavata.model.error.InvalidRequestException();
           struct.ire.read(iprot);
           struct.setIreIsSet(true);
         }
-        if (incoming.get(2)) {
+        if (incoming.get(1)) {
           struct.ace = new org.apache.airavata.model.error.AiravataClientException();
           struct.ace.read(iprot);
           struct.setAceIsSet(true);
         }
-        if (incoming.get(3)) {
+        if (incoming.get(2)) {
           struct.ase = new org.apache.airavata.model.error.AiravataSystemException();
           struct.ase.read(iprot);
           struct.setAseIsSet(true);
         }
-        if (incoming.get(4)) {
+        if (incoming.get(3)) {
           struct.ae = new org.apache.airavata.model.error.AuthorizationException();
           struct.ae.read(iprot);
           struct.setAeIsSet(true);
@@ -291889,24 +292301,24 @@ public class Airavata {
     }
   }
 
-  public static class removeParsingTemplate_args implements org.apache.thrift.TBase<removeParsingTemplate_args, removeParsingTemplate_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeParsingTemplate_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeParsingTemplate_args");
+  public static class getParsingTemplatesForExperiment_args implements org.apache.thrift.TBase<getParsingTemplatesForExperiment_args, getParsingTemplatesForExperiment_args._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForExperiment_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForExperiment_args");
 
     private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
-    private static final org.apache.thrift.protocol.TField TEMPLATE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("templateId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentId", org.apache.thrift.protocol.TType.STRING, (short)2);
     private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeParsingTemplate_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeParsingTemplate_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForExperiment_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForExperiment_argsTupleSchemeFactory();
 
     public org.apache.airavata.model.security.AuthzToken authzToken; // required
-    public java.lang.String templateId; // required
+    public java.lang.String experimentId; // required
     public java.lang.String gatewayId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       AUTHZ_TOKEN((short)1, "authzToken"),
-      TEMPLATE_ID((short)2, "templateId"),
+      EXPERIMENT_ID((short)2, "experimentId"),
       GATEWAY_ID((short)3, "gatewayId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
@@ -291924,8 +292336,8 @@ public class Airavata {
         switch(fieldId) {
           case 1: // AUTHZ_TOKEN
             return AUTHZ_TOKEN;
-          case 2: // TEMPLATE_ID
-            return TEMPLATE_ID;
+          case 2: // EXPERIMENT_ID
+            return EXPERIMENT_ID;
           case 3: // GATEWAY_ID
             return GATEWAY_ID;
           default:
@@ -291973,51 +292385,51 @@ public class Airavata {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.AUTHZ_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("authzToken", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
-      tmpMap.put(_Fields.TEMPLATE_ID, new org.apache.thrift.meta_data.FieldMetaData("templateId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+      tmpMap.put(_Fields.EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("experimentId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeParsingTemplate_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForExperiment_args.class, metaDataMap);
     }
 
-    public removeParsingTemplate_args() {
+    public getParsingTemplatesForExperiment_args() {
     }
 
-    public removeParsingTemplate_args(
+    public getParsingTemplatesForExperiment_args(
       org.apache.airavata.model.security.AuthzToken authzToken,
-      java.lang.String templateId,
+      java.lang.String experimentId,
       java.lang.String gatewayId)
     {
       this();
       this.authzToken = authzToken;
-      this.templateId = templateId;
+      this.experimentId = experimentId;
       this.gatewayId = gatewayId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public removeParsingTemplate_args(removeParsingTemplate_args other) {
+    public getParsingTemplatesForExperiment_args(getParsingTemplatesForExperiment_args other) {
       if (other.isSetAuthzToken()) {
         this.authzToken = new org.apache.airavata.model.security.AuthzToken(other.authzToken);
       }
-      if (other.isSetTemplateId()) {
-        this.templateId = other.templateId;
+      if (other.isSetExperimentId()) {
+        this.experimentId = other.experimentId;
       }
       if (other.isSetGatewayId()) {
         this.gatewayId = other.gatewayId;
       }
     }
 
-    public removeParsingTemplate_args deepCopy() {
-      return new removeParsingTemplate_args(this);
+    public getParsingTemplatesForExperiment_args deepCopy() {
+      return new getParsingTemplatesForExperiment_args(this);
     }
 
     @Override
     public void clear() {
       this.authzToken = null;
-      this.templateId = null;
+      this.experimentId = null;
       this.gatewayId = null;
     }
 
@@ -292025,7 +292437,7 @@ public class Airavata {
       return this.authzToken;
     }
 
-    public removeParsingTemplate_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
+    public getParsingTemplatesForExperiment_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
       this.authzToken = authzToken;
       return this;
     }
@@ -292045,27 +292457,27 @@ public class Airavata {
       }
     }
 
-    public java.lang.String getTemplateId() {
-      return this.templateId;
+    public java.lang.String getExperimentId() {
+      return this.experimentId;
     }
 
-    public removeParsingTemplate_args setTemplateId(java.lang.String templateId) {
-      this.templateId = templateId;
+    public getParsingTemplatesForExperiment_args setExperimentId(java.lang.String experimentId) {
+      this.experimentId = experimentId;
       return this;
     }
 
-    public void unsetTemplateId() {
-      this.templateId = null;
+    public void unsetExperimentId() {
+      this.experimentId = null;
     }
 
-    /** Returns true if field templateId is set (has been assigned a value) and false otherwise */
-    public boolean isSetTemplateId() {
-      return this.templateId != null;
+    /** Returns true if field experimentId is set (has been assigned a value) and false otherwise */
+    public boolean isSetExperimentId() {
+      return this.experimentId != null;
     }
 
-    public void setTemplateIdIsSet(boolean value) {
+    public void setExperimentIdIsSet(boolean value) {
       if (!value) {
-        this.templateId = null;
+        this.experimentId = null;
       }
     }
 
@@ -292073,7 +292485,7 @@ public class Airavata {
       return this.gatewayId;
     }
 
-    public removeParsingTemplate_args setGatewayId(java.lang.String gatewayId) {
+    public getParsingTemplatesForExperiment_args setGatewayId(java.lang.String gatewayId) {
       this.gatewayId = gatewayId;
       return this;
     }
@@ -292103,11 +292515,11 @@ public class Airavata {
         }
         break;
 
-      case TEMPLATE_ID:
+      case EXPERIMENT_ID:
         if (value == null) {
-          unsetTemplateId();
+          unsetExperimentId();
         } else {
-          setTemplateId((java.lang.String)value);
+          setExperimentId((java.lang.String)value);
         }
         break;
 
@@ -292127,8 +292539,8 @@ public class Airavata {
       case AUTHZ_TOKEN:
         return getAuthzToken();
 
-      case TEMPLATE_ID:
-        return getTemplateId();
+      case EXPERIMENT_ID:
+        return getExperimentId();
 
       case GATEWAY_ID:
         return getGatewayId();
@@ -292146,8 +292558,8 @@ public class Airavata {
       switch (field) {
       case AUTHZ_TOKEN:
         return isSetAuthzToken();
-      case TEMPLATE_ID:
-        return isSetTemplateId();
+      case EXPERIMENT_ID:
+        return isSetExperimentId();
       case GATEWAY_ID:
         return isSetGatewayId();
       }
@@ -292158,12 +292570,12 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof removeParsingTemplate_args)
-        return this.equals((removeParsingTemplate_args)that);
+      if (that instanceof getParsingTemplatesForExperiment_args)
+        return this.equals((getParsingTemplatesForExperiment_args)that);
       return false;
     }
 
-    public boolean equals(removeParsingTemplate_args that) {
+    public boolean equals(getParsingTemplatesForExperiment_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -292178,12 +292590,12 @@ public class Airavata {
           return false;
       }
 
-      boolean this_present_templateId = true && this.isSetTemplateId();
-      boolean that_present_templateId = true && that.isSetTemplateId();
-      if (this_present_templateId || that_present_templateId) {
-        if (!(this_present_templateId && that_present_templateId))
+      boolean this_present_experimentId = true && this.isSetExperimentId();
+      boolean that_present_experimentId = true && that.isSetExperimentId();
+      if (this_present_experimentId || that_present_experimentId) {
+        if (!(this_present_experimentId && that_present_experimentId))
           return false;
-        if (!this.templateId.equals(that.templateId))
+        if (!this.experimentId.equals(that.experimentId))
           return false;
       }
 
@@ -292207,9 +292619,9 @@ public class Airavata {
       if (isSetAuthzToken())
         hashCode = hashCode * 8191 + authzToken.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetTemplateId()) ? 131071 : 524287);
-      if (isSetTemplateId())
-        hashCode = hashCode * 8191 + templateId.hashCode();
+      hashCode = hashCode * 8191 + ((isSetExperimentId()) ? 131071 : 524287);
+      if (isSetExperimentId())
+        hashCode = hashCode * 8191 + experimentId.hashCode();
 
       hashCode = hashCode * 8191 + ((isSetGatewayId()) ? 131071 : 524287);
       if (isSetGatewayId())
@@ -292219,7 +292631,7 @@ public class Airavata {
     }
 
     @Override
-    public int compareTo(removeParsingTemplate_args other) {
+    public int compareTo(getParsingTemplatesForExperiment_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -292236,12 +292648,12 @@ public class Airavata {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetTemplateId()).compareTo(other.isSetTemplateId());
+      lastComparison = java.lang.Boolean.valueOf(isSetExperimentId()).compareTo(other.isSetExperimentId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetTemplateId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.templateId, other.templateId);
+      if (isSetExperimentId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.experimentId, other.experimentId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -292273,7 +292685,7 @@ public class Airavata {
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeParsingTemplate_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getParsingTemplatesForExperiment_args(");
       boolean first = true;
 
       sb.append("authzToken:");
@@ -292284,11 +292696,11 @@ public class Airavata {
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("templateId:");
-      if (this.templateId == null) {
+      sb.append("experimentId:");
+      if (this.experimentId == null) {
         sb.append("null");
       } else {
-        sb.append(this.templateId);
+        sb.append(this.experimentId);
       }
       first = false;
       if (!first) sb.append(", ");
@@ -292308,8 +292720,8 @@ public class Airavata {
       if (authzToken == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'authzToken' was not present! Struct: " + toString());
       }
-      if (templateId == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'templateId' was not present! Struct: " + toString());
+      if (experimentId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'experimentId' was not present! Struct: " + toString());
       }
       if (gatewayId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'gatewayId' was not present! Struct: " + toString());
@@ -292336,15 +292748,15 @@ public class Airavata {
       }
     }
 
-    private static class removeParsingTemplate_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeParsingTemplate_argsStandardScheme getScheme() {
-        return new removeParsingTemplate_argsStandardScheme();
+    private static class getParsingTemplatesForExperiment_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForExperiment_argsStandardScheme getScheme() {
+        return new getParsingTemplatesForExperiment_argsStandardScheme();
       }
     }
 
-    private static class removeParsingTemplate_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeParsingTemplate_args> {
+    private static class getParsingTemplatesForExperiment_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getParsingTemplatesForExperiment_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -292363,10 +292775,10 @@ public class Airavata {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // TEMPLATE_ID
+            case 2: // EXPERIMENT_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.templateId = iprot.readString();
-                struct.setTemplateIdIsSet(true);
+                struct.experimentId = iprot.readString();
+                struct.setExperimentIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -292390,7 +292802,7 @@ public class Airavata {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -292399,9 +292811,9 @@ public class Airavata {
           struct.authzToken.write(oprot);
           oprot.writeFieldEnd();
         }
-        if (struct.templateId != null) {
-          oprot.writeFieldBegin(TEMPLATE_ID_FIELD_DESC);
-          oprot.writeString(struct.templateId);
+        if (struct.experimentId != null) {
+          oprot.writeFieldBegin(EXPERIMENT_ID_FIELD_DESC);
+          oprot.writeString(struct.experimentId);
           oprot.writeFieldEnd();
         }
         if (struct.gatewayId != null) {
@@ -292415,30 +292827,30 @@ public class Airavata {
 
     }
 
-    private static class removeParsingTemplate_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeParsingTemplate_argsTupleScheme getScheme() {
-        return new removeParsingTemplate_argsTupleScheme();
+    private static class getParsingTemplatesForExperiment_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForExperiment_argsTupleScheme getScheme() {
+        return new getParsingTemplatesForExperiment_argsTupleScheme();
       }
     }
 
-    private static class removeParsingTemplate_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeParsingTemplate_args> {
+    private static class getParsingTemplatesForExperiment_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getParsingTemplatesForExperiment_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken.write(oprot);
-        oprot.writeString(struct.templateId);
+        oprot.writeString(struct.experimentId);
         oprot.writeString(struct.gatewayId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
         struct.authzToken.read(iprot);
         struct.setAuthzTokenIsSet(true);
-        struct.templateId = iprot.readString();
-        struct.setTemplateIdIsSet(true);
+        struct.experimentId = iprot.readString();
+        struct.setExperimentIdIsSet(true);
         struct.gatewayId = iprot.readString();
         struct.setGatewayIdIsSet(true);
       }
@@ -292449,19 +292861,19 @@ public class Airavata {
     }
   }
 
-  public static class removeParsingTemplate_result implements org.apache.thrift.TBase<removeParsingTemplate_result, removeParsingTemplate_result._Fields>, java.io.Serializable, Cloneable, Comparable<removeParsingTemplate_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeParsingTemplate_result");
+  public static class getParsingTemplatesForExperiment_result implements org.apache.thrift.TBase<getParsingTemplatesForExperiment_result, getParsingTemplatesForExperiment_result._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForExperiment_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForExperiment_result");
 
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
     private static final org.apache.thrift.protocol.TField IRE_FIELD_DESC = new org.apache.thrift.protocol.TField("ire", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField ACE_FIELD_DESC = new org.apache.thrift.protocol.TField("ace", org.apache.thrift.protocol.TType.STRUCT, (short)2);
     private static final org.apache.thrift.protocol.TField ASE_FIELD_DESC = new org.apache.thrift.protocol.TField("ase", org.apache.thrift.protocol.TType.STRUCT, (short)3);
     private static final org.apache.thrift.protocol.TField AE_FIELD_DESC = new org.apache.thrift.protocol.TField("ae", org.apache.thrift.protocol.TType.STRUCT, (short)4);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeParsingTemplate_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeParsingTemplate_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForExperiment_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForExperiment_resultTupleSchemeFactory();
 
-    public boolean success; // required
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success; // required
     public org.apache.airavata.model.error.InvalidRequestException ire; // required
     public org.apache.airavata.model.error.AiravataClientException ace; // required
     public org.apache.airavata.model.error.AiravataSystemException ase; // required
@@ -292538,13 +292950,12 @@ public class Airavata {
     }
 
     // isset id assignments
-    private static final int __SUCCESS_ISSET_ID = 0;
-    private byte __isset_bitfield = 0;
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.appcatalog.parser.ParsingTemplate.class))));
       tmpMap.put(_Fields.IRE, new org.apache.thrift.meta_data.FieldMetaData("ire", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.InvalidRequestException.class)));
       tmpMap.put(_Fields.ACE, new org.apache.thrift.meta_data.FieldMetaData("ace", org.apache.thrift.TFieldRequirementType.DEFAULT, 
@@ -292554,14 +292965,14 @@ public class Airavata {
       tmpMap.put(_Fields.AE, new org.apache.thrift.meta_data.FieldMetaData("ae", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AuthorizationException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeParsingTemplate_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForExperiment_result.class, metaDataMap);
     }
 
-    public removeParsingTemplate_result() {
+    public getParsingTemplatesForExperiment_result() {
     }
 
-    public removeParsingTemplate_result(
-      boolean success,
+    public getParsingTemplatesForExperiment_result(
+      java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success,
       org.apache.airavata.model.error.InvalidRequestException ire,
       org.apache.airavata.model.error.AiravataClientException ace,
       org.apache.airavata.model.error.AiravataSystemException ase,
@@ -292569,7 +292980,6 @@ public class Airavata {
     {
       this();
       this.success = success;
-      setSuccessIsSet(true);
       this.ire = ire;
       this.ace = ace;
       this.ase = ase;
@@ -292579,9 +292989,14 @@ public class Airavata {
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public removeParsingTemplate_result(removeParsingTemplate_result other) {
-      __isset_bitfield = other.__isset_bitfield;
-      this.success = other.success;
+    public getParsingTemplatesForExperiment_result(getParsingTemplatesForExperiment_result other) {
+      if (other.isSetSuccess()) {
+        java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> __this__success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(other.success.size());
+        for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate other_element : other.success) {
+          __this__success.add(new org.apache.airavata.model.appcatalog.parser.ParsingTemplate(other_element));
+        }
+        this.success = __this__success;
+      }
       if (other.isSetIre()) {
         this.ire = new org.apache.airavata.model.error.InvalidRequestException(other.ire);
       }
@@ -292596,48 +293011,63 @@ public class Airavata {
       }
     }
 
-    public removeParsingTemplate_result deepCopy() {
-      return new removeParsingTemplate_result(this);
+    public getParsingTemplatesForExperiment_result deepCopy() {
+      return new getParsingTemplatesForExperiment_result(this);
     }
 
     @Override
     public void clear() {
-      setSuccessIsSet(false);
-      this.success = false;
+      this.success = null;
       this.ire = null;
       this.ace = null;
       this.ase = null;
       this.ae = null;
     }
 
-    public boolean isSuccess() {
+    public int getSuccessSize() {
+      return (this.success == null) ? 0 : this.success.size();
+    }
+
+    public java.util.Iterator<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getSuccessIterator() {
+      return (this.success == null) ? null : this.success.iterator();
+    }
+
+    public void addToSuccess(org.apache.airavata.model.appcatalog.parser.ParsingTemplate elem) {
+      if (this.success == null) {
+        this.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>();
+      }
+      this.success.add(elem);
+    }
+
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getSuccess() {
       return this.success;
     }
 
-    public removeParsingTemplate_result setSuccess(boolean success) {
+    public getParsingTemplatesForExperiment_result setSuccess(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> success) {
       this.success = success;
-      setSuccessIsSet(true);
       return this;
     }
 
     public void unsetSuccess() {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+      this.success = null;
     }
 
     /** Returns true if field success is set (has been assigned a value) and false otherwise */
     public boolean isSetSuccess() {
-      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+      return this.success != null;
     }
 
     public void setSuccessIsSet(boolean value) {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+      if (!value) {
+        this.success = null;
+      }
     }
 
     public org.apache.airavata.model.error.InvalidRequestException getIre() {
       return this.ire;
     }
 
-    public removeParsingTemplate_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
+    public getParsingTemplatesForExperiment_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
       this.ire = ire;
       return this;
     }
@@ -292661,7 +293091,7 @@ public class Airavata {
       return this.ace;
     }
 
-    public removeParsingTemplate_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
+    public getParsingTemplatesForExperiment_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
       this.ace = ace;
       return this;
     }
@@ -292685,7 +293115,7 @@ public class Airavata {
       return this.ase;
     }
 
-    public removeParsingTemplate_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
+    public getParsingTemplatesForExperiment_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
       this.ase = ase;
       return this;
     }
@@ -292709,7 +293139,7 @@ public class Airavata {
       return this.ae;
     }
 
-    public removeParsingTemplate_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
+    public getParsingTemplatesForExperiment_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
       this.ae = ae;
       return this;
     }
@@ -292735,7 +293165,7 @@ public class Airavata {
         if (value == null) {
           unsetSuccess();
         } else {
-          setSuccess((java.lang.Boolean)value);
+          setSuccess((java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>)value);
         }
         break;
 
@@ -292777,7 +293207,7 @@ public class Airavata {
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
       case SUCCESS:
-        return isSuccess();
+        return getSuccess();
 
       case IRE:
         return getIre();
@@ -292820,23 +293250,23 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof removeParsingTemplate_result)
-        return this.equals((removeParsingTemplate_result)that);
+      if (that instanceof getParsingTemplatesForExperiment_result)
+        return this.equals((getParsingTemplatesForExperiment_result)that);
       return false;
     }
 
-    public boolean equals(removeParsingTemplate_result that) {
+    public boolean equals(getParsingTemplatesForExperiment_result that) {
       if (that == null)
         return false;
       if (this == that)
         return true;
 
-      boolean this_present_success = true;
-      boolean that_present_success = true;
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
       if (this_present_success || that_present_success) {
         if (!(this_present_success && that_present_success))
           return false;
-        if (this.success != that.success)
+        if (!this.success.equals(that.success))
           return false;
       }
 
@@ -292883,7 +293313,9 @@ public class Airavata {
     public int hashCode() {
       int hashCode = 1;
 
-      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
 
       hashCode = hashCode * 8191 + ((isSetIre()) ? 131071 : 524287);
       if (isSetIre())
@@ -292905,7 +293337,7 @@ public class Airavata {
     }
 
     @Override
-    public int compareTo(removeParsingTemplate_result other) {
+    public int compareTo(getParsingTemplatesForExperiment_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -292979,11 +293411,15 @@ public class Airavata {
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeParsingTemplate_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getParsingTemplatesForExperiment_result(");
       boolean first = true;
 
       sb.append("success:");
-      sb.append(this.success);
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
       first = false;
       if (!first) sb.append(", ");
       sb.append("ire:");
@@ -293036,23 +293472,21 @@ public class Airavata {
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
       try {
-        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-        __isset_bitfield = 0;
         read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
       } catch (org.apache.thrift.TException te) {
         throw new java.io.IOException(te);
       }
     }
 
-    private static class removeParsingTemplate_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeParsingTemplate_resultStandardScheme getScheme() {
-        return new removeParsingTemplate_resultStandardScheme();
+    private static class getParsingTemplatesForExperiment_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForExperiment_resultStandardScheme getScheme() {
+        return new getParsingTemplatesForExperiment_resultStandardScheme();
       }
     }
 
-    private static class removeParsingTemplate_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeParsingTemplate_result> {
+    private static class getParsingTemplatesForExperiment_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getParsingTemplatesForExperiment_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -293063,8 +293497,19 @@ public class Airavata {
           }
           switch (schemeField.id) {
             case 0: // SUCCESS
-              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
-                struct.success = iprot.readBool();
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list458 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(_list458.size);
+                  org.apache.airavata.model.appcatalog.parser.ParsingTemplate _elem459;
+                  for (int _i460 = 0; _i460 < _list458.size; ++_i460)
+                  {
+                    _elem459 = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
+                    _elem459.read(iprot);
+                    struct.success.add(_elem459);
+                  }
+                  iprot.readListEnd();
+                }
                 struct.setSuccessIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
@@ -293117,13 +293562,20 @@ public class Airavata {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.isSetSuccess()) {
+        if (struct.success != null) {
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-          oprot.writeBool(struct.success);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
+            for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate _iter461 : struct.success)
+            {
+              _iter461.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
           oprot.writeFieldEnd();
         }
         if (struct.ire != null) {
@@ -293152,16 +293604,16 @@ public class Airavata {
 
     }
 
-    private static class removeParsingTemplate_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeParsingTemplate_resultTupleScheme getScheme() {
-        return new removeParsingTemplate_resultTupleScheme();
+    private static class getParsingTemplatesForExperiment_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getParsingTemplatesForExperiment_resultTupleScheme getScheme() {
+        return new getParsingTemplatesForExperiment_resultTupleScheme();
       }
     }
 
-    private static class removeParsingTemplate_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeParsingTemplate_result> {
+    private static class getParsingTemplatesForExperiment_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getParsingTemplatesForExperiment_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
         if (struct.isSetSuccess()) {
@@ -293181,7 +293633,13 @@ public class Airavata {
         }
         oprot.writeBitSet(optionals, 5);
         if (struct.isSetSuccess()) {
-          oprot.writeBool(struct.success);
+          {
+            oprot.writeI32(struct.success.size());
+            for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate _iter462 : struct.success)
+            {
+              _iter462.write(oprot);
+            }
+          }
         }
         if (struct.isSetIre()) {
           struct.ire.write(oprot);
@@ -293198,11 +293656,21 @@ public class Airavata {
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, getParsingTemplatesForExperiment_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet incoming = iprot.readBitSet(5);
         if (incoming.get(0)) {
-          struct.success = iprot.readBool();
+          {
+            org.apache.thrift.protocol.TList _list463 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(_list463.size);
+            org.apache.airavata.model.appcatalog.parser.ParsingTemplate _elem464;
+            for (int _i465 = 0; _i465 < _list463.size; ++_i465)
+            {
+              _elem464 = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
+              _elem464.read(iprot);
+              struct.success.add(_elem464);
+            }
+          }
           struct.setSuccessIsSet(true);
         }
         if (incoming.get(1)) {
@@ -293233,22 +293701,22 @@ public class Airavata {
     }
   }
 
-  public static class listAllParsingTemplates_args implements org.apache.thrift.TBase<listAllParsingTemplates_args, listAllParsingTemplates_args._Fields>, java.io.Serializable, Cloneable, Comparable<listAllParsingTemplates_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("listAllParsingTemplates_args");
+  public static class saveParsingTemplate_args implements org.apache.thrift.TBase<saveParsingTemplate_args, saveParsingTemplate_args._Fields>, java.io.Serializable, Cloneable, Comparable<saveParsingTemplate_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("saveParsingTemplate_args");
 
     private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
-    private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField PARSING_TEMPLATE_FIELD_DESC = new org.apache.thrift.protocol.TField("parsingTemplate", org.apache.thrift.protocol.TType.STRUCT, (short)2);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new listAllParsingTemplates_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new listAllParsingTemplates_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new saveParsingTemplate_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new saveParsingTemplate_argsTupleSchemeFactory();
 
     public org.apache.airavata.model.security.AuthzToken authzToken; // required
-    public java.lang.String gatewayId; // required
+    public org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       AUTHZ_TOKEN((short)1, "authzToken"),
-      GATEWAY_ID((short)2, "gatewayId");
+      PARSING_TEMPLATE((short)2, "parsingTemplate");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -293265,8 +293733,8 @@ public class Airavata {
         switch(fieldId) {
           case 1: // AUTHZ_TOKEN
             return AUTHZ_TOKEN;
-          case 2: // GATEWAY_ID
-            return GATEWAY_ID;
+          case 2: // PARSING_TEMPLATE
+            return PARSING_TEMPLATE;
           default:
             return null;
         }
@@ -293312,51 +293780,51 @@ public class Airavata {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.AUTHZ_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("authzToken", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
-      tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.PARSING_TEMPLATE, new org.apache.thrift.meta_data.FieldMetaData("parsingTemplate", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.appcatalog.parser.ParsingTemplate.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(listAllParsingTemplates_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(saveParsingTemplate_args.class, metaDataMap);
     }
 
-    public listAllParsingTemplates_args() {
+    public saveParsingTemplate_args() {
     }
 
-    public listAllParsingTemplates_args(
+    public saveParsingTemplate_args(
       org.apache.airavata.model.security.AuthzToken authzToken,
-      java.lang.String gatewayId)
+      org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate)
     {
       this();
       this.authzToken = authzToken;
-      this.gatewayId = gatewayId;
+      this.parsingTemplate = parsingTemplate;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public listAllParsingTemplates_args(listAllParsingTemplates_args other) {
+    public saveParsingTemplate_args(saveParsingTemplate_args other) {
       if (other.isSetAuthzToken()) {
         this.authzToken = new org.apache.airavata.model.security.AuthzToken(other.authzToken);
       }
-      if (other.isSetGatewayId()) {
-        this.gatewayId = other.gatewayId;
+      if (other.isSetParsingTemplate()) {
+        this.parsingTemplate = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate(other.parsingTemplate);
       }
     }
 
-    public listAllParsingTemplates_args deepCopy() {
-      return new listAllParsingTemplates_args(this);
+    public saveParsingTemplate_args deepCopy() {
+      return new saveParsingTemplate_args(this);
     }
 
     @Override
     public void clear() {
       this.authzToken = null;
-      this.gatewayId = null;
+      this.parsingTemplate = null;
     }
 
     public org.apache.airavata.model.security.AuthzToken getAuthzToken() {
       return this.authzToken;
     }
 
-    public listAllParsingTemplates_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
+    public saveParsingTemplate_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
       this.authzToken = authzToken;
       return this;
     }
@@ -293376,27 +293844,27 @@ public class Airavata {
       }
     }
 
-    public java.lang.String getGatewayId() {
-      return this.gatewayId;
+    public org.apache.airavata.model.appcatalog.parser.ParsingTemplate getParsingTemplate() {
+      return this.parsingTemplate;
     }
 
-    public listAllParsingTemplates_args setGatewayId(java.lang.String gatewayId) {
-      this.gatewayId = gatewayId;
+    public saveParsingTemplate_args setParsingTemplate(org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate) {
+      this.parsingTemplate = parsingTemplate;
       return this;
     }
 
-    public void unsetGatewayId() {
-      this.gatewayId = null;
+    public void unsetParsingTemplate() {
+      this.parsingTemplate = null;
     }
 
-    /** Returns true if field gatewayId is set (has been assigned a value) and false otherwise */
-    public boolean isSetGatewayId() {
-      return this.gatewayId != null;
+    /** Returns true if field parsingTemplate is set (has been assigned a value) and false otherwise */
+    public boolean isSetParsingTemplate() {
+      return this.parsingTemplate != null;
     }
 
-    public void setGatewayIdIsSet(boolean value) {
+    public void setParsingTemplateIsSet(boolean value) {
       if (!value) {
-        this.gatewayId = null;
+        this.parsingTemplate = null;
       }
     }
 
@@ -293410,11 +293878,11 @@ public class Airavata {
         }
         break;
 
-      case GATEWAY_ID:
+      case PARSING_TEMPLATE:
         if (value == null) {
-          unsetGatewayId();
+          unsetParsingTemplate();
         } else {
-          setGatewayId((java.lang.String)value);
+          setParsingTemplate((org.apache.airavata.model.appcatalog.parser.ParsingTemplate)value);
         }
         break;
 
@@ -293426,8 +293894,8 @@ public class Airavata {
       case AUTHZ_TOKEN:
         return getAuthzToken();
 
-      case GATEWAY_ID:
-        return getGatewayId();
+      case PARSING_TEMPLATE:
+        return getParsingTemplate();
 
       }
       throw new java.lang.IllegalStateException();
@@ -293442,8 +293910,8 @@ public class Airavata {
       switch (field) {
       case AUTHZ_TOKEN:
         return isSetAuthzToken();
-      case GATEWAY_ID:
-        return isSetGatewayId();
+      case PARSING_TEMPLATE:
+        return isSetParsingTemplate();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -293452,12 +293920,12 @@ public class Airavata {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof listAllParsingTemplates_args)
-        return this.equals((listAllParsingTemplates_args)that);
+      if (that instanceof saveParsingTemplate_args)
+        return this.equals((saveParsingTemplate_args)that);
       return false;
     }
 
-    public boolean equals(listAllParsingTemplates_args that) {
+    public boolean equals(saveParsingTemplate_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -293472,12 +293940,12 @@ public class Airavata {
           return false;
       }
 
-      boolean this_present_gatewayId = true && this.isSetGatewayId();
-      boolean that_present_gatewayId = true && that.isSetGatewayId();
-      if (this_present_gatewayId || that_present_gatewayId) {
-        if (!(this_present_gatewayId && that_present_gatewayId))
+      boolean this_present_parsingTemplate = true && this.isSetParsingTemplate();
+      boolean that_present_parsingTemplate = true && that.isSetParsingTemplate();
+      if (this_present_parsingTemplate || that_present_parsingTemplate) {
+        if (!(this_present_parsingTemplate && that_present_parsingTemplate))
           return false;
-        if (!this.gatewayId.equals(that.gatewayId))
+        if (!this.parsingTemplate.equals(that.parsingTemplate))
           return false;
       }
 
@@ -293492,15 +293960,15 @@ public class Airavata {
       if (isSetAuthzToken())
         hashCode = hashCode * 8191 + authzToken.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetGatewayId()) ? 131071 : 524287);
-      if (isSetGatewayId())
-        hashCode = hashCode * 8191 + gatewayId.hashCode();
+      hashCode = hashCode * 8191 + ((isSetParsingTemplate()) ? 131071 : 524287);
+      if (isSetParsingTemplate())
+        hashCode = hashCode * 8191 + parsingTemplate.hashCode();
 
       return hashCode;
     }
 
     @Override
-    public int compareTo(listAllParsingTemplates_args other) {
+    public int compareTo(saveParsingTemplate_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -293517,12 +293985,2607 @@ public class Airavata {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetGatewayId()).compareTo(other.isSetGatewayId());
+      lastComparison = java.lang.Boolean.valueOf(isSetParsingTemplate()).compareTo(other.isSetParsingTemplate());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetGatewayId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gatewayId, other.gatewayId);
+      if (isSetParsingTemplate()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.parsingTemplate, other.parsingTemplate);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("saveParsingTemplate_args(");
+      boolean first = true;
+
+      sb.append("authzToken:");
+      if (this.authzToken == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.authzToken);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("parsingTemplate:");
+      if (this.parsingTemplate == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.parsingTemplate);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (authzToken == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'authzToken' was not present! Struct: " + toString());
+      }
+      if (parsingTemplate == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'parsingTemplate' was not present! Struct: " + toString());
+      }
+      // check for sub-struct validity
+      if (authzToken != null) {
+        authzToken.validate();
+      }
+      if (parsingTemplate != null) {
+        parsingTemplate.validate();
+      }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class saveParsingTemplate_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public saveParsingTemplate_argsStandardScheme getScheme() {
+        return new saveParsingTemplate_argsStandardScheme();
+      }
+    }
+
+    private static class saveParsingTemplate_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<saveParsingTemplate_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // AUTHZ_TOKEN
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
+                struct.authzToken.read(iprot);
+                struct.setAuthzTokenIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // PARSING_TEMPLATE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.parsingTemplate = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
+                struct.parsingTemplate.read(iprot);
+                struct.setParsingTemplateIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.authzToken != null) {
+          oprot.writeFieldBegin(AUTHZ_TOKEN_FIELD_DESC);
+          struct.authzToken.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.parsingTemplate != null) {
+          oprot.writeFieldBegin(PARSING_TEMPLATE_FIELD_DESC);
+          struct.parsingTemplate.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class saveParsingTemplate_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public saveParsingTemplate_argsTupleScheme getScheme() {
+        return new saveParsingTemplate_argsTupleScheme();
+      }
+    }
+
+    private static class saveParsingTemplate_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<saveParsingTemplate_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.authzToken.write(oprot);
+        struct.parsingTemplate.write(oprot);
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
+        struct.authzToken.read(iprot);
+        struct.setAuthzTokenIsSet(true);
+        struct.parsingTemplate = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
+        struct.parsingTemplate.read(iprot);
+        struct.setParsingTemplateIsSet(true);
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class saveParsingTemplate_result implements org.apache.thrift.TBase<saveParsingTemplate_result, saveParsingTemplate_result._Fields>, java.io.Serializable, Cloneable, Comparable<saveParsingTemplate_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("saveParsingTemplate_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+    private static final org.apache.thrift.protocol.TField IRE_FIELD_DESC = new org.apache.thrift.protocol.TField("ire", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField ACE_FIELD_DESC = new org.apache.thrift.protocol.TField("ace", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+    private static final org.apache.thrift.protocol.TField ASE_FIELD_DESC = new org.apache.thrift.protocol.TField("ase", org.apache.thrift.protocol.TType.STRUCT, (short)3);
+    private static final org.apache.thrift.protocol.TField AE_FIELD_DESC = new org.apache.thrift.protocol.TField("ae", org.apache.thrift.protocol.TType.STRUCT, (short)4);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new saveParsingTemplate_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new saveParsingTemplate_resultTupleSchemeFactory();
+
+    public java.lang.String success; // required
+    public org.apache.airavata.model.error.InvalidRequestException ire; // required
+    public org.apache.airavata.model.error.AiravataClientException ace; // required
+    public org.apache.airavata.model.error.AiravataSystemException ase; // required
+    public org.apache.airavata.model.error.AuthorizationException ae; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      IRE((short)1, "ire"),
+      ACE((short)2, "ace"),
+      ASE((short)3, "ase"),
+      AE((short)4, "ae");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // IRE
+            return IRE;
+          case 2: // ACE
+            return ACE;
+          case 3: // ASE
+            return ASE;
+          case 4: // AE
+            return AE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.IRE, new org.apache.thrift.meta_data.FieldMetaData("ire", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.InvalidRequestException.class)));
+      tmpMap.put(_Fields.ACE, new org.apache.thrift.meta_data.FieldMetaData("ace", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AiravataClientException.class)));
+      tmpMap.put(_Fields.ASE, new org.apache.thrift.meta_data.FieldMetaData("ase", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AiravataSystemException.class)));
+      tmpMap.put(_Fields.AE, new org.apache.thrift.meta_data.FieldMetaData("ae", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AuthorizationException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(saveParsingTemplate_result.class, metaDataMap);
+    }
+
+    public saveParsingTemplate_result() {
+    }
+
+    public saveParsingTemplate_result(
+      java.lang.String success,
+      org.apache.airavata.model.error.InvalidRequestException ire,
+      org.apache.airavata.model.error.AiravataClientException ace,
+      org.apache.airavata.model.error.AiravataSystemException ase,
+      org.apache.airavata.model.error.AuthorizationException ae)
+    {
+      this();
+      this.success = success;
+      this.ire = ire;
+      this.ace = ace;
+      this.ase = ase;
+      this.ae = ae;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public saveParsingTemplate_result(saveParsingTemplate_result other) {
+      if (other.isSetSuccess()) {
+        this.success = other.success;
+      }
+      if (other.isSetIre()) {
+        this.ire = new org.apache.airavata.model.error.InvalidRequestException(other.ire);
+      }
+      if (other.isSetAce()) {
+        this.ace = new org.apache.airavata.model.error.AiravataClientException(other.ace);
+      }
+      if (other.isSetAse()) {
+        this.ase = new org.apache.airavata.model.error.AiravataSystemException(other.ase);
+      }
+      if (other.isSetAe()) {
+        this.ae = new org.apache.airavata.model.error.AuthorizationException(other.ae);
+      }
+    }
+
+    public saveParsingTemplate_result deepCopy() {
+      return new saveParsingTemplate_result(this);
+    }
+
+    @Override
+    public void clear() {
+      this.success = null;
+      this.ire = null;
+      this.ace = null;
+      this.ase = null;
+      this.ae = null;
+    }
+
+    public java.lang.String getSuccess() {
+      return this.success;
+    }
+
+    public saveParsingTemplate_result setSuccess(java.lang.String success) {
+      this.success = success;
+      return this;
+    }
+
+    public void unsetSuccess() {
+      this.success = null;
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return this.success != null;
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.InvalidRequestException getIre() {
+      return this.ire;
+    }
+
+    public saveParsingTemplate_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
+      this.ire = ire;
+      return this;
+    }
+
+    public void unsetIre() {
+      this.ire = null;
+    }
+
+    /** Returns true if field ire is set (has been assigned a value) and false otherwise */
+    public boolean isSetIre() {
+      return this.ire != null;
+    }
+
+    public void setIreIsSet(boolean value) {
+      if (!value) {
+        this.ire = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.AiravataClientException getAce() {
+      return this.ace;
+    }
+
+    public saveParsingTemplate_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
+      this.ace = ace;
+      return this;
+    }
+
+    public void unsetAce() {
+      this.ace = null;
+    }
+
+    /** Returns true if field ace is set (has been assigned a value) and false otherwise */
+    public boolean isSetAce() {
+      return this.ace != null;
+    }
+
+    public void setAceIsSet(boolean value) {
+      if (!value) {
+        this.ace = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.AiravataSystemException getAse() {
+      return this.ase;
+    }
+
+    public saveParsingTemplate_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
+      this.ase = ase;
+      return this;
+    }
+
+    public void unsetAse() {
+      this.ase = null;
+    }
+
+    /** Returns true if field ase is set (has been assigned a value) and false otherwise */
+    public boolean isSetAse() {
+      return this.ase != null;
+    }
+
+    public void setAseIsSet(boolean value) {
+      if (!value) {
+        this.ase = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.AuthorizationException getAe() {
+      return this.ae;
+    }
+
+    public saveParsingTemplate_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
+      this.ae = ae;
+      return this;
+    }
+
+    public void unsetAe() {
+      this.ae = null;
+    }
+
+    /** Returns true if field ae is set (has been assigned a value) and false otherwise */
+    public boolean isSetAe() {
+      return this.ae != null;
+    }
+
+    public void setAeIsSet(boolean value) {
+      if (!value) {
+        this.ae = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.lang.String)value);
+        }
+        break;
+
+      case IRE:
+        if (value == null) {
+          unsetIre();
+        } else {
+          setIre((org.apache.airavata.model.error.InvalidRequestException)value);
+        }
+        break;
+
+      case ACE:
+        if (value == null) {
+          unsetAce();
+        } else {
+          setAce((org.apache.airavata.model.error.AiravataClientException)value);
+        }
+        break;
+
+      case ASE:
+        if (value == null) {
+          unsetAse();
+        } else {
+          setAse((org.apache.airavata.model.error.AiravataSystemException)value);
+        }
+        break;
+
+      case AE:
+        if (value == null) {
+          unsetAe();
+        } else {
+          setAe((org.apache.airavata.model.error.AuthorizationException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return getSuccess();
+
+      case IRE:
+        return getIre();
+
+      case ACE:
+        return getAce();
+
+      case ASE:
+        return getAse();
+
+      case AE:
+        return getAe();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case IRE:
+        return isSetIre();
+      case ACE:
+        return isSetAce();
+      case ASE:
+        return isSetAse();
+      case AE:
+        return isSetAe();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof saveParsingTemplate_result)
+        return this.equals((saveParsingTemplate_result)that);
+      return false;
+    }
+
+    public boolean equals(saveParsingTemplate_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (!this.success.equals(that.success))
+          return false;
+      }
+
+      boolean this_present_ire = true && this.isSetIre();
+      boolean that_present_ire = true && that.isSetIre();
+      if (this_present_ire || that_present_ire) {
+        if (!(this_present_ire && that_present_ire))
+          return false;
+        if (!this.ire.equals(that.ire))
+          return false;
+      }
+
+      boolean this_present_ace = true && this.isSetAce();
+      boolean that_present_ace = true && that.isSetAce();
+      if (this_present_ace || that_present_ace) {
+        if (!(this_present_ace && that_present_ace))
+          return false;
+        if (!this.ace.equals(that.ace))
+          return false;
+      }
+
+      boolean this_present_ase = true && this.isSetAse();
+      boolean that_present_ase = true && that.isSetAse();
+      if (this_present_ase || that_present_ase) {
+        if (!(this_present_ase && that_present_ase))
+          return false;
+        if (!this.ase.equals(that.ase))
+          return false;
+      }
+
+      boolean this_present_ae = true && this.isSetAe();
+      boolean that_present_ae = true && that.isSetAe();
+      if (this_present_ae || that_present_ae) {
+        if (!(this_present_ae && that_present_ae))
+          return false;
+        if (!this.ae.equals(that.ae))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetIre()) ? 131071 : 524287);
+      if (isSetIre())
+        hashCode = hashCode * 8191 + ire.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetAce()) ? 131071 : 524287);
+      if (isSetAce())
+        hashCode = hashCode * 8191 + ace.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetAse()) ? 131071 : 524287);
+      if (isSetAse())
+        hashCode = hashCode * 8191 + ase.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetAe()) ? 131071 : 524287);
+      if (isSetAe())
+        hashCode = hashCode * 8191 + ae.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(saveParsingTemplate_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetIre()).compareTo(other.isSetIre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetIre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ire, other.ire);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetAce()).compareTo(other.isSetAce());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAce()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ace, other.ace);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetAse()).compareTo(other.isSetAse());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAse()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ase, other.ase);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetAe()).compareTo(other.isSetAe());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAe()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ae, other.ae);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("saveParsingTemplate_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ire:");
+      if (this.ire == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ire);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ace:");
+      if (this.ace == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ace);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ase:");
+      if (this.ase == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ase);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ae:");
+      if (this.ae == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ae);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class saveParsingTemplate_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public saveParsingTemplate_resultStandardScheme getScheme() {
+        return new saveParsingTemplate_resultStandardScheme();
+      }
+    }
+
+    private static class saveParsingTemplate_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<saveParsingTemplate_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.success = iprot.readString();
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // IRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ire = new org.apache.airavata.model.error.InvalidRequestException();
+                struct.ire.read(iprot);
+                struct.setIreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ACE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ace = new org.apache.airavata.model.error.AiravataClientException();
+                struct.ace.read(iprot);
+                struct.setAceIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // ASE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ase = new org.apache.airavata.model.error.AiravataSystemException();
+                struct.ase.read(iprot);
+                struct.setAseIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 4: // AE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ae = new org.apache.airavata.model.error.AuthorizationException();
+                struct.ae.read(iprot);
+                struct.setAeIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          oprot.writeString(struct.success);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ire != null) {
+          oprot.writeFieldBegin(IRE_FIELD_DESC);
+          struct.ire.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ace != null) {
+          oprot.writeFieldBegin(ACE_FIELD_DESC);
+          struct.ace.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ase != null) {
+          oprot.writeFieldBegin(ASE_FIELD_DESC);
+          struct.ase.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ae != null) {
+          oprot.writeFieldBegin(AE_FIELD_DESC);
+          struct.ae.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class saveParsingTemplate_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public saveParsingTemplate_resultTupleScheme getScheme() {
+        return new saveParsingTemplate_resultTupleScheme();
+      }
+    }
+
+    private static class saveParsingTemplate_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<saveParsingTemplate_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetIre()) {
+          optionals.set(1);
+        }
+        if (struct.isSetAce()) {
+          optionals.set(2);
+        }
+        if (struct.isSetAse()) {
+          optionals.set(3);
+        }
+        if (struct.isSetAe()) {
+          optionals.set(4);
+        }
+        oprot.writeBitSet(optionals, 5);
+        if (struct.isSetSuccess()) {
+          oprot.writeString(struct.success);
+        }
+        if (struct.isSetIre()) {
+          struct.ire.write(oprot);
+        }
+        if (struct.isSetAce()) {
+          struct.ace.write(oprot);
+        }
+        if (struct.isSetAse()) {
+          struct.ase.write(oprot);
+        }
+        if (struct.isSetAe()) {
+          struct.ae.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, saveParsingTemplate_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(5);
+        if (incoming.get(0)) {
+          struct.success = iprot.readString();
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.ire = new org.apache.airavata.model.error.InvalidRequestException();
+          struct.ire.read(iprot);
+          struct.setIreIsSet(true);
+        }
+        if (incoming.get(2)) {
+          struct.ace = new org.apache.airavata.model.error.AiravataClientException();
+          struct.ace.read(iprot);
+          struct.setAceIsSet(true);
+        }
+        if (incoming.get(3)) {
+          struct.ase = new org.apache.airavata.model.error.AiravataSystemException();
+          struct.ase.read(iprot);
+          struct.setAseIsSet(true);
+        }
+        if (incoming.get(4)) {
+          struct.ae = new org.apache.airavata.model.error.AuthorizationException();
+          struct.ae.read(iprot);
+          struct.setAeIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class removeParsingTemplate_args implements org.apache.thrift.TBase<removeParsingTemplate_args, removeParsingTemplate_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeParsingTemplate_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeParsingTemplate_args");
+
+    private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField TEMPLATE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("templateId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)3);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeParsingTemplate_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeParsingTemplate_argsTupleSchemeFactory();
+
+    public org.apache.airavata.model.security.AuthzToken authzToken; // required
+    public java.lang.String templateId; // required
+    public java.lang.String gatewayId; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      AUTHZ_TOKEN((short)1, "authzToken"),
+      TEMPLATE_ID((short)2, "templateId"),
+      GATEWAY_ID((short)3, "gatewayId");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // AUTHZ_TOKEN
+            return AUTHZ_TOKEN;
+          case 2: // TEMPLATE_ID
+            return TEMPLATE_ID;
+          case 3: // GATEWAY_ID
+            return GATEWAY_ID;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.AUTHZ_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("authzToken", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
+      tmpMap.put(_Fields.TEMPLATE_ID, new org.apache.thrift.meta_data.FieldMetaData("templateId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeParsingTemplate_args.class, metaDataMap);
+    }
+
+    public removeParsingTemplate_args() {
+    }
+
+    public removeParsingTemplate_args(
+      org.apache.airavata.model.security.AuthzToken authzToken,
+      java.lang.String templateId,
+      java.lang.String gatewayId)
+    {
+      this();
+      this.authzToken = authzToken;
+      this.templateId = templateId;
+      this.gatewayId = gatewayId;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public removeParsingTemplate_args(removeParsingTemplate_args other) {
+      if (other.isSetAuthzToken()) {
+        this.authzToken = new org.apache.airavata.model.security.AuthzToken(other.authzToken);
+      }
+      if (other.isSetTemplateId()) {
+        this.templateId = other.templateId;
+      }
+      if (other.isSetGatewayId()) {
+        this.gatewayId = other.gatewayId;
+      }
+    }
+
+    public removeParsingTemplate_args deepCopy() {
+      return new removeParsingTemplate_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.authzToken = null;
+      this.templateId = null;
+      this.gatewayId = null;
+    }
+
+    public org.apache.airavata.model.security.AuthzToken getAuthzToken() {
+      return this.authzToken;
+    }
+
+    public removeParsingTemplate_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
+      this.authzToken = authzToken;
+      return this;
+    }
+
+    public void unsetAuthzToken() {
+      this.authzToken = null;
+    }
+
+    /** Returns true if field authzToken is set (has been assigned a value) and false otherwise */
+    public boolean isSetAuthzToken() {
+      return this.authzToken != null;
+    }
+
+    public void setAuthzTokenIsSet(boolean value) {
+      if (!value) {
+        this.authzToken = null;
+      }
+    }
+
+    public java.lang.String getTemplateId() {
+      return this.templateId;
+    }
+
+    public removeParsingTemplate_args setTemplateId(java.lang.String templateId) {
+      this.templateId = templateId;
+      return this;
+    }
+
+    public void unsetTemplateId() {
+      this.templateId = null;
+    }
+
+    /** Returns true if field templateId is set (has been assigned a value) and false otherwise */
+    public boolean isSetTemplateId() {
+      return this.templateId != null;
+    }
+
+    public void setTemplateIdIsSet(boolean value) {
+      if (!value) {
+        this.templateId = null;
+      }
+    }
+
+    public java.lang.String getGatewayId() {
+      return this.gatewayId;
+    }
+
+    public removeParsingTemplate_args setGatewayId(java.lang.String gatewayId) {
+      this.gatewayId = gatewayId;
+      return this;
+    }
+
+    public void unsetGatewayId() {
+      this.gatewayId = null;
+    }
+
+    /** Returns true if field gatewayId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGatewayId() {
+      return this.gatewayId != null;
+    }
+
+    public void setGatewayIdIsSet(boolean value) {
+      if (!value) {
+        this.gatewayId = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case AUTHZ_TOKEN:
+        if (value == null) {
+          unsetAuthzToken();
+        } else {
+          setAuthzToken((org.apache.airavata.model.security.AuthzToken)value);
+        }
+        break;
+
+      case TEMPLATE_ID:
+        if (value == null) {
+          unsetTemplateId();
+        } else {
+          setTemplateId((java.lang.String)value);
+        }
+        break;
+
+      case GATEWAY_ID:
+        if (value == null) {
+          unsetGatewayId();
+        } else {
+          setGatewayId((java.lang.String)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case AUTHZ_TOKEN:
+        return getAuthzToken();
+
+      case TEMPLATE_ID:
+        return getTemplateId();
+
+      case GATEWAY_ID:
+        return getGatewayId();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case AUTHZ_TOKEN:
+        return isSetAuthzToken();
+      case TEMPLATE_ID:
+        return isSetTemplateId();
+      case GATEWAY_ID:
+        return isSetGatewayId();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof removeParsingTemplate_args)
+        return this.equals((removeParsingTemplate_args)that);
+      return false;
+    }
+
+    public boolean equals(removeParsingTemplate_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_authzToken = true && this.isSetAuthzToken();
+      boolean that_present_authzToken = true && that.isSetAuthzToken();
+      if (this_present_authzToken || that_present_authzToken) {
+        if (!(this_present_authzToken && that_present_authzToken))
+          return false;
+        if (!this.authzToken.equals(that.authzToken))
+          return false;
+      }
+
+      boolean this_present_templateId = true && this.isSetTemplateId();
+      boolean that_present_templateId = true && that.isSetTemplateId();
+      if (this_present_templateId || that_present_templateId) {
+        if (!(this_present_templateId && that_present_templateId))
+          return false;
+        if (!this.templateId.equals(that.templateId))
+          return false;
+      }
+
+      boolean this_present_gatewayId = true && this.isSetGatewayId();
+      boolean that_present_gatewayId = true && that.isSetGatewayId();
+      if (this_present_gatewayId || that_present_gatewayId) {
+        if (!(this_present_gatewayId && that_present_gatewayId))
+          return false;
+        if (!this.gatewayId.equals(that.gatewayId))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetAuthzToken()) ? 131071 : 524287);
+      if (isSetAuthzToken())
+        hashCode = hashCode * 8191 + authzToken.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetTemplateId()) ? 131071 : 524287);
+      if (isSetTemplateId())
+        hashCode = hashCode * 8191 + templateId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetGatewayId()) ? 131071 : 524287);
+      if (isSetGatewayId())
+        hashCode = hashCode * 8191 + gatewayId.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(removeParsingTemplate_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetAuthzToken()).compareTo(other.isSetAuthzToken());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAuthzToken()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.authzToken, other.authzToken);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetTemplateId()).compareTo(other.isSetTemplateId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetTemplateId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.templateId, other.templateId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetGatewayId()).compareTo(other.isSetGatewayId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetGatewayId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gatewayId, other.gatewayId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeParsingTemplate_args(");
+      boolean first = true;
+
+      sb.append("authzToken:");
+      if (this.authzToken == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.authzToken);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("templateId:");
+      if (this.templateId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.templateId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("gatewayId:");
+      if (this.gatewayId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.gatewayId);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (authzToken == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'authzToken' was not present! Struct: " + toString());
+      }
+      if (templateId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'templateId' was not present! Struct: " + toString());
+      }
+      if (gatewayId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'gatewayId' was not present! Struct: " + toString());
+      }
+      // check for sub-struct validity
+      if (authzToken != null) {
+        authzToken.validate();
+      }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class removeParsingTemplate_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeParsingTemplate_argsStandardScheme getScheme() {
+        return new removeParsingTemplate_argsStandardScheme();
+      }
+    }
+
+    private static class removeParsingTemplate_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeParsingTemplate_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // AUTHZ_TOKEN
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
+                struct.authzToken.read(iprot);
+                struct.setAuthzTokenIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // TEMPLATE_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.templateId = iprot.readString();
+                struct.setTemplateIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // GATEWAY_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.gatewayId = iprot.readString();
+                struct.setGatewayIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.authzToken != null) {
+          oprot.writeFieldBegin(AUTHZ_TOKEN_FIELD_DESC);
+          struct.authzToken.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.templateId != null) {
+          oprot.writeFieldBegin(TEMPLATE_ID_FIELD_DESC);
+          oprot.writeString(struct.templateId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.gatewayId != null) {
+          oprot.writeFieldBegin(GATEWAY_ID_FIELD_DESC);
+          oprot.writeString(struct.gatewayId);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class removeParsingTemplate_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeParsingTemplate_argsTupleScheme getScheme() {
+        return new removeParsingTemplate_argsTupleScheme();
+      }
+    }
+
+    private static class removeParsingTemplate_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeParsingTemplate_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.authzToken.write(oprot);
+        oprot.writeString(struct.templateId);
+        oprot.writeString(struct.gatewayId);
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.authzToken = new org.apache.airavata.model.security.AuthzToken();
+        struct.authzToken.read(iprot);
+        struct.setAuthzTokenIsSet(true);
+        struct.templateId = iprot.readString();
+        struct.setTemplateIdIsSet(true);
+        struct.gatewayId = iprot.readString();
+        struct.setGatewayIdIsSet(true);
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class removeParsingTemplate_result implements org.apache.thrift.TBase<removeParsingTemplate_result, removeParsingTemplate_result._Fields>, java.io.Serializable, Cloneable, Comparable<removeParsingTemplate_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeParsingTemplate_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
+    private static final org.apache.thrift.protocol.TField IRE_FIELD_DESC = new org.apache.thrift.protocol.TField("ire", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField ACE_FIELD_DESC = new org.apache.thrift.protocol.TField("ace", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+    private static final org.apache.thrift.protocol.TField ASE_FIELD_DESC = new org.apache.thrift.protocol.TField("ase", org.apache.thrift.protocol.TType.STRUCT, (short)3);
+    private static final org.apache.thrift.protocol.TField AE_FIELD_DESC = new org.apache.thrift.protocol.TField("ae", org.apache.thrift.protocol.TType.STRUCT, (short)4);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeParsingTemplate_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeParsingTemplate_resultTupleSchemeFactory();
+
+    public boolean success; // required
+    public org.apache.airavata.model.error.InvalidRequestException ire; // required
+    public org.apache.airavata.model.error.AiravataClientException ace; // required
+    public org.apache.airavata.model.error.AiravataSystemException ase; // required
+    public org.apache.airavata.model.error.AuthorizationException ae; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      IRE((short)1, "ire"),
+      ACE((short)2, "ace"),
+      ASE((short)3, "ase"),
+      AE((short)4, "ae");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // IRE
+            return IRE;
+          case 2: // ACE
+            return ACE;
+          case 3: // ASE
+            return ASE;
+          case 4: // AE
+            return AE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    private static final int __SUCCESS_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+      tmpMap.put(_Fields.IRE, new org.apache.thrift.meta_data.FieldMetaData("ire", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.InvalidRequestException.class)));
+      tmpMap.put(_Fields.ACE, new org.apache.thrift.meta_data.FieldMetaData("ace", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AiravataClientException.class)));
+      tmpMap.put(_Fields.ASE, new org.apache.thrift.meta_data.FieldMetaData("ase", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AiravataSystemException.class)));
+      tmpMap.put(_Fields.AE, new org.apache.thrift.meta_data.FieldMetaData("ae", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.error.AuthorizationException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeParsingTemplate_result.class, metaDataMap);
+    }
+
+    public removeParsingTemplate_result() {
+    }
+
+    public removeParsingTemplate_result(
+      boolean success,
+      org.apache.airavata.model.error.InvalidRequestException ire,
+      org.apache.airavata.model.error.AiravataClientException ace,
+      org.apache.airavata.model.error.AiravataSystemException ase,
+      org.apache.airavata.model.error.AuthorizationException ae)
+    {
+      this();
+      this.success = success;
+      setSuccessIsSet(true);
+      this.ire = ire;
+      this.ace = ace;
+      this.ase = ase;
+      this.ae = ae;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public removeParsingTemplate_result(removeParsingTemplate_result other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.success = other.success;
+      if (other.isSetIre()) {
+        this.ire = new org.apache.airavata.model.error.InvalidRequestException(other.ire);
+      }
+      if (other.isSetAce()) {
+        this.ace = new org.apache.airavata.model.error.AiravataClientException(other.ace);
+      }
+      if (other.isSetAse()) {
+        this.ase = new org.apache.airavata.model.error.AiravataSystemException(other.ase);
+      }
+      if (other.isSetAe()) {
+        this.ae = new org.apache.airavata.model.error.AuthorizationException(other.ae);
+      }
+    }
+
+    public removeParsingTemplate_result deepCopy() {
+      return new removeParsingTemplate_result(this);
+    }
+
+    @Override
+    public void clear() {
+      setSuccessIsSet(false);
+      this.success = false;
+      this.ire = null;
+      this.ace = null;
+      this.ase = null;
+      this.ae = null;
+    }
+
+    public boolean isSuccess() {
+      return this.success;
+    }
+
+    public removeParsingTemplate_result setSuccess(boolean success) {
+      this.success = success;
+      setSuccessIsSet(true);
+      return this;
+    }
+
+    public void unsetSuccess() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+    }
+
+    public org.apache.airavata.model.error.InvalidRequestException getIre() {
+      return this.ire;
+    }
+
+    public removeParsingTemplate_result setIre(org.apache.airavata.model.error.InvalidRequestException ire) {
+      this.ire = ire;
+      return this;
+    }
+
+    public void unsetIre() {
+      this.ire = null;
+    }
+
+    /** Returns true if field ire is set (has been assigned a value) and false otherwise */
+    public boolean isSetIre() {
+      return this.ire != null;
+    }
+
+    public void setIreIsSet(boolean value) {
+      if (!value) {
+        this.ire = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.AiravataClientException getAce() {
+      return this.ace;
+    }
+
+    public removeParsingTemplate_result setAce(org.apache.airavata.model.error.AiravataClientException ace) {
+      this.ace = ace;
+      return this;
+    }
+
+    public void unsetAce() {
+      this.ace = null;
+    }
+
+    /** Returns true if field ace is set (has been assigned a value) and false otherwise */
+    public boolean isSetAce() {
+      return this.ace != null;
+    }
+
+    public void setAceIsSet(boolean value) {
+      if (!value) {
+        this.ace = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.AiravataSystemException getAse() {
+      return this.ase;
+    }
+
+    public removeParsingTemplate_result setAse(org.apache.airavata.model.error.AiravataSystemException ase) {
+      this.ase = ase;
+      return this;
+    }
+
+    public void unsetAse() {
+      this.ase = null;
+    }
+
+    /** Returns true if field ase is set (has been assigned a value) and false otherwise */
+    public boolean isSetAse() {
+      return this.ase != null;
+    }
+
+    public void setAseIsSet(boolean value) {
+      if (!value) {
+        this.ase = null;
+      }
+    }
+
+    public org.apache.airavata.model.error.AuthorizationException getAe() {
+      return this.ae;
+    }
+
+    public removeParsingTemplate_result setAe(org.apache.airavata.model.error.AuthorizationException ae) {
+      this.ae = ae;
+      return this;
+    }
+
+    public void unsetAe() {
+      this.ae = null;
+    }
+
+    /** Returns true if field ae is set (has been assigned a value) and false otherwise */
+    public boolean isSetAe() {
+      return this.ae != null;
+    }
+
+    public void setAeIsSet(boolean value) {
+      if (!value) {
+        this.ae = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.lang.Boolean)value);
+        }
+        break;
+
+      case IRE:
+        if (value == null) {
+          unsetIre();
+        } else {
+          setIre((org.apache.airavata.model.error.InvalidRequestException)value);
+        }
+        break;
+
+      case ACE:
+        if (value == null) {
+          unsetAce();
+        } else {
+          setAce((org.apache.airavata.model.error.AiravataClientException)value);
+        }
+        break;
+
+      case ASE:
+        if (value == null) {
+          unsetAse();
+        } else {
+          setAse((org.apache.airavata.model.error.AiravataSystemException)value);
+        }
+        break;
+
+      case AE:
+        if (value == null) {
+          unsetAe();
+        } else {
+          setAe((org.apache.airavata.model.error.AuthorizationException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return isSuccess();
+
+      case IRE:
+        return getIre();
+
+      case ACE:
+        return getAce();
+
+      case ASE:
+        return getAse();
+
+      case AE:
+        return getAe();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case IRE:
+        return isSetIre();
+      case ACE:
+        return isSetAce();
+      case ASE:
+        return isSetAse();
+      case AE:
+        return isSetAe();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof removeParsingTemplate_result)
+        return this.equals((removeParsingTemplate_result)that);
+      return false;
+    }
+
+    public boolean equals(removeParsingTemplate_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true;
+      boolean that_present_success = true;
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (this.success != that.success)
+          return false;
+      }
+
+      boolean this_present_ire = true && this.isSetIre();
+      boolean that_present_ire = true && that.isSetIre();
+      if (this_present_ire || that_present_ire) {
+        if (!(this_present_ire && that_present_ire))
+          return false;
+        if (!this.ire.equals(that.ire))
+          return false;
+      }
+
+      boolean this_present_ace = true && this.isSetAce();
+      boolean that_present_ace = true && that.isSetAce();
+      if (this_present_ace || that_present_ace) {
+        if (!(this_present_ace && that_present_ace))
+          return false;
+        if (!this.ace.equals(that.ace))
+          return false;
+      }
+
+      boolean this_present_ase = true && this.isSetAse();
+      boolean that_present_ase = true && that.isSetAse();
+      if (this_present_ase || that_present_ase) {
+        if (!(this_present_ase && that_present_ase))
+          return false;
+        if (!this.ase.equals(that.ase))
+          return false;
+      }
+
+      boolean this_present_ae = true && this.isSetAe();
+      boolean that_present_ae = true && that.isSetAe();
+      if (this_present_ae || that_present_ae) {
+        if (!(this_present_ae && that_present_ae))
+          return false;
+        if (!this.ae.equals(that.ae))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+
+      hashCode = hashCode * 8191 + ((isSetIre()) ? 131071 : 524287);
+      if (isSetIre())
+        hashCode = hashCode * 8191 + ire.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetAce()) ? 131071 : 524287);
+      if (isSetAce())
+        hashCode = hashCode * 8191 + ace.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetAse()) ? 131071 : 524287);
+      if (isSetAse())
+        hashCode = hashCode * 8191 + ase.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetAe()) ? 131071 : 524287);
+      if (isSetAe())
+        hashCode = hashCode * 8191 + ae.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(removeParsingTemplate_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetIre()).compareTo(other.isSetIre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetIre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ire, other.ire);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetAce()).compareTo(other.isSetAce());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAce()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ace, other.ace);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetAse()).compareTo(other.isSetAse());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAse()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ase, other.ase);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetAe()).compareTo(other.isSetAe());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAe()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ae, other.ae);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeParsingTemplate_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      sb.append(this.success);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ire:");
+      if (this.ire == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ire);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ace:");
+      if (this.ace == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ace);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ase:");
+      if (this.ase == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ase);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ae:");
+      if (this.ae == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ae);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class removeParsingTemplate_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeParsingTemplate_resultStandardScheme getScheme() {
+        return new removeParsingTemplate_resultStandardScheme();
+      }
+    }
+
+    private static class removeParsingTemplate_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeParsingTemplate_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                struct.success = iprot.readBool();
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // IRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ire = new org.apache.airavata.model.error.InvalidRequestException();
+                struct.ire.read(iprot);
+                struct.setIreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ACE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ace = new org.apache.airavata.model.error.AiravataClientException();
+                struct.ace.read(iprot);
+                struct.setAceIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // ASE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ase = new org.apache.airavata.model.error.AiravataSystemException();
+                struct.ase.read(iprot);
+                struct.setAseIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 4: // AE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.ae = new org.apache.airavata.model.error.AuthorizationException();
+                struct.ae.read(iprot);
+                struct.setAeIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.isSetSuccess()) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          oprot.writeBool(struct.success);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ire != null) {
+          oprot.writeFieldBegin(IRE_FIELD_DESC);
+          struct.ire.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ace != null) {
+          oprot.writeFieldBegin(ACE_FIELD_DESC);
+          struct.ace.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ase != null) {
+          oprot.writeFieldBegin(ASE_FIELD_DESC);
+          struct.ase.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ae != null) {
+          oprot.writeFieldBegin(AE_FIELD_DESC);
+          struct.ae.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class removeParsingTemplate_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeParsingTemplate_resultTupleScheme getScheme() {
+        return new removeParsingTemplate_resultTupleScheme();
+      }
+    }
+
+    private static class removeParsingTemplate_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeParsingTemplate_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetIre()) {
+          optionals.set(1);
+        }
+        if (struct.isSetAce()) {
+          optionals.set(2);
+        }
+        if (struct.isSetAse()) {
+          optionals.set(3);
+        }
+        if (struct.isSetAe()) {
+          optionals.set(4);
+        }
+        oprot.writeBitSet(optionals, 5);
+        if (struct.isSetSuccess()) {
+          oprot.writeBool(struct.success);
+        }
+        if (struct.isSetIre()) {
+          struct.ire.write(oprot);
+        }
+        if (struct.isSetAce()) {
+          struct.ace.write(oprot);
+        }
+        if (struct.isSetAse()) {
+          struct.ase.write(oprot);
+        }
+        if (struct.isSetAe()) {
+          struct.ae.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, removeParsingTemplate_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(5);
+        if (incoming.get(0)) {
+          struct.success = iprot.readBool();
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.ire = new org.apache.airavata.model.error.InvalidRequestException();
+          struct.ire.read(iprot);
+          struct.setIreIsSet(true);
+        }
+        if (incoming.get(2)) {
+          struct.ace = new org.apache.airavata.model.error.AiravataClientException();
+          struct.ace.read(iprot);
+          struct.setAceIsSet(true);
+        }
+        if (incoming.get(3)) {
+          struct.ase = new org.apache.airavata.model.error.AiravataSystemException();
+          struct.ase.read(iprot);
+          struct.setAseIsSet(true);
+        }
+        if (incoming.get(4)) {
+          struct.ae = new org.apache.airavata.model.error.AuthorizationException();
+          struct.ae.read(iprot);
+          struct.setAeIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class listAllParsingTemplates_args implements org.apache.thrift.TBase<listAllParsingTemplates_args, listAllParsingTemplates_args._Fields>, java.io.Serializable, Cloneable, Comparable<listAllParsingTemplates_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("listAllParsingTemplates_args");
+
+    private static final org.apache.thrift.protocol.TField AUTHZ_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("authzToken", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)2);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new listAllParsingTemplates_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new listAllParsingTemplates_argsTupleSchemeFactory();
+
+    public org.apache.airavata.model.security.AuthzToken authzToken; // required
+    public java.lang.String gatewayId; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      AUTHZ_TOKEN((short)1, "authzToken"),
+      GATEWAY_ID((short)2, "gatewayId");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // AUTHZ_TOKEN
+            return AUTHZ_TOKEN;
+          case 2: // GATEWAY_ID
+            return GATEWAY_ID;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.AUTHZ_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("authzToken", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.security.AuthzToken.class)));
+      tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(listAllParsingTemplates_args.class, metaDataMap);
+    }
+
+    public listAllParsingTemplates_args() {
+    }
+
+    public listAllParsingTemplates_args(
+      org.apache.airavata.model.security.AuthzToken authzToken,
+      java.lang.String gatewayId)
+    {
+      this();
+      this.authzToken = authzToken;
+      this.gatewayId = gatewayId;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public listAllParsingTemplates_args(listAllParsingTemplates_args other) {
+      if (other.isSetAuthzToken()) {
+        this.authzToken = new org.apache.airavata.model.security.AuthzToken(other.authzToken);
+      }
+      if (other.isSetGatewayId()) {
+        this.gatewayId = other.gatewayId;
+      }
+    }
+
+    public listAllParsingTemplates_args deepCopy() {
+      return new listAllParsingTemplates_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.authzToken = null;
+      this.gatewayId = null;
+    }
+
+    public org.apache.airavata.model.security.AuthzToken getAuthzToken() {
+      return this.authzToken;
+    }
+
+    public listAllParsingTemplates_args setAuthzToken(org.apache.airavata.model.security.AuthzToken authzToken) {
+      this.authzToken = authzToken;
+      return this;
+    }
+
+    public void unsetAuthzToken() {
+      this.authzToken = null;
+    }
+
+    /** Returns true if field authzToken is set (has been assigned a value) and false otherwise */
+    public boolean isSetAuthzToken() {
+      return this.authzToken != null;
+    }
+
+    public void setAuthzTokenIsSet(boolean value) {
+      if (!value) {
+        this.authzToken = null;
+      }
+    }
+
+    public java.lang.String getGatewayId() {
+      return this.gatewayId;
+    }
+
+    public listAllParsingTemplates_args setGatewayId(java.lang.String gatewayId) {
+      this.gatewayId = gatewayId;
+      return this;
+    }
+
+    public void unsetGatewayId() {
+      this.gatewayId = null;
+    }
+
+    /** Returns true if field gatewayId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGatewayId() {
+      return this.gatewayId != null;
+    }
+
+    public void setGatewayIdIsSet(boolean value) {
+      if (!value) {
+        this.gatewayId = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case AUTHZ_TOKEN:
+        if (value == null) {
+          unsetAuthzToken();
+        } else {
+          setAuthzToken((org.apache.airavata.model.security.AuthzToken)value);
+        }
+        break;
+
+      case GATEWAY_ID:
+        if (value == null) {
+          unsetGatewayId();
+        } else {
+          setGatewayId((java.lang.String)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case AUTHZ_TOKEN:
+        return getAuthzToken();
+
+      case GATEWAY_ID:
+        return getGatewayId();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case AUTHZ_TOKEN:
+        return isSetAuthzToken();
+      case GATEWAY_ID:
+        return isSetGatewayId();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof listAllParsingTemplates_args)
+        return this.equals((listAllParsingTemplates_args)that);
+      return false;
+    }
+
+    public boolean equals(listAllParsingTemplates_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_authzToken = true && this.isSetAuthzToken();
+      boolean that_present_authzToken = true && that.isSetAuthzToken();
+      if (this_present_authzToken || that_present_authzToken) {
+        if (!(this_present_authzToken && that_present_authzToken))
+          return false;
+        if (!this.authzToken.equals(that.authzToken))
+          return false;
+      }
+
+      boolean this_present_gatewayId = true && this.isSetGatewayId();
+      boolean that_present_gatewayId = true && that.isSetGatewayId();
+      if (this_present_gatewayId || that_present_gatewayId) {
+        if (!(this_present_gatewayId && that_present_gatewayId))
+          return false;
+        if (!this.gatewayId.equals(that.gatewayId))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetAuthzToken()) ? 131071 : 524287);
+      if (isSetAuthzToken())
+        hashCode = hashCode * 8191 + authzToken.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetGatewayId()) ? 131071 : 524287);
+      if (isSetGatewayId())
+        hashCode = hashCode * 8191 + gatewayId.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(listAllParsingTemplates_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetAuthzToken()).compareTo(other.isSetAuthzToken());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetAuthzToken()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.authzToken, other.authzToken);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetGatewayId()).compareTo(other.isSetGatewayId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetGatewayId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.gatewayId, other.gatewayId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -294331,14 +297394,14 @@ public class Airavata {
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list450 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(_list450.size);
-                  org.apache.airavata.model.appcatalog.parser.ParsingTemplate _elem451;
-                  for (int _i452 = 0; _i452 < _list450.size; ++_i452)
+                  org.apache.thrift.protocol.TList _list466 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(_list466.size);
+                  org.apache.airavata.model.appcatalog.parser.ParsingTemplate _elem467;
+                  for (int _i468 = 0; _i468 < _list466.size; ++_i468)
                   {
-                    _elem451 = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
-                    _elem451.read(iprot);
-                    struct.success.add(_elem451);
+                    _elem467 = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
+                    _elem467.read(iprot);
+                    struct.success.add(_elem467);
                   }
                   iprot.readListEnd();
                 }
@@ -294402,9 +297465,9 @@ public class Airavata {
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate _iter453 : struct.success)
+            for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate _iter469 : struct.success)
             {
-              _iter453.write(oprot);
+              _iter469.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -294467,9 +297530,9 @@ public class Airavata {
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate _iter454 : struct.success)
+            for (org.apache.airavata.model.appcatalog.parser.ParsingTemplate _iter470 : struct.success)
             {
-              _iter454.write(oprot);
+              _iter470.write(oprot);
             }
           }
         }
@@ -294493,14 +297556,14 @@ public class Airavata {
         java.util.BitSet incoming = iprot.readBitSet(5);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list455 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(_list455.size);
-            org.apache.airavata.model.appcatalog.parser.ParsingTemplate _elem456;
-            for (int _i457 = 0; _i457 < _list455.size; ++_i457)
+            org.apache.thrift.protocol.TList _list471 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>(_list471.size);
+            org.apache.airavata.model.appcatalog.parser.ParsingTemplate _elem472;
+            for (int _i473 = 0; _i473 < _list471.size; ++_i473)
             {
-              _elem456 = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
-              _elem456.read(iprot);
-              struct.success.add(_elem456);
+              _elem472 = new org.apache.airavata.model.appcatalog.parser.ParsingTemplate();
+              _elem472.read(iprot);
+              struct.success.add(_elem472);
             }
           }
           struct.setSuccessIsSet(true);
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata-remote b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata-remote
index 2531223..5d4ef6e 100755
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata-remote
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata-remote
@@ -211,6 +211,8 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
     print('   listAllParsers(AuthzToken authzToken, string gatewayId)')
     print('  bool removeParser(AuthzToken authzToken, string parserId, string gatewayId)')
     print('  ParsingTemplate getParsingTemplate(AuthzToken authzToken, string templateId, string gatewayId)')
+    print('   getParsingTemplatesForApplication(AuthzToken authzToken, string appInterfaceId, string gatewayId)')
+    print('  void addParsingTemplatesForExperiment(AuthzToken authzToken,  templateIds, string experimentId)')
     print('   getParsingTemplatesForExperiment(AuthzToken authzToken, string experimentId, string gatewayId)')
     print('  string saveParsingTemplate(AuthzToken authzToken, ParsingTemplate parsingTemplate)')
     print('  bool removeParsingTemplate(AuthzToken authzToken, string templateId, string gatewayId)')
@@ -1417,6 +1419,18 @@ elif cmd == 'getParsingTemplate':
         sys.exit(1)
     pp.pprint(client.getParsingTemplate(eval(args[0]), args[1], args[2],))
 
+elif cmd == 'getParsingTemplatesForApplication':
+    if len(args) != 3:
+        print('getParsingTemplatesForApplication requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.getParsingTemplatesForApplication(eval(args[0]), args[1], args[2],))
+
+elif cmd == 'addParsingTemplatesForExperiment':
+    if len(args) != 3:
+        print('addParsingTemplatesForExperiment requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.addParsingTemplatesForExperiment(eval(args[0]), eval(args[1]), args[2],))
+
 elif cmd == 'getParsingTemplatesForExperiment':
     if len(args) != 3:
         print('getParsingTemplatesForExperiment requires 3 args')
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata.py
index 94b5d17..4141c94 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/api/Airavata.py
@@ -3558,6 +3558,24 @@ class Iface(airavata.base.api.BaseAPI.Iface):
         """
         pass
 
+    def getParsingTemplatesForApplication(self, authzToken, appInterfaceId, gatewayId):
+        """
+        Parameters:
+         - authzToken
+         - appInterfaceId
+         - gatewayId
+        """
+        pass
+
+    def addParsingTemplatesForExperiment(self, authzToken, templateIds, experimentId):
+        """
+        Parameters:
+         - authzToken
+         - templateIds
+         - experimentId
+        """
+        pass
+
     def getParsingTemplatesForExperiment(self, authzToken, experimentId, gatewayId):
         """
         Parameters:
@@ -13455,6 +13473,90 @@ class Client(airavata.base.api.BaseAPI.Client, Iface):
             raise result.ae
         raise TApplicationException(TApplicationException.MISSING_RESULT, "getParsingTemplate failed: unknown result")
 
+    def getParsingTemplatesForApplication(self, authzToken, appInterfaceId, gatewayId):
+        """
+        Parameters:
+         - authzToken
+         - appInterfaceId
+         - gatewayId
+        """
+        self.send_getParsingTemplatesForApplication(authzToken, appInterfaceId, gatewayId)
+        return self.recv_getParsingTemplatesForApplication()
+
+    def send_getParsingTemplatesForApplication(self, authzToken, appInterfaceId, gatewayId):
+        self._oprot.writeMessageBegin('getParsingTemplatesForApplication', TMessageType.CALL, self._seqid)
+        args = getParsingTemplatesForApplication_args()
+        args.authzToken = authzToken
+        args.appInterfaceId = appInterfaceId
+        args.gatewayId = gatewayId
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getParsingTemplatesForApplication(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getParsingTemplatesForApplication_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        if result.ire is not None:
+            raise result.ire
+        if result.ace is not None:
+            raise result.ace
+        if result.ase is not None:
+            raise result.ase
+        if result.ae is not None:
+            raise result.ae
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getParsingTemplatesForApplication failed: unknown result")
+
+    def addParsingTemplatesForExperiment(self, authzToken, templateIds, experimentId):
+        """
+        Parameters:
+         - authzToken
+         - templateIds
+         - experimentId
+        """
+        self.send_addParsingTemplatesForExperiment(authzToken, templateIds, experimentId)
+        self.recv_addParsingTemplatesForExperiment()
+
+    def send_addParsingTemplatesForExperiment(self, authzToken, templateIds, experimentId):
+        self._oprot.writeMessageBegin('addParsingTemplatesForExperiment', TMessageType.CALL, self._seqid)
+        args = addParsingTemplatesForExperiment_args()
+        args.authzToken = authzToken
+        args.templateIds = templateIds
+        args.experimentId = experimentId
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_addParsingTemplatesForExperiment(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = addParsingTemplatesForExperiment_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.ire is not None:
+            raise result.ire
+        if result.ace is not None:
+            raise result.ace
+        if result.ase is not None:
+            raise result.ase
+        if result.ae is not None:
+            raise result.ae
+        return
+
     def getParsingTemplatesForExperiment(self, authzToken, experimentId, gatewayId):
         """
         Parameters:
@@ -13814,6 +13916,8 @@ class Processor(airavata.base.api.BaseAPI.Processor, Iface, TProcessor):
         self._processMap["listAllParsers"] = Processor.process_listAllParsers
         self._processMap["removeParser"] = Processor.process_removeParser
         self._processMap["getParsingTemplate"] = Processor.process_getParsingTemplate
+        self._processMap["getParsingTemplatesForApplication"] = Processor.process_getParsingTemplatesForApplication
+        self._processMap["addParsingTemplatesForExperiment"] = Processor.process_addParsingTemplatesForExperiment
         self._processMap["getParsingTemplatesForExperiment"] = Processor.process_getParsingTemplatesForExperiment
         self._processMap["saveParsingTemplate"] = Processor.process_saveParsingTemplate
         self._processMap["removeParsingTemplate"] = Processor.process_removeParsingTemplate
@@ -19664,6 +19768,68 @@ class Processor(airavata.base.api.BaseAPI.Processor, Iface, TProcessor):
         oprot.writeMessageEnd()
         oprot.trans.flush()
 
+    def process_getParsingTemplatesForApplication(self, seqid, iprot, oprot):
+        args = getParsingTemplatesForApplication_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = getParsingTemplatesForApplication_result()
+        try:
+            result.success = self._handler.getParsingTemplatesForApplication(args.authzToken, args.appInterfaceId, args.gatewayId)
+            msg_type = TMessageType.REPLY
+        except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+            raise
+        except airavata.api.error.ttypes.InvalidRequestException as ire:
+            msg_type = TMessageType.REPLY
+            result.ire = ire
+        except airavata.api.error.ttypes.AiravataClientException as ace:
+            msg_type = TMessageType.REPLY
+            result.ace = ace
+        except airavata.api.error.ttypes.AiravataSystemException as ase:
+            msg_type = TMessageType.REPLY
+            result.ase = ase
+        except airavata.api.error.ttypes.AuthorizationException as ae:
+            msg_type = TMessageType.REPLY
+            result.ae = ae
+        except Exception as ex:
+            msg_type = TMessageType.EXCEPTION
+            logging.exception(ex)
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("getParsingTemplatesForApplication", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_addParsingTemplatesForExperiment(self, seqid, iprot, oprot):
+        args = addParsingTemplatesForExperiment_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = addParsingTemplatesForExperiment_result()
+        try:
+            self._handler.addParsingTemplatesForExperiment(args.authzToken, args.templateIds, args.experimentId)
+            msg_type = TMessageType.REPLY
+        except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+            raise
+        except airavata.api.error.ttypes.InvalidRequestException as ire:
+            msg_type = TMessageType.REPLY
+            result.ire = ire
+        except airavata.api.error.ttypes.AiravataClientException as ace:
+            msg_type = TMessageType.REPLY
+            result.ace = ace
+        except airavata.api.error.ttypes.AiravataSystemException as ase:
+            msg_type = TMessageType.REPLY
+            result.ase = ase
+        except airavata.api.error.ttypes.AuthorizationException as ae:
+            msg_type = TMessageType.REPLY
+            result.ae = ae
+        except Exception as ex:
+            msg_type = TMessageType.EXCEPTION
+            logging.exception(ex)
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("addParsingTemplatesForExperiment", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
     def process_getParsingTemplatesForExperiment(self, seqid, iprot, oprot):
         args = getParsingTemplatesForExperiment_args()
         args.read(iprot)
@@ -55309,7 +55475,385 @@ class getGroupComputeResourcePreference_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePreference_result')
+        oprot.writeStructBegin('getGroupComputeResourcePreference_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ire is not None:
+            oprot.writeFieldBegin('ire', TType.STRUCT, 1)
+            self.ire.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ace is not None:
+            oprot.writeFieldBegin('ace', TType.STRUCT, 2)
+            self.ace.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ase is not None:
+            oprot.writeFieldBegin('ase', TType.STRUCT, 3)
+            self.ase.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ae is not None:
+            oprot.writeFieldBegin('ae', TType.STRUCT, 4)
+            self.ae.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class getGroupComputeResourcePolicy_args(object):
+    """
+    Attributes:
+     - authzToken
+     - resourcePolicyId
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
+        (2, TType.STRING, 'resourcePolicyId', 'UTF8', None, ),  # 2
+    )
+
+    def __init__(self, authzToken=None, resourcePolicyId=None,):
+        self.authzToken = authzToken
+        self.resourcePolicyId = resourcePolicyId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.authzToken = airavata.model.security.ttypes.AuthzToken()
+                    self.authzToken.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.resourcePolicyId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('getGroupComputeResourcePolicy_args')
+        if self.authzToken is not None:
+            oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
+            self.authzToken.write(oprot)
+            oprot.writeFieldEnd()
+        if self.resourcePolicyId is not None:
+            oprot.writeFieldBegin('resourcePolicyId', TType.STRING, 2)
+            oprot.writeString(self.resourcePolicyId.encode('utf-8') if sys.version_info[0] == 2 else self.resourcePolicyId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.authzToken is None:
+            raise TProtocolException(message='Required field authzToken is unset!')
+        if self.resourcePolicyId is None:
+            raise TProtocolException(message='Required field resourcePolicyId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class getGroupComputeResourcePolicy_result(object):
+    """
+    Attributes:
+     - success
+     - ire
+     - ace
+     - ase
+     - ae
+    """
+
+    thrift_spec = (
+        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy.thrift_spec), None, ),  # 0
+        (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
+        (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
+        (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
+        (4, TType.STRUCT, 'ae', (airavata.api.error.ttypes.AuthorizationException, airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ),  # 4
+    )
+
+    def __init__(self, success=None, ire=None, ace=None, ase=None, ae=None,):
+        self.success = success
+        self.ire = ire
+        self.ace = ace
+        self.ase = ase
+        self.ae = ae
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 1:
+                if ftype == TType.STRUCT:
+                    self.ire = airavata.api.error.ttypes.InvalidRequestException()
+                    self.ire.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.ace = airavata.api.error.ttypes.AiravataClientException()
+                    self.ace.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRUCT:
+                    self.ase = airavata.api.error.ttypes.AiravataSystemException()
+                    self.ase.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRUCT:
+                    self.ae = airavata.api.error.ttypes.AuthorizationException()
+                    self.ae.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('getGroupComputeResourcePolicy_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ire is not None:
+            oprot.writeFieldBegin('ire', TType.STRUCT, 1)
+            self.ire.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ace is not None:
+            oprot.writeFieldBegin('ace', TType.STRUCT, 2)
+            self.ace.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ase is not None:
+            oprot.writeFieldBegin('ase', TType.STRUCT, 3)
+            self.ase.write(oprot)
+            oprot.writeFieldEnd()
+        if self.ae is not None:
+            oprot.writeFieldBegin('ae', TType.STRUCT, 4)
+            self.ae.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class getBatchQueueResourcePolicy_args(object):
+    """
+    Attributes:
+     - authzToken
+     - resourcePolicyId
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
+        (2, TType.STRING, 'resourcePolicyId', 'UTF8', None, ),  # 2
+    )
+
+    def __init__(self, authzToken=None, resourcePolicyId=None,):
+        self.authzToken = authzToken
+        self.resourcePolicyId = resourcePolicyId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.authzToken = airavata.model.security.ttypes.AuthzToken()
+                    self.authzToken.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.resourcePolicyId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('getBatchQueueResourcePolicy_args')
+        if self.authzToken is not None:
+            oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
+            self.authzToken.write(oprot)
+            oprot.writeFieldEnd()
+        if self.resourcePolicyId is not None:
+            oprot.writeFieldBegin('resourcePolicyId', TType.STRING, 2)
+            oprot.writeString(self.resourcePolicyId.encode('utf-8') if sys.version_info[0] == 2 else self.resourcePolicyId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.authzToken is None:
+            raise TProtocolException(message='Required field authzToken is unset!')
+        if self.resourcePolicyId is None:
+            raise TProtocolException(message='Required field resourcePolicyId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class getBatchQueueResourcePolicy_result(object):
+    """
+    Attributes:
+     - success
+     - ire
+     - ace
+     - ase
+     - ae
+    """
+
+    thrift_spec = (
+        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy.thrift_spec), None, ),  # 0
+        (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
+        (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
+        (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
+        (4, TType.STRUCT, 'ae', (airavata.api.error.ttypes.AuthorizationException, airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ),  # 4
+    )
+
+    def __init__(self, success=None, ire=None, ace=None, ase=None, ae=None,):
+        self.success = success
+        self.ire = ire
+        self.ace = ace
+        self.ase = ase
+        self.ae = ae
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 1:
+                if ftype == TType.STRUCT:
+                    self.ire = airavata.api.error.ttypes.InvalidRequestException()
+                    self.ire.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.ace = airavata.api.error.ttypes.AiravataClientException()
+                    self.ace.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRUCT:
+                    self.ase = airavata.api.error.ttypes.AiravataSystemException()
+                    self.ase.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRUCT:
+                    self.ae = airavata.api.error.ttypes.AuthorizationException()
+                    self.ae.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('getBatchQueueResourcePolicy_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.STRUCT, 0)
             self.success.write(oprot)
@@ -55348,22 +55892,22 @@ class getGroupComputeResourcePreference_result(object):
         return not (self == other)
 
 
-class getGroupComputeResourcePolicy_args(object):
+class getGroupComputeResourcePrefList_args(object):
     """
     Attributes:
      - authzToken
-     - resourcePolicyId
+     - groupResourceProfileId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'resourcePolicyId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'groupResourceProfileId', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, resourcePolicyId=None,):
+    def __init__(self, authzToken=None, groupResourceProfileId=None,):
         self.authzToken = authzToken
-        self.resourcePolicyId = resourcePolicyId
+        self.groupResourceProfileId = groupResourceProfileId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -55382,7 +55926,7 @@ class getGroupComputeResourcePolicy_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.resourcePolicyId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.groupResourceProfileId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -55394,14 +55938,14 @@ class getGroupComputeResourcePolicy_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePolicy_args')
+        oprot.writeStructBegin('getGroupComputeResourcePrefList_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.resourcePolicyId is not None:
-            oprot.writeFieldBegin('resourcePolicyId', TType.STRING, 2)
-            oprot.writeString(self.resourcePolicyId.encode('utf-8') if sys.version_info[0] == 2 else self.resourcePolicyId)
+        if self.groupResourceProfileId is not None:
+            oprot.writeFieldBegin('groupResourceProfileId', TType.STRING, 2)
+            oprot.writeString(self.groupResourceProfileId.encode('utf-8') if sys.version_info[0] == 2 else self.groupResourceProfileId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -55409,8 +55953,8 @@ class getGroupComputeResourcePolicy_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.resourcePolicyId is None:
-            raise TProtocolException(message='Required field resourcePolicyId is unset!')
+        if self.groupResourceProfileId is None:
+            raise TProtocolException(message='Required field groupResourceProfileId is unset!')
         return
 
     def __repr__(self):
@@ -55425,7 +55969,7 @@ class getGroupComputeResourcePolicy_args(object):
         return not (self == other)
 
 
-class getGroupComputeResourcePolicy_result(object):
+class getGroupComputeResourcePrefList_result(object):
     """
     Attributes:
      - success
@@ -55436,7 +55980,7 @@ class getGroupComputeResourcePolicy_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy.thrift_spec), None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference, airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference.thrift_spec), False), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -55460,9 +56004,14 @@ class getGroupComputeResourcePolicy_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.STRUCT:
-                    self.success = airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy()
-                    self.success.read(iprot)
+                if ftype == TType.LIST:
+                    self.success = []
+                    (_etype365, _size362) = iprot.readListBegin()
+                    for _i366 in range(_size362):
+                        _elem367 = airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference()
+                        _elem367.read(iprot)
+                        self.success.append(_elem367)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -55498,10 +56047,13 @@ class getGroupComputeResourcePolicy_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePolicy_result')
+        oprot.writeStructBegin('getGroupComputeResourcePrefList_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRUCT, 0)
-            self.success.write(oprot)
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter368 in self.success:
+                iter368.write(oprot)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -55537,22 +56089,22 @@ class getGroupComputeResourcePolicy_result(object):
         return not (self == other)
 
 
-class getBatchQueueResourcePolicy_args(object):
+class getGroupBatchQueueResourcePolicyList_args(object):
     """
     Attributes:
      - authzToken
-     - resourcePolicyId
+     - groupResourceProfileId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'resourcePolicyId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'groupResourceProfileId', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, resourcePolicyId=None,):
+    def __init__(self, authzToken=None, groupResourceProfileId=None,):
         self.authzToken = authzToken
-        self.resourcePolicyId = resourcePolicyId
+        self.groupResourceProfileId = groupResourceProfileId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -55571,7 +56123,7 @@ class getBatchQueueResourcePolicy_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.resourcePolicyId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.groupResourceProfileId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -55583,14 +56135,14 @@ class getBatchQueueResourcePolicy_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getBatchQueueResourcePolicy_args')
+        oprot.writeStructBegin('getGroupBatchQueueResourcePolicyList_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.resourcePolicyId is not None:
-            oprot.writeFieldBegin('resourcePolicyId', TType.STRING, 2)
-            oprot.writeString(self.resourcePolicyId.encode('utf-8') if sys.version_info[0] == 2 else self.resourcePolicyId)
+        if self.groupResourceProfileId is not None:
+            oprot.writeFieldBegin('groupResourceProfileId', TType.STRING, 2)
+            oprot.writeString(self.groupResourceProfileId.encode('utf-8') if sys.version_info[0] == 2 else self.groupResourceProfileId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -55598,8 +56150,8 @@ class getBatchQueueResourcePolicy_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.resourcePolicyId is None:
-            raise TProtocolException(message='Required field resourcePolicyId is unset!')
+        if self.groupResourceProfileId is None:
+            raise TProtocolException(message='Required field groupResourceProfileId is unset!')
         return
 
     def __repr__(self):
@@ -55614,7 +56166,7 @@ class getBatchQueueResourcePolicy_args(object):
         return not (self == other)
 
 
-class getBatchQueueResourcePolicy_result(object):
+class getGroupBatchQueueResourcePolicyList_result(object):
     """
     Attributes:
      - success
@@ -55625,7 +56177,7 @@ class getBatchQueueResourcePolicy_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy.thrift_spec), None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy.thrift_spec), False), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -55649,9 +56201,14 @@ class getBatchQueueResourcePolicy_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.STRUCT:
-                    self.success = airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy()
-                    self.success.read(iprot)
+                if ftype == TType.LIST:
+                    self.success = []
+                    (_etype372, _size369) = iprot.readListBegin()
+                    for _i373 in range(_size369):
+                        _elem374 = airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy()
+                        _elem374.read(iprot)
+                        self.success.append(_elem374)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -55687,10 +56244,13 @@ class getBatchQueueResourcePolicy_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getBatchQueueResourcePolicy_result')
+        oprot.writeStructBegin('getGroupBatchQueueResourcePolicyList_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRUCT, 0)
-            self.success.write(oprot)
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter375 in self.success:
+                iter375.write(oprot)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -55726,7 +56286,7 @@ class getBatchQueueResourcePolicy_result(object):
         return not (self == other)
 
 
-class getGroupComputeResourcePrefList_args(object):
+class getGroupComputeResourcePolicyList_args(object):
     """
     Attributes:
      - authzToken
@@ -55772,7 +56332,7 @@ class getGroupComputeResourcePrefList_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePrefList_args')
+        oprot.writeStructBegin('getGroupComputeResourcePolicyList_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -55803,7 +56363,7 @@ class getGroupComputeResourcePrefList_args(object):
         return not (self == other)
 
 
-class getGroupComputeResourcePrefList_result(object):
+class getGroupComputeResourcePolicyList_result(object):
     """
     Attributes:
      - success
@@ -55814,7 +56374,7 @@ class getGroupComputeResourcePrefList_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference, airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference.thrift_spec), False), None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy.thrift_spec), False), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -55840,11 +56400,11 @@ class getGroupComputeResourcePrefList_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype365, _size362) = iprot.readListBegin()
-                    for _i366 in range(_size362):
-                        _elem367 = airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference()
-                        _elem367.read(iprot)
-                        self.success.append(_elem367)
+                    (_etype379, _size376) = iprot.readListBegin()
+                    for _i380 in range(_size376):
+                        _elem381 = airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy()
+                        _elem381.read(iprot)
+                        self.success.append(_elem381)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -55881,12 +56441,12 @@ class getGroupComputeResourcePrefList_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePrefList_result')
+        oprot.writeStructBegin('getGroupComputeResourcePolicyList_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter368 in self.success:
-                iter368.write(oprot)
+            for iter382 in self.success:
+                iter382.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -55923,22 +56483,19 @@ class getGroupComputeResourcePrefList_result(object):
         return not (self == other)
 
 
-class getGroupBatchQueueResourcePolicyList_args(object):
+class getGatewayGroups_args(object):
     """
     Attributes:
      - authzToken
-     - groupResourceProfileId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'groupResourceProfileId', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, groupResourceProfileId=None,):
+    def __init__(self, authzToken=None,):
         self.authzToken = authzToken
-        self.groupResourceProfileId = groupResourceProfileId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -55955,11 +56512,6 @@ class getGroupBatchQueueResourcePolicyList_args(object):
                     self.authzToken.read(iprot)
                 else:
                     iprot.skip(ftype)
-            elif fid == 2:
-                if ftype == TType.STRING:
-                    self.groupResourceProfileId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                else:
-                    iprot.skip(ftype)
             else:
                 iprot.skip(ftype)
             iprot.readFieldEnd()
@@ -55969,23 +56521,17 @@ class getGroupBatchQueueResourcePolicyList_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupBatchQueueResourcePolicyList_args')
+        oprot.writeStructBegin('getGatewayGroups_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.groupResourceProfileId is not None:
-            oprot.writeFieldBegin('groupResourceProfileId', TType.STRING, 2)
-            oprot.writeString(self.groupResourceProfileId.encode('utf-8') if sys.version_info[0] == 2 else self.groupResourceProfileId)
-            oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.groupResourceProfileId is None:
-            raise TProtocolException(message='Required field groupResourceProfileId is unset!')
         return
 
     def __repr__(self):
@@ -56000,7 +56546,7 @@ class getGroupBatchQueueResourcePolicyList_args(object):
         return not (self == other)
 
 
-class getGroupBatchQueueResourcePolicyList_result(object):
+class getGatewayGroups_result(object):
     """
     Attributes:
      - success
@@ -56011,7 +56557,7 @@ class getGroupBatchQueueResourcePolicyList_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy.thrift_spec), False), None, ),  # 0
+        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.gatewaygroups.ttypes.GatewayGroups, airavata.model.appcatalog.gatewaygroups.ttypes.GatewayGroups.thrift_spec), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -56035,14 +56581,9 @@ class getGroupBatchQueueResourcePolicyList_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.LIST:
-                    self.success = []
-                    (_etype372, _size369) = iprot.readListBegin()
-                    for _i373 in range(_size369):
-                        _elem374 = airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy()
-                        _elem374.read(iprot)
-                        self.success.append(_elem374)
-                    iprot.readListEnd()
+                if ftype == TType.STRUCT:
+                    self.success = airavata.model.appcatalog.gatewaygroups.ttypes.GatewayGroups()
+                    self.success.read(iprot)
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -56078,13 +56619,10 @@ class getGroupBatchQueueResourcePolicyList_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupBatchQueueResourcePolicyList_result')
+        oprot.writeStructBegin('getGatewayGroups_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.LIST, 0)
-            oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter375 in self.success:
-                iter375.write(oprot)
-            oprot.writeListEnd()
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -56120,22 +56658,25 @@ class getGroupBatchQueueResourcePolicyList_result(object):
         return not (self == other)
 
 
-class getGroupComputeResourcePolicyList_args(object):
+class getParser_args(object):
     """
     Attributes:
      - authzToken
-     - groupResourceProfileId
+     - parserId
+     - gatewayId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'groupResourceProfileId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'parserId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
     )
 
-    def __init__(self, authzToken=None, groupResourceProfileId=None,):
+    def __init__(self, authzToken=None, parserId=None, gatewayId=None,):
         self.authzToken = authzToken
-        self.groupResourceProfileId = groupResourceProfileId
+        self.parserId = parserId
+        self.gatewayId = gatewayId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -56154,7 +56695,12 @@ class getGroupComputeResourcePolicyList_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.groupResourceProfileId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.parserId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -56166,14 +56712,18 @@ class getGroupComputeResourcePolicyList_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePolicyList_args')
+        oprot.writeStructBegin('getParser_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.groupResourceProfileId is not None:
-            oprot.writeFieldBegin('groupResourceProfileId', TType.STRING, 2)
-            oprot.writeString(self.groupResourceProfileId.encode('utf-8') if sys.version_info[0] == 2 else self.groupResourceProfileId)
+        if self.parserId is not None:
+            oprot.writeFieldBegin('parserId', TType.STRING, 2)
+            oprot.writeString(self.parserId.encode('utf-8') if sys.version_info[0] == 2 else self.parserId)
+            oprot.writeFieldEnd()
+        if self.gatewayId is not None:
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
+            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -56181,8 +56731,10 @@ class getGroupComputeResourcePolicyList_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.groupResourceProfileId is None:
-            raise TProtocolException(message='Required field groupResourceProfileId is unset!')
+        if self.parserId is None:
+            raise TProtocolException(message='Required field parserId is unset!')
+        if self.gatewayId is None:
+            raise TProtocolException(message='Required field gatewayId is unset!')
         return
 
     def __repr__(self):
@@ -56197,7 +56749,7 @@ class getGroupComputeResourcePolicyList_args(object):
         return not (self == other)
 
 
-class getGroupComputeResourcePolicyList_result(object):
+class getParser_result(object):
     """
     Attributes:
      - success
@@ -56208,7 +56760,7 @@ class getGroupComputeResourcePolicyList_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy, airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy.thrift_spec), False), None, ),  # 0
+        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.parser.ttypes.Parser, airavata.model.appcatalog.parser.ttypes.Parser.thrift_spec), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -56232,14 +56784,9 @@ class getGroupComputeResourcePolicyList_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.LIST:
-                    self.success = []
-                    (_etype379, _size376) = iprot.readListBegin()
-                    for _i380 in range(_size376):
-                        _elem381 = airavata.model.appcatalog.groupresourceprofile.ttypes.ComputeResourcePolicy()
-                        _elem381.read(iprot)
-                        self.success.append(_elem381)
-                    iprot.readListEnd()
+                if ftype == TType.STRUCT:
+                    self.success = airavata.model.appcatalog.parser.ttypes.Parser()
+                    self.success.read(iprot)
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -56275,13 +56822,10 @@ class getGroupComputeResourcePolicyList_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGroupComputeResourcePolicyList_result')
+        oprot.writeStructBegin('getParser_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.LIST, 0)
-            oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter382 in self.success:
-                iter382.write(oprot)
-            oprot.writeListEnd()
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -56317,19 +56861,22 @@ class getGroupComputeResourcePolicyList_result(object):
         return not (self == other)
 
 
-class getGatewayGroups_args(object):
+class saveParser_args(object):
     """
     Attributes:
      - authzToken
+     - parser
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
+        (2, TType.STRUCT, 'parser', (airavata.model.appcatalog.parser.ttypes.Parser, airavata.model.appcatalog.parser.ttypes.Parser.thrift_spec), None, ),  # 2
     )
 
-    def __init__(self, authzToken=None,):
+    def __init__(self, authzToken=None, parser=None,):
         self.authzToken = authzToken
+        self.parser = parser
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -56346,6 +56893,12 @@ class getGatewayGroups_args(object):
                     self.authzToken.read(iprot)
                 else:
                     iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.parser = airavata.model.appcatalog.parser.ttypes.Parser()
+                    self.parser.read(iprot)
+                else:
+                    iprot.skip(ftype)
             else:
                 iprot.skip(ftype)
             iprot.readFieldEnd()
@@ -56355,17 +56908,23 @@ class getGatewayGroups_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGatewayGroups_args')
+        oprot.writeStructBegin('saveParser_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
+        if self.parser is not None:
+            oprot.writeFieldBegin('parser', TType.STRUCT, 2)
+            self.parser.write(oprot)
+            oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
+        if self.parser is None:
+            raise TProtocolException(message='Required field parser is unset!')
         return
 
     def __repr__(self):
@@ -56380,7 +56939,7 @@ class getGatewayGroups_args(object):
         return not (self == other)
 
 
-class getGatewayGroups_result(object):
+class saveParser_result(object):
     """
     Attributes:
      - success
@@ -56391,7 +56950,7 @@ class getGatewayGroups_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.gatewaygroups.ttypes.GatewayGroups, airavata.model.appcatalog.gatewaygroups.ttypes.GatewayGroups.thrift_spec), None, ),  # 0
+        (0, TType.STRING, 'success', 'UTF8', None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -56415,9 +56974,8 @@ class getGatewayGroups_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.STRUCT:
-                    self.success = airavata.model.appcatalog.gatewaygroups.ttypes.GatewayGroups()
-                    self.success.read(iprot)
+                if ftype == TType.STRING:
+                    self.success = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -56453,10 +57011,10 @@ class getGatewayGroups_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getGatewayGroups_result')
+        oprot.writeStructBegin('saveParser_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRUCT, 0)
-            self.success.write(oprot)
+            oprot.writeFieldBegin('success', TType.STRING, 0)
+            oprot.writeString(self.success.encode('utf-8') if sys.version_info[0] == 2 else self.success)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -56492,24 +57050,21 @@ class getGatewayGroups_result(object):
         return not (self == other)
 
 
-class getParser_args(object):
+class listAllParsers_args(object):
     """
     Attributes:
      - authzToken
-     - parserId
      - gatewayId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'parserId', 'UTF8', None, ),  # 2
-        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
+        (2, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, parserId=None, gatewayId=None,):
+    def __init__(self, authzToken=None, gatewayId=None,):
         self.authzToken = authzToken
-        self.parserId = parserId
         self.gatewayId = gatewayId
 
     def read(self, iprot):
@@ -56529,11 +57084,6 @@ class getParser_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.parserId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                else:
-                    iprot.skip(ftype)
-            elif fid == 3:
-                if ftype == TType.STRING:
                     self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
@@ -56546,17 +57096,13 @@ class getParser_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getParser_args')
+        oprot.writeStructBegin('listAllParsers_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.parserId is not None:
-            oprot.writeFieldBegin('parserId', TType.STRING, 2)
-            oprot.writeString(self.parserId.encode('utf-8') if sys.version_info[0] == 2 else self.parserId)
-            oprot.writeFieldEnd()
         if self.gatewayId is not None:
-            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 2)
             oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
@@ -56565,8 +57111,6 @@ class getParser_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.parserId is None:
-            raise TProtocolException(message='Required field parserId is unset!')
         if self.gatewayId is None:
             raise TProtocolException(message='Required field gatewayId is unset!')
         return
@@ -56583,7 +57127,7 @@ class getParser_args(object):
         return not (self == other)
 
 
-class getParser_result(object):
+class listAllParsers_result(object):
     """
     Attributes:
      - success
@@ -56594,7 +57138,7 @@ class getParser_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.parser.ttypes.Parser, airavata.model.appcatalog.parser.ttypes.Parser.thrift_spec), None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.parser.ttypes.Parser, airavata.model.appcatalog.parser.ttypes.Parser.thrift_spec), False), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -56618,9 +57162,14 @@ class getParser_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.STRUCT:
-                    self.success = airavata.model.appcatalog.parser.ttypes.Parser()
-                    self.success.read(iprot)
+                if ftype == TType.LIST:
+                    self.success = []
+                    (_etype386, _size383) = iprot.readListBegin()
+                    for _i387 in range(_size383):
+                        _elem388 = airavata.model.appcatalog.parser.ttypes.Parser()
+                        _elem388.read(iprot)
+                        self.success.append(_elem388)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -56656,10 +57205,13 @@ class getParser_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getParser_result')
+        oprot.writeStructBegin('listAllParsers_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRUCT, 0)
-            self.success.write(oprot)
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter389 in self.success:
+                iter389.write(oprot)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -56695,22 +57247,25 @@ class getParser_result(object):
         return not (self == other)
 
 
-class saveParser_args(object):
+class removeParser_args(object):
     """
     Attributes:
      - authzToken
-     - parser
+     - parserId
+     - gatewayId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRUCT, 'parser', (airavata.model.appcatalog.parser.ttypes.Parser, airavata.model.appcatalog.parser.ttypes.Parser.thrift_spec), None, ),  # 2
+        (2, TType.STRING, 'parserId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
     )
 
-    def __init__(self, authzToken=None, parser=None,):
+    def __init__(self, authzToken=None, parserId=None, gatewayId=None,):
         self.authzToken = authzToken
-        self.parser = parser
+        self.parserId = parserId
+        self.gatewayId = gatewayId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -56728,9 +57283,13 @@ class saveParser_args(object):
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
-                if ftype == TType.STRUCT:
-                    self.parser = airavata.model.appcatalog.parser.ttypes.Parser()
-                    self.parser.read(iprot)
+                if ftype == TType.STRING:
+                    self.parserId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -56742,14 +57301,18 @@ class saveParser_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('saveParser_args')
+        oprot.writeStructBegin('removeParser_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.parser is not None:
-            oprot.writeFieldBegin('parser', TType.STRUCT, 2)
-            self.parser.write(oprot)
+        if self.parserId is not None:
+            oprot.writeFieldBegin('parserId', TType.STRING, 2)
+            oprot.writeString(self.parserId.encode('utf-8') if sys.version_info[0] == 2 else self.parserId)
+            oprot.writeFieldEnd()
+        if self.gatewayId is not None:
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
+            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -56757,8 +57320,10 @@ class saveParser_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.parser is None:
-            raise TProtocolException(message='Required field parser is unset!')
+        if self.parserId is None:
+            raise TProtocolException(message='Required field parserId is unset!')
+        if self.gatewayId is None:
+            raise TProtocolException(message='Required field gatewayId is unset!')
         return
 
     def __repr__(self):
@@ -56773,7 +57338,7 @@ class saveParser_args(object):
         return not (self == other)
 
 
-class saveParser_result(object):
+class removeParser_result(object):
     """
     Attributes:
      - success
@@ -56784,7 +57349,7 @@ class saveParser_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRING, 'success', 'UTF8', None, ),  # 0
+        (0, TType.BOOL, 'success', None, None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -56808,8 +57373,8 @@ class saveParser_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.STRING:
-                    self.success = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.BOOL:
+                    self.success = iprot.readBool()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -56845,10 +57410,10 @@ class saveParser_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('saveParser_result')
+        oprot.writeStructBegin('removeParser_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRING, 0)
-            oprot.writeString(self.success.encode('utf-8') if sys.version_info[0] == 2 else self.success)
+            oprot.writeFieldBegin('success', TType.BOOL, 0)
+            oprot.writeBool(self.success)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -56884,21 +57449,24 @@ class saveParser_result(object):
         return not (self == other)
 
 
-class listAllParsers_args(object):
+class getParsingTemplate_args(object):
     """
     Attributes:
      - authzToken
+     - templateId
      - gatewayId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'templateId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
     )
 
-    def __init__(self, authzToken=None, gatewayId=None,):
+    def __init__(self, authzToken=None, templateId=None, gatewayId=None,):
         self.authzToken = authzToken
+        self.templateId = templateId
         self.gatewayId = gatewayId
 
     def read(self, iprot):
@@ -56918,6 +57486,11 @@ class listAllParsers_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
+                    self.templateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
                     self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
@@ -56930,13 +57503,17 @@ class listAllParsers_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('listAllParsers_args')
+        oprot.writeStructBegin('getParsingTemplate_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
+        if self.templateId is not None:
+            oprot.writeFieldBegin('templateId', TType.STRING, 2)
+            oprot.writeString(self.templateId.encode('utf-8') if sys.version_info[0] == 2 else self.templateId)
+            oprot.writeFieldEnd()
         if self.gatewayId is not None:
-            oprot.writeFieldBegin('gatewayId', TType.STRING, 2)
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
             oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
@@ -56945,6 +57522,8 @@ class listAllParsers_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
+        if self.templateId is None:
+            raise TProtocolException(message='Required field templateId is unset!')
         if self.gatewayId is None:
             raise TProtocolException(message='Required field gatewayId is unset!')
         return
@@ -56961,7 +57540,7 @@ class listAllParsers_args(object):
         return not (self == other)
 
 
-class listAllParsers_result(object):
+class getParsingTemplate_result(object):
     """
     Attributes:
      - success
@@ -56972,7 +57551,7 @@ class listAllParsers_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.parser.ttypes.Parser, airavata.model.appcatalog.parser.ttypes.Parser.thrift_spec), False), None, ),  # 0
+        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.parser.ttypes.ParsingTemplate, airavata.model.appcatalog.parser.ttypes.ParsingTemplate.thrift_spec), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -56996,14 +57575,9 @@ class listAllParsers_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.LIST:
-                    self.success = []
-                    (_etype386, _size383) = iprot.readListBegin()
-                    for _i387 in range(_size383):
-                        _elem388 = airavata.model.appcatalog.parser.ttypes.Parser()
-                        _elem388.read(iprot)
-                        self.success.append(_elem388)
-                    iprot.readListEnd()
+                if ftype == TType.STRUCT:
+                    self.success = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
+                    self.success.read(iprot)
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -57039,13 +57613,10 @@ class listAllParsers_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('listAllParsers_result')
+        oprot.writeStructBegin('getParsingTemplate_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.LIST, 0)
-            oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter389 in self.success:
-                iter389.write(oprot)
-            oprot.writeListEnd()
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -57081,24 +57652,24 @@ class listAllParsers_result(object):
         return not (self == other)
 
 
-class removeParser_args(object):
+class getParsingTemplatesForApplication_args(object):
     """
     Attributes:
      - authzToken
-     - parserId
+     - appInterfaceId
      - gatewayId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'parserId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'appInterfaceId', 'UTF8', None, ),  # 2
         (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
     )
 
-    def __init__(self, authzToken=None, parserId=None, gatewayId=None,):
+    def __init__(self, authzToken=None, appInterfaceId=None, gatewayId=None,):
         self.authzToken = authzToken
-        self.parserId = parserId
+        self.appInterfaceId = appInterfaceId
         self.gatewayId = gatewayId
 
     def read(self, iprot):
@@ -57118,7 +57689,7 @@ class removeParser_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.parserId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.appInterfaceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
@@ -57135,14 +57706,14 @@ class removeParser_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('removeParser_args')
+        oprot.writeStructBegin('getParsingTemplatesForApplication_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.parserId is not None:
-            oprot.writeFieldBegin('parserId', TType.STRING, 2)
-            oprot.writeString(self.parserId.encode('utf-8') if sys.version_info[0] == 2 else self.parserId)
+        if self.appInterfaceId is not None:
+            oprot.writeFieldBegin('appInterfaceId', TType.STRING, 2)
+            oprot.writeString(self.appInterfaceId.encode('utf-8') if sys.version_info[0] == 2 else self.appInterfaceId)
             oprot.writeFieldEnd()
         if self.gatewayId is not None:
             oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
@@ -57154,8 +57725,8 @@ class removeParser_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.parserId is None:
-            raise TProtocolException(message='Required field parserId is unset!')
+        if self.appInterfaceId is None:
+            raise TProtocolException(message='Required field appInterfaceId is unset!')
         if self.gatewayId is None:
             raise TProtocolException(message='Required field gatewayId is unset!')
         return
@@ -57172,7 +57743,7 @@ class removeParser_args(object):
         return not (self == other)
 
 
-class removeParser_result(object):
+class getParsingTemplatesForApplication_result(object):
     """
     Attributes:
      - success
@@ -57183,7 +57754,7 @@ class removeParser_result(object):
     """
 
     thrift_spec = (
-        (0, TType.BOOL, 'success', None, None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.appcatalog.parser.ttypes.ParsingTemplate, airavata.model.appcatalog.parser.ttypes.ParsingTemplate.thrift_spec), False), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -57207,8 +57778,14 @@ class removeParser_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.BOOL:
-                    self.success = iprot.readBool()
+                if ftype == TType.LIST:
+                    self.success = []
+                    (_etype393, _size390) = iprot.readListBegin()
+                    for _i394 in range(_size390):
+                        _elem395 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
+                        _elem395.read(iprot)
+                        self.success.append(_elem395)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -57244,10 +57821,13 @@ class removeParser_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('removeParser_result')
+        oprot.writeStructBegin('getParsingTemplatesForApplication_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.BOOL, 0)
-            oprot.writeBool(self.success)
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter396 in self.success:
+                iter396.write(oprot)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -57283,25 +57863,25 @@ class removeParser_result(object):
         return not (self == other)
 
 
-class getParsingTemplate_args(object):
+class addParsingTemplatesForExperiment_args(object):
     """
     Attributes:
      - authzToken
-     - templateId
-     - gatewayId
+     - templateIds
+     - experimentId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'templateId', 'UTF8', None, ),  # 2
-        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
+        (2, TType.LIST, 'templateIds', (TType.STRING, 'UTF8', False), None, ),  # 2
+        (3, TType.STRING, 'experimentId', 'UTF8', None, ),  # 3
     )
 
-    def __init__(self, authzToken=None, templateId=None, gatewayId=None,):
+    def __init__(self, authzToken=None, templateIds=None, experimentId=None,):
         self.authzToken = authzToken
-        self.templateId = templateId
-        self.gatewayId = gatewayId
+        self.templateIds = templateIds
+        self.experimentId = experimentId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -57319,13 +57899,18 @@ class getParsingTemplate_args(object):
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
-                if ftype == TType.STRING:
-                    self.templateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.LIST:
+                    self.templateIds = []
+                    (_etype400, _size397) = iprot.readListBegin()
+                    for _i401 in range(_size397):
+                        _elem402 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.templateIds.append(_elem402)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
                 if ftype == TType.STRING:
-                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.experimentId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -57337,18 +57922,21 @@ class getParsingTemplate_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getParsingTemplate_args')
+        oprot.writeStructBegin('addParsingTemplatesForExperiment_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.templateId is not None:
-            oprot.writeFieldBegin('templateId', TType.STRING, 2)
-            oprot.writeString(self.templateId.encode('utf-8') if sys.version_info[0] == 2 else self.templateId)
+        if self.templateIds is not None:
+            oprot.writeFieldBegin('templateIds', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRING, len(self.templateIds))
+            for iter403 in self.templateIds:
+                oprot.writeString(iter403.encode('utf-8') if sys.version_info[0] == 2 else iter403)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
-        if self.gatewayId is not None:
-            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
-            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
+        if self.experimentId is not None:
+            oprot.writeFieldBegin('experimentId', TType.STRING, 3)
+            oprot.writeString(self.experimentId.encode('utf-8') if sys.version_info[0] == 2 else self.experimentId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -57356,10 +57944,10 @@ class getParsingTemplate_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.templateId is None:
-            raise TProtocolException(message='Required field templateId is unset!')
-        if self.gatewayId is None:
-            raise TProtocolException(message='Required field gatewayId is unset!')
+        if self.templateIds is None:
+            raise TProtocolException(message='Required field templateIds is unset!')
+        if self.experimentId is None:
+            raise TProtocolException(message='Required field experimentId is unset!')
         return
 
     def __repr__(self):
@@ -57374,10 +57962,9 @@ class getParsingTemplate_args(object):
         return not (self == other)
 
 
-class getParsingTemplate_result(object):
+class addParsingTemplatesForExperiment_result(object):
     """
     Attributes:
-     - success
      - ire
      - ace
      - ase
@@ -57385,15 +57972,14 @@ class getParsingTemplate_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.appcatalog.parser.ttypes.ParsingTemplate, airavata.model.appcatalog.parser.ttypes.ParsingTemplate.thrift_spec), None, ),  # 0
+        None,  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
         (4, TType.STRUCT, 'ae', (airavata.api.error.ttypes.AuthorizationException, airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ),  # 4
     )
 
-    def __init__(self, success=None, ire=None, ace=None, ase=None, ae=None,):
-        self.success = success
+    def __init__(self, ire=None, ace=None, ase=None, ae=None,):
         self.ire = ire
         self.ace = ace
         self.ase = ase
@@ -57408,13 +57994,7 @@ class getParsingTemplate_result(object):
             (fname, ftype, fid) = iprot.readFieldBegin()
             if ftype == TType.STOP:
                 break
-            if fid == 0:
-                if ftype == TType.STRUCT:
-                    self.success = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
-                    self.success.read(iprot)
-                else:
-                    iprot.skip(ftype)
-            elif fid == 1:
+            if fid == 1:
                 if ftype == TType.STRUCT:
                     self.ire = airavata.api.error.ttypes.InvalidRequestException()
                     self.ire.read(iprot)
@@ -57447,11 +58027,7 @@ class getParsingTemplate_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getParsingTemplate_result')
-        if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRUCT, 0)
-            self.success.write(oprot)
-            oprot.writeFieldEnd()
+        oprot.writeStructBegin('addParsingTemplatesForExperiment_result')
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
             self.ire.write(oprot)
@@ -57614,11 +58190,11 @@ class getParsingTemplatesForExperiment_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype393, _size390) = iprot.readListBegin()
-                    for _i394 in range(_size390):
-                        _elem395 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
-                        _elem395.read(iprot)
-                        self.success.append(_elem395)
+                    (_etype407, _size404) = iprot.readListBegin()
+                    for _i408 in range(_size404):
+                        _elem409 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
+                        _elem409.read(iprot)
+                        self.success.append(_elem409)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -57659,8 +58235,8 @@ class getParsingTemplatesForExperiment_result(object):
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter396 in self.success:
-                iter396.write(oprot)
+            for iter410 in self.success:
+                iter410.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -58202,11 +58778,11 @@ class listAllParsingTemplates_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype400, _size397) = iprot.readListBegin()
-                    for _i401 in range(_size397):
-                        _elem402 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
-                        _elem402.read(iprot)
-                        self.success.append(_elem402)
+                    (_etype414, _size411) = iprot.readListBegin()
+                    for _i415 in range(_size411):
+                        _elem416 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
+                        _elem416.read(iprot)
+                        self.success.append(_elem416)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -58247,8 +58823,8 @@ class listAllParsingTemplates_result(object):
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter403 in self.success:
-                iter403.write(oprot)
+            for iter417 in self.success:
+                iter417.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/experiment/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/experiment/ttypes.py
index 800d0ff..fd95710 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/experiment/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/experiment/ttypes.py
@@ -313,7 +313,7 @@ class ExperimentModel(object):
      - processes
      - workflow
      - executionType
-     - sweepCount
+     - sweepRange
     """
 
     thrift_spec = (
@@ -339,10 +339,10 @@ class ExperimentModel(object):
         (19, TType.LIST, 'processes', (TType.STRUCT, (airavata.model.process.ttypes.ProcessModel, airavata.model.process.ttypes.ProcessModel.thrift_spec), False), None, ),  # 19
         (20, TType.STRUCT, 'workflow', (airavata.model.workflow.ttypes.AiravataWorkflow, airavata.model.workflow.ttypes.AiravataWorkflow.thrift_spec), None, ),  # 20
         (21, TType.STRING, 'executionType', 'UTF8', None, ),  # 21
-        (22, TType.I32, 'sweepCount', None, None, ),  # 22
+        (22, TType.STRING, 'sweepRange', 'UTF8', None, ),  # 22
     )
 
-    def __init__(self, experimentId=thrift_spec[1][4], projectId=None, gatewayId=None, experimentType=thrift_spec[4][4], userName=None, experimentName=None, creationTime=None, description=None, executionId=None, gatewayExecutionId=None, gatewayInstanceId=None, enableEmailNotification=None, emailAddresses=None, userConfigurationData=None, experimentInputs=None, experimentOutputs=None, experimentStatus=None, errors=None, processes=None, workflow=None, executionType=None, sweepCount=None,):
+    def __init__(self, experimentId=thrift_spec[1][4], projectId=None, gatewayId=None, experimentType=thrift_spec[4][4], userName=None, experimentName=None, creationTime=None, description=None, executionId=None, gatewayExecutionId=None, gatewayInstanceId=None, enableEmailNotification=None, emailAddresses=None, userConfigurationData=None, experimentInputs=None, experimentOutputs=None, experimentStatus=None, errors=None, processes=None, workflow=None, executionType=None, sweepRange=None,):
         self.experimentId = experimentId
         self.projectId = projectId
         self.gatewayId = gatewayId
@@ -364,7 +364,7 @@ class ExperimentModel(object):
         self.processes = processes
         self.workflow = workflow
         self.executionType = executionType
-        self.sweepCount = sweepCount
+        self.sweepRange = sweepRange
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -518,8 +518,8 @@ class ExperimentModel(object):
                 else:
                     iprot.skip(ftype)
             elif fid == 22:
-                if ftype == TType.I32:
-                    self.sweepCount = iprot.readI32()
+                if ftype == TType.STRING:
+                    self.sweepRange = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -634,9 +634,9 @@ class ExperimentModel(object):
             oprot.writeFieldBegin('executionType', TType.STRING, 21)
             oprot.writeString(self.executionType.encode('utf-8') if sys.version_info[0] == 2 else self.executionType)
             oprot.writeFieldEnd()
-        if self.sweepCount is not None:
-            oprot.writeFieldBegin('sweepCount', TType.I32, 22)
-            oprot.writeI32(self.sweepCount)
+        if self.sweepRange is not None:
+            oprot.writeFieldBegin('sweepRange', TType.STRING, 22)
+            oprot.writeString(self.sweepRange.encode('utf-8') if sys.version_info[0] == 2 else self.sweepRange)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -1115,3 +1115,79 @@ class ExperimentStatistics(object):
 
     def __ne__(self, other):
         return not (self == other)
+
+
+class ExperimentParsingTemplate(object):
+    """
+    Attributes:
+     - experimentId
+     - parsingTemplateId
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'experimentId', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'parsingTemplateId', 'UTF8', None, ),  # 2
+    )
+
+    def __init__(self, experimentId=None, parsingTemplateId=None,):
+        self.experimentId = experimentId
+        self.parsingTemplateId = parsingTemplateId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.experimentId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.parsingTemplateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('ExperimentParsingTemplate')
+        if self.experimentId is not None:
+            oprot.writeFieldBegin('experimentId', TType.STRING, 1)
+            oprot.writeString(self.experimentId.encode('utf-8') if sys.version_info[0] == 2 else self.experimentId)
+            oprot.writeFieldEnd()
+        if self.parsingTemplateId is not None:
+            oprot.writeFieldBegin('parsingTemplateId', TType.STRING, 2)
+            oprot.writeString(self.parsingTemplateId.encode('utf-8') if sys.version_info[0] == 2 else self.parsingTemplateId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.experimentId is None:
+            raise TProtocolException(message='Required field experimentId is unset!')
+        if self.parsingTemplateId is None:
+            raise TProtocolException(message='Required field parsingTemplateId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/job/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/job/ttypes.py
index 1e16680..bc44a67 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/job/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/job/ttypes.py
@@ -221,3 +221,128 @@ class JobModel(object):
 
     def __ne__(self, other):
         return not (self == other)
+
+
+class ChildJobModel(object):
+    """
+    Attributes:
+     - childJobId
+     - parentJobId
+     - parentTaskId
+     - jobIndex
+     - jobStatuses
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'childJobId', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'parentJobId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'parentTaskId', 'UTF8', None, ),  # 3
+        (4, TType.I32, 'jobIndex', None, None, ),  # 4
+        (5, TType.LIST, 'jobStatuses', (TType.STRUCT, (airavata.model.status.ttypes.ChildJobStatus, airavata.model.status.ttypes.ChildJobStatus.thrift_spec), False), None, ),  # 5
+    )
+
+    def __init__(self, childJobId=None, parentJobId=None, parentTaskId=None, jobIndex=None, jobStatuses=None,):
+        self.childJobId = childJobId
+        self.parentJobId = parentJobId
+        self.parentTaskId = parentTaskId
+        self.jobIndex = jobIndex
+        self.jobStatuses = jobStatuses
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.childJobId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.parentJobId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.parentTaskId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I32:
+                    self.jobIndex = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.LIST:
+                    self.jobStatuses = []
+                    (_etype10, _size7) = iprot.readListBegin()
+                    for _i11 in range(_size7):
+                        _elem12 = airavata.model.status.ttypes.ChildJobStatus()
+                        _elem12.read(iprot)
+                        self.jobStatuses.append(_elem12)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('ChildJobModel')
+        if self.childJobId is not None:
+            oprot.writeFieldBegin('childJobId', TType.STRING, 1)
+            oprot.writeString(self.childJobId.encode('utf-8') if sys.version_info[0] == 2 else self.childJobId)
+            oprot.writeFieldEnd()
+        if self.parentJobId is not None:
+            oprot.writeFieldBegin('parentJobId', TType.STRING, 2)
+            oprot.writeString(self.parentJobId.encode('utf-8') if sys.version_info[0] == 2 else self.parentJobId)
+            oprot.writeFieldEnd()
+        if self.parentTaskId is not None:
+            oprot.writeFieldBegin('parentTaskId', TType.STRING, 3)
+            oprot.writeString(self.parentTaskId.encode('utf-8') if sys.version_info[0] == 2 else self.parentTaskId)
+            oprot.writeFieldEnd()
+        if self.jobIndex is not None:
+            oprot.writeFieldBegin('jobIndex', TType.I32, 4)
+            oprot.writeI32(self.jobIndex)
+            oprot.writeFieldEnd()
+        if self.jobStatuses is not None:
+            oprot.writeFieldBegin('jobStatuses', TType.LIST, 5)
+            oprot.writeListBegin(TType.STRUCT, len(self.jobStatuses))
+            for iter13 in self.jobStatuses:
+                iter13.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.childJobId is None:
+            raise TProtocolException(message='Required field childJobId is unset!')
+        if self.parentJobId is None:
+            raise TProtocolException(message='Required field parentJobId is unset!')
+        if self.parentTaskId is None:
+            raise TProtocolException(message='Required field parentTaskId is unset!')
+        if self.jobIndex is None:
+            raise TProtocolException(message='Required field jobIndex is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/status/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/status/ttypes.py
index 7dda202..3a4978c 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/status/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/airavata/model/status/ttypes.py
@@ -564,6 +564,104 @@ class JobStatus(object):
         return not (self == other)
 
 
+class ChildJobStatus(object):
+    """
+    Attributes:
+     - jobState
+     - timeOfStateChange
+     - reason
+     - statusId
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.I32, 'jobState', None, None, ),  # 1
+        (2, TType.I64, 'timeOfStateChange', None, None, ),  # 2
+        (3, TType.STRING, 'reason', 'UTF8', None, ),  # 3
+        (4, TType.STRING, 'statusId', 'UTF8', None, ),  # 4
+    )
+
+    def __init__(self, jobState=None, timeOfStateChange=None, reason=None, statusId=None,):
+        self.jobState = jobState
+        self.timeOfStateChange = timeOfStateChange
+        self.reason = reason
+        self.statusId = statusId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.jobState = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.timeOfStateChange = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.reason = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRING:
+                    self.statusId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('ChildJobStatus')
+        if self.jobState is not None:
+            oprot.writeFieldBegin('jobState', TType.I32, 1)
+            oprot.writeI32(self.jobState)
+            oprot.writeFieldEnd()
+        if self.timeOfStateChange is not None:
+            oprot.writeFieldBegin('timeOfStateChange', TType.I64, 2)
+            oprot.writeI64(self.timeOfStateChange)
+            oprot.writeFieldEnd()
+        if self.reason is not None:
+            oprot.writeFieldBegin('reason', TType.STRING, 3)
+            oprot.writeString(self.reason.encode('utf-8') if sys.version_info[0] == 2 else self.reason)
+            oprot.writeFieldEnd()
+        if self.statusId is not None:
+            oprot.writeFieldBegin('statusId', TType.STRING, 4)
+            oprot.writeString(self.statusId.encode('utf-8') if sys.version_info[0] == 2 else self.statusId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.jobState is None:
+            raise TProtocolException(message='Required field jobState is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
 class QueueStatusModel(object):
     """
     Attributes:
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/experiment/ExperimentModel.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/experiment/ExperimentModel.java
index 8f11459..9954058 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/experiment/ExperimentModel.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/experiment/ExperimentModel.java
@@ -65,7 +65,7 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
   private static final org.apache.thrift.protocol.TField PROCESSES_FIELD_DESC = new org.apache.thrift.protocol.TField("processes", org.apache.thrift.protocol.TType.LIST, (short)19);
   private static final org.apache.thrift.protocol.TField WORKFLOW_FIELD_DESC = new org.apache.thrift.protocol.TField("workflow", org.apache.thrift.protocol.TType.STRUCT, (short)20);
   private static final org.apache.thrift.protocol.TField EXECUTION_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("executionType", org.apache.thrift.protocol.TType.STRING, (short)21);
-  private static final org.apache.thrift.protocol.TField SWEEP_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("sweepCount", org.apache.thrift.protocol.TType.I32, (short)22);
+  private static final org.apache.thrift.protocol.TField SWEEP_RANGE_FIELD_DESC = new org.apache.thrift.protocol.TField("sweepRange", org.apache.thrift.protocol.TType.STRING, (short)22);
 
   private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new ExperimentModelStandardSchemeFactory();
   private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new ExperimentModelTupleSchemeFactory();
@@ -91,7 +91,7 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
   private java.util.List<org.apache.airavata.model.process.ProcessModel> processes; // optional
   private org.apache.airavata.model.workflow.AiravataWorkflow workflow; // optional
   private java.lang.String executionType; // optional
-  private int sweepCount; // optional
+  private java.lang.String sweepRange; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -120,7 +120,7 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
     PROCESSES((short)19, "processes"),
     WORKFLOW((short)20, "workflow"),
     EXECUTION_TYPE((short)21, "executionType"),
-    SWEEP_COUNT((short)22, "sweepCount");
+    SWEEP_RANGE((short)22, "sweepRange");
 
     private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -177,8 +177,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
           return WORKFLOW;
         case 21: // EXECUTION_TYPE
           return EXECUTION_TYPE;
-        case 22: // SWEEP_COUNT
-          return SWEEP_COUNT;
+        case 22: // SWEEP_RANGE
+          return SWEEP_RANGE;
         default:
           return null;
       }
@@ -221,9 +221,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
   // isset id assignments
   private static final int __CREATIONTIME_ISSET_ID = 0;
   private static final int __ENABLEEMAILNOTIFICATION_ISSET_ID = 1;
-  private static final int __SWEEPCOUNT_ISSET_ID = 2;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.DESCRIPTION,_Fields.EXECUTION_ID,_Fields.GATEWAY_EXECUTION_ID,_Fields.GATEWAY_INSTANCE_ID,_Fields.ENABLE_EMAIL_NOTIFICATION,_Fields.EMAIL_ADDRESSES,_Fields.USER_CONFIGURATION_DATA,_Fields.EXPERIMENT_INPUTS,_Fields.EXPERIMENT_OUTPUTS,_Fields.EXPERIMENT_STATUS,_Fields.ERRORS,_Fields.PROCESSES,_Fields.WORKFLOW,_Fields.EXECUTION_TYPE,_Fields.SWEEP_COUNT};
+  private static final _Fields optionals[] = {_Fields.CREATION_TIME,_Fields.DESCRIPTION,_Fields.EXECUTION_ID,_Fields.GATEWAY_EXECUTION_ID,_Fields.GATEWAY_INSTANCE_ID,_Fields.ENABLE_EMAIL_NOTIFICATION,_Fields.EMAIL_ADDRESSES,_Fields.USER_CONFIGURATION_DATA,_Fields.EXPERIMENT_INPUTS,_Fields.EXPERIMENT_OUTPUTS,_Fields.EXPERIMENT_STATUS,_Fields.ERRORS,_Fields.PROCESSES,_Fields.WORKFLOW,_Fields.EXECUTION_TYPE,_Fields.SWEEP_RANGE};
   public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -275,8 +274,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
         new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workflow.AiravataWorkflow.class)));
     tmpMap.put(_Fields.EXECUTION_TYPE, new org.apache.thrift.meta_data.FieldMetaData("executionType", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-    tmpMap.put(_Fields.SWEEP_COUNT, new org.apache.thrift.meta_data.FieldMetaData("sweepCount", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
-        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.SWEEP_RANGE, new org.apache.thrift.meta_data.FieldMetaData("sweepRange", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ExperimentModel.class, metaDataMap);
   }
@@ -390,7 +389,9 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
     if (other.isSetExecutionType()) {
       this.executionType = other.executionType;
     }
-    this.sweepCount = other.sweepCount;
+    if (other.isSetSweepRange()) {
+      this.sweepRange = other.sweepRange;
+    }
   }
 
   public ExperimentModel deepCopy() {
@@ -424,8 +425,7 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
     this.processes = null;
     this.workflow = null;
     this.executionType = null;
-    setSweepCountIsSet(false);
-    this.sweepCount = 0;
+    this.sweepRange = null;
   }
 
   public java.lang.String getExperimentId() {
@@ -1007,26 +1007,27 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
     }
   }
 
-  public int getSweepCount() {
-    return this.sweepCount;
+  public java.lang.String getSweepRange() {
+    return this.sweepRange;
   }
 
-  public void setSweepCount(int sweepCount) {
-    this.sweepCount = sweepCount;
-    setSweepCountIsSet(true);
+  public void setSweepRange(java.lang.String sweepRange) {
+    this.sweepRange = sweepRange;
   }
 
-  public void unsetSweepCount() {
-    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SWEEPCOUNT_ISSET_ID);
+  public void unsetSweepRange() {
+    this.sweepRange = null;
   }
 
-  /** Returns true if field sweepCount is set (has been assigned a value) and false otherwise */
-  public boolean isSetSweepCount() {
-    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SWEEPCOUNT_ISSET_ID);
+  /** Returns true if field sweepRange is set (has been assigned a value) and false otherwise */
+  public boolean isSetSweepRange() {
+    return this.sweepRange != null;
   }
 
-  public void setSweepCountIsSet(boolean value) {
-    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SWEEPCOUNT_ISSET_ID, value);
+  public void setSweepRangeIsSet(boolean value) {
+    if (!value) {
+      this.sweepRange = null;
+    }
   }
 
   public void setFieldValue(_Fields field, java.lang.Object value) {
@@ -1199,11 +1200,11 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
       }
       break;
 
-    case SWEEP_COUNT:
+    case SWEEP_RANGE:
       if (value == null) {
-        unsetSweepCount();
+        unsetSweepRange();
       } else {
-        setSweepCount((java.lang.Integer)value);
+        setSweepRange((java.lang.String)value);
       }
       break;
 
@@ -1275,8 +1276,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
     case EXECUTION_TYPE:
       return getExecutionType();
 
-    case SWEEP_COUNT:
-      return getSweepCount();
+    case SWEEP_RANGE:
+      return getSweepRange();
 
     }
     throw new java.lang.IllegalStateException();
@@ -1331,8 +1332,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
       return isSetWorkflow();
     case EXECUTION_TYPE:
       return isSetExecutionType();
-    case SWEEP_COUNT:
-      return isSetSweepCount();
+    case SWEEP_RANGE:
+      return isSetSweepRange();
     }
     throw new java.lang.IllegalStateException();
   }
@@ -1541,12 +1542,12 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
         return false;
     }
 
-    boolean this_present_sweepCount = true && this.isSetSweepCount();
-    boolean that_present_sweepCount = true && that.isSetSweepCount();
-    if (this_present_sweepCount || that_present_sweepCount) {
-      if (!(this_present_sweepCount && that_present_sweepCount))
+    boolean this_present_sweepRange = true && this.isSetSweepRange();
+    boolean that_present_sweepRange = true && that.isSetSweepRange();
+    if (this_present_sweepRange || that_present_sweepRange) {
+      if (!(this_present_sweepRange && that_present_sweepRange))
         return false;
-      if (this.sweepCount != that.sweepCount)
+      if (!this.sweepRange.equals(that.sweepRange))
         return false;
     }
 
@@ -1641,9 +1642,9 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
     if (isSetExecutionType())
       hashCode = hashCode * 8191 + executionType.hashCode();
 
-    hashCode = hashCode * 8191 + ((isSetSweepCount()) ? 131071 : 524287);
-    if (isSetSweepCount())
-      hashCode = hashCode * 8191 + sweepCount;
+    hashCode = hashCode * 8191 + ((isSetSweepRange()) ? 131071 : 524287);
+    if (isSetSweepRange())
+      hashCode = hashCode * 8191 + sweepRange.hashCode();
 
     return hashCode;
   }
@@ -1866,12 +1867,12 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
         return lastComparison;
       }
     }
-    lastComparison = java.lang.Boolean.valueOf(isSetSweepCount()).compareTo(other.isSetSweepCount());
+    lastComparison = java.lang.Boolean.valueOf(isSetSweepRange()).compareTo(other.isSetSweepRange());
     if (lastComparison != 0) {
       return lastComparison;
     }
-    if (isSetSweepCount()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sweepCount, other.sweepCount);
+    if (isSetSweepRange()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sweepRange, other.sweepRange);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -2085,10 +2086,14 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
       }
       first = false;
     }
-    if (isSetSweepCount()) {
+    if (isSetSweepRange()) {
       if (!first) sb.append(", ");
-      sb.append("sweepCount:");
-      sb.append(this.sweepCount);
+      sb.append("sweepRange:");
+      if (this.sweepRange == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.sweepRange);
+      }
       first = false;
     }
     sb.append(")");
@@ -2401,10 +2406,10 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 22: // SWEEP_COUNT
-            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-              struct.sweepCount = iprot.readI32();
-              struct.setSweepCountIsSet(true);
+          case 22: // SWEEP_RANGE
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.sweepRange = iprot.readString();
+              struct.setSweepRangeIsSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
@@ -2595,10 +2600,12 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
           oprot.writeFieldEnd();
         }
       }
-      if (struct.isSetSweepCount()) {
-        oprot.writeFieldBegin(SWEEP_COUNT_FIELD_DESC);
-        oprot.writeI32(struct.sweepCount);
-        oprot.writeFieldEnd();
+      if (struct.sweepRange != null) {
+        if (struct.isSetSweepRange()) {
+          oprot.writeFieldBegin(SWEEP_RANGE_FIELD_DESC);
+          oprot.writeString(struct.sweepRange);
+          oprot.writeFieldEnd();
+        }
       }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
@@ -2669,7 +2676,7 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
       if (struct.isSetExecutionType()) {
         optionals.set(14);
       }
-      if (struct.isSetSweepCount()) {
+      if (struct.isSetSweepRange()) {
         optionals.set(15);
       }
       oprot.writeBitSet(optionals, 16);
@@ -2754,8 +2761,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
       if (struct.isSetExecutionType()) {
         oprot.writeString(struct.executionType);
       }
-      if (struct.isSetSweepCount()) {
-        oprot.writeI32(struct.sweepCount);
+      if (struct.isSetSweepRange()) {
+        oprot.writeString(struct.sweepRange);
       }
     }
 
@@ -2897,8 +2904,8 @@ public class ExperimentModel implements org.apache.thrift.TBase<ExperimentModel,
         struct.setExecutionTypeIsSet(true);
       }
       if (incoming.get(15)) {
-        struct.sweepCount = iprot.readI32();
-        struct.setSweepCountIsSet(true);
+        struct.sweepRange = iprot.readString();
+        struct.setSweepRangeIsSet(true);
       }
     }
   }
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/SpecUtils.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/SpecUtils.java
new file mode 100644
index 0000000..b2d222a
--- /dev/null
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/SpecUtils.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+ package org.apache.airavata.helix.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class SpecUtils {
+
+    /**
+     * Range can be defined in the format of 0-20 or 0-20,25-50 or 0,1,2,3 or 0,1,2,4-8
+     */
+    public static List<Integer> decodeRange(String rangeStr) {
+        List<Integer> rangeVals = new ArrayList<>();
+        String[] rangeParts = rangeStr.split(",");
+        for (String rangePart : rangeParts) {
+            String[] subParts = rangePart.split("-");
+            if (subParts.length == 1) {
+                rangeVals.add(Integer.parseInt(subParts[0]));
+            }
+            if (subParts.length == 2) {
+                int minMargin = Integer.parseInt(subParts[0]);
+                int maxMargin = Integer.parseInt(subParts[1]);
+                for (int i = minMargin; i <= maxMargin; i++) {
+                    rangeVals.add(i);
+                }
+            }
+        }
+        return rangeVals;
+    }
+}
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
index 365779f..2eead98 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/TaskContext.java
@@ -21,6 +21,7 @@ package org.apache.airavata.helix.impl.task;
 
 import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.common.utils.ThriftUtils;
+import org.apache.airavata.helix.impl.SpecUtils;
 import org.apache.airavata.messaging.core.Publisher;
 import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription;
 import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription;
@@ -750,8 +751,8 @@ public class TaskContext {
         return this.experimentModel.getExecutionType();
     }
 
-    public int getSweepCount() {
-        return this.experimentModel.getSweepCount();
+    public List<Integer> getSweepRange() {
+        return SpecUtils.decodeRange(this.experimentModel.getSweepRange());
     }
 
     public static class TaskContextBuilder {
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/env/EnvSetupTask.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/env/EnvSetupTask.java
index c890781..6173aa8 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/env/EnvSetupTask.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/env/EnvSetupTask.java
@@ -20,6 +20,7 @@
 package org.apache.airavata.helix.impl.task.env;
 
 import org.apache.airavata.agents.api.AgentAdaptor;
+import org.apache.airavata.helix.impl.SpecUtils;
 import org.apache.airavata.helix.impl.task.AiravataTask;
 import org.apache.airavata.helix.impl.task.TaskContext;
 import org.apache.airavata.helix.task.api.TaskHelper;
@@ -30,6 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.nio.file.Paths;
+import java.util.List;
 
 @TaskDef(name = "Environment Setup Task")
 public class EnvSetupTask extends AiravataTask {
@@ -56,7 +58,10 @@ public class EnvSetupTask extends AiravataTask {
             }
 
             if ("param_sweep".equals(taskContext.getExecutionType())) {
-                for (int i = 0; i < taskContext.getSweepCount(); i++) {
+
+                List<Integer> rangeInts = taskContext.getSweepRange();
+
+                for (int i : rangeInts) {
                     String sweepDir = Paths.get(getTaskContext().getWorkingDir(), i + "").toString();
                     logger.info("Creating sweep directory {}", sweepDir);
                     adaptor.createDirectory(sweepDir, true);
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/SweepingInputDataStagingTask.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/SweepingInputDataStagingTask.java
index 1a3fd97..6f97540 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/SweepingInputDataStagingTask.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/staging/SweepingInputDataStagingTask.java
@@ -21,6 +21,7 @@
 
 import org.apache.airavata.agents.api.AgentAdaptor;
 import org.apache.airavata.agents.api.StorageResourceAdaptor;
+import org.apache.airavata.helix.impl.SpecUtils;
 import org.apache.airavata.helix.impl.task.TaskContext;
 import org.apache.airavata.helix.impl.task.TaskOnFailException;
 import org.apache.airavata.helix.task.api.TaskHelper;
@@ -100,6 +101,8 @@ public class SweepingInputDataStagingTask extends DataStagingTask {
                     *                         /<sweepCount -1>/input.txt
                      */
 
+                    List<Integer> rangeInts = taskContext.getSweepRange();
+
                     if (sourceFileName.endsWith(".zip")) {
                         String tempZipDir = Paths.get(workingDir, UUID.randomUUID().toString()).toString();
                         logger.info("Copying sweep input zip {} to temp directory {}", sourceFileName, tempZipDir);
@@ -110,7 +113,7 @@ public class SweepingInputDataStagingTask extends DataStagingTask {
                         adaptor.executeCommand("unzip " + sourceFileName, tempZipDir);
                         String tempDataPath = Paths.get(tempZipDir, sourceFileName.substring(0, sourceFileName.length() - ".zip".length())).toString();
 
-                        for (int i = 0; i < taskContext.getSweepCount(); i++) {
+                        for (int i : rangeInts) {
                             String sweepSourceDir = Paths.get(tempDataPath, i +"").toString();
                             List<String> sweepFiles = adaptor.listDirectory(sweepSourceDir);
                             for (String sweepFile: sweepFiles) {
@@ -127,7 +130,7 @@ public class SweepingInputDataStagingTask extends DataStagingTask {
 
                     } else {
                         // TODO: Optimize here to copy locally
-                        for (int i = 0; i < taskContext.getSweepCount(); i++) {
+                        for (int i : rangeInts) {
                             String overrideFileName = dataStagingTaskModel.getProcessInput().getOverrideFilename();
                             String destFileName = (overrideFileName != null && !"".equals(overrideFileName)) ? overrideFileName : sourceFileName;
                             String destPath = Paths.get(workingDir, i + "", destFileName).toString();
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/DefaultJobSubmissionTask.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/DefaultJobSubmissionTask.java
index 0a9c36a..c9c2641 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/DefaultJobSubmissionTask.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/DefaultJobSubmissionTask.java
@@ -23,6 +23,7 @@ import org.apache.airavata.agents.api.AgentAdaptor;
 import org.apache.airavata.agents.api.JobSubmissionOutput;
 import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.helix.impl.SpecUtils;
 import org.apache.airavata.helix.impl.task.TaskContext;
 import org.apache.airavata.helix.impl.task.submission.config.GroovyMapBuilder;
 import org.apache.airavata.helix.impl.task.submission.config.GroovyMapData;
@@ -99,6 +100,8 @@ public class DefaultJobSubmissionTask extends JobSubmissionTask {
 
             jobId = submissionOutput.getJobId();
 
+            List<Integer> rangeInts = taskContext.getSweepRange();
+
             if (submissionOutput.getExitCode() != 0 || submissionOutput.isJobSubmissionFailed()) {
 
                 jobModel.setJobId(DEFAULT_JOB_ID);
@@ -149,7 +152,7 @@ public class DefaultJobSubmissionTask extends JobSubmissionTask {
                 jobStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
                 jobModel.setJobStatuses(Collections.singletonList(jobStatus));
                 saveAndPublishJobStatus(jobModel);
-                saveChildJobModels(jobModel, taskContext.getSweepCount());
+                saveChildJobModels(jobModel, rangeInts);
 
                 if (verifyJobSubmissionByJobId(adaptor, jobId)) {
                     jobStatus.setJobState(JobState.QUEUED);
@@ -175,7 +178,7 @@ public class DefaultJobSubmissionTask extends JobSubmissionTask {
                         jobStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
                         jobModel.setJobStatuses(Collections.singletonList(jobStatus));
                         saveAndPublishJobStatus(jobModel);
-                        saveChildJobModels(jobModel, taskContext.getSweepCount());
+                        saveChildJobModels(jobModel, rangeInts);
                         logger.info("Job id " + verifyJobId + " verification succeeded");
                         break;
                     }
@@ -279,14 +282,14 @@ public class DefaultJobSubmissionTask extends JobSubmissionTask {
     }
 
     // This is for parameter sweeping jobs
-    private void saveChildJobModels(JobModel jobModel, int childCount) throws TException {
-        if (childCount <= 1) {
+    private void saveChildJobModels(JobModel jobModel, List<Integer> childRanges) throws TException {
+        if (childRanges.size() <= 1) {
             return;
         }
 
         RegistryService.Client registryServiceClient = getRegistryServiceClient();
 
-        for (int childIndex = 0; childIndex < childCount; childIndex++) {
+        for (int childIndex : childRanges) {
             ChildJobModel childJobModel = new ChildJobModel();
             childJobModel.setChildJobId(jobModel.getTaskId() + "_" + jobModel.getJobId() + "_" + childIndex);
             childJobModel.setJobIndex(childIndex);
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/JobSubmissionTask.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/JobSubmissionTask.java
index 0ca11f5..bb2784d 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/JobSubmissionTask.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/JobSubmissionTask.java
@@ -264,7 +264,7 @@ public abstract class JobSubmissionTask extends AiravataTask {
             if (mapData.getPostJobCommands() == null) {
                 mapData.setPostJobCommands(new ArrayList<>());
             }
-            String jobIndex = mapData.getSweepCount() > 1 ? ",\"jobIndex\":\"'\"${SLURM_ARRAY_TASK_ID}\"'\"" : ""; // TODO generalize this
+            String jobIndex = mapData.getSweepRange().size() > 1 ? ",\"jobIndex\":\"'\"${SLURM_ARRAY_TASK_ID}\"'\"" : ""; // TODO generalize this
 
             mapData.getPostJobCommands().add("curl -X POST -H \"Content-Type: application/vnd.kafka.json.v2+json\" " +
                     "-H \"Accept: application/vnd.kafka.v2+json\" " +
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapBuilder.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapBuilder.java
index 9cc1e1d..683f2e2 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapBuilder.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapBuilder.java
@@ -79,7 +79,7 @@ public class GroovyMapBuilder {
         mapData.setWorkingDirectory(taskContext.getWorkingDir());
         mapData.setTaskId(taskContext.getTaskId());
         mapData.setExperimentDataDir(taskContext.getProcessModel().getExperimentDataDir());
-        mapData.setSweepCount(taskContext.getSweepCount());
+        mapData.setSweepRange(taskContext.getSweepRange());
 
         //List<String> emails = taskContext.getUserProfile().getEmails();
         //if (emails != null && emails.size() > 0) {
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapData.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapData.java
index 2f94c34..7ca4310 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapData.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/submission/config/GroovyMapData.java
@@ -141,8 +141,8 @@ public class GroovyMapData {
     @ScriptTag(name = "experimentDataDir")
     private String experimentDataDir;
 
-    @ScriptTag(name = "sweepCount")
-    private int sweepCount;
+    @ScriptTag(name = "sweepRange")
+    private List<Integer> sweepRange;
 
     public Map<String, Object> getMap() {
 
@@ -476,12 +476,12 @@ public class GroovyMapData {
         this.experimentDataDir = experimentDataDir;
     }
 
-    public int getSweepCount() {
-        return sweepCount;
+    public List<Integer> getSweepRange() {
+        return sweepRange;
     }
 
-    public void setSweepCount(int sweepCount) {
-        this.sweepCount = sweepCount;
+    public void setSweepRange(List<Integer> sweepRange) {
+        this.sweepRange = sweepRange;
     }
 
     public Map toImmutableMap() {
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java
index 5146372..2a7cb10 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java
@@ -24,6 +24,7 @@ import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.common.utils.ServerSettings;
 import org.apache.airavata.common.utils.ThriftUtils;
 import org.apache.airavata.helix.core.OutPort;
+import org.apache.airavata.helix.impl.SpecUtils;
 import org.apache.airavata.helix.impl.task.*;
 import org.apache.airavata.helix.impl.task.completing.CompletingTask;
 import org.apache.airavata.helix.impl.task.parsing.ParsingTriggeringTask;
@@ -175,7 +176,7 @@ public class PostWorkflowManager extends WorkflowManager {
 
                         logger.info("Job " + jobStatusResult.getJobId() + " was completed");
 
-                        if (experimentModel.getSweepCount() == 1) {
+                        if ("one_pass".equals(experimentModel.getExecutionType())) {
                             executePostWorkflow(processId, gateway, false, 0, false, false);
                         } else {
 
@@ -188,7 +189,8 @@ public class PostWorkflowManager extends WorkflowManager {
                                 List<ChildJobModel> childJobsOfJob = registryClient.getChildJobsOfJob(jobStatusResult.getJobId(), task);
                                 Map<Integer, ChildJobModel> childMap = new HashMap<>();
                                 childJobsOfJob.forEach(child -> childMap.put(child.getJobIndex(), child));
-                                for (int i = 0; i < experimentModel.getSweepCount(); i++) {
+                                List<Integer> rangeInts = SpecUtils.decodeRange(experimentModel.getSweepRange());
+                                for (int i : rangeInts) {
                                     ChildJobModel child = childMap.get(i);
                                     if (child != null &&
                                             child.getJobStatuses().stream()
diff --git a/modules/configuration/server/src/main/resources/SLURM_Arr_Groovy.template b/modules/configuration/server/src/main/resources/SLURM_Arr_Groovy.template
index 1d33989..8e8712d 100644
--- a/modules/configuration/server/src/main/resources/SLURM_Arr_Groovy.template
+++ b/modules/configuration/server/src/main/resources/SLURM_Arr_Groovy.template
@@ -3,7 +3,7 @@
 # SLURM job submission script generated by Apache Airavata
 <%
 if (queueName != null && queueName != "") out.print '#SBATCH -p ' + queueName + '\n'
-   if (sweepCount != null && sweepCount != "") out.print '#SBATCH --array=0-' + (sweepCount - 1) + '\n'
+   if (sweepRange != null) out.print '#SBATCH --array=' + sweepRange.join(',') + '\n'
    if (nodes != null && nodes != "") out.print '#SBATCH -N ' + nodes + '\n'
    if (cpuCount != null && cpuCount != "") out.print '#SBATCH -n ' + cpuCount + '\n'
    if (usedMem != null && usedMem != "") out.print '#SBATCH --mem=' + usedMem + 'M\n'
diff --git a/modules/ide-integration/src/main/resources/META-INF/persistence.xml b/modules/ide-integration/src/main/resources/META-INF/persistence.xml
index 6ddf250..4384275 100644
--- a/modules/ide-integration/src/main/resources/META-INF/persistence.xml
+++ b/modules/ide-integration/src/main/resources/META-INF/persistence.xml
@@ -136,6 +136,8 @@
         <class>org.apache.airavata.registry.core.entities.expcatalog.TaskStatusEntity</class>
         <class>org.apache.airavata.registry.core.entities.expcatalog.UserConfigurationDataEntity</class>
         <class>org.apache.airavata.registry.core.entities.expcatalog.UserEntity</class>
+        <class>org.apache.airavata.registry.core.entities.expcatalog.ExperimentOutputValueEntity</class>
+        <class>org.apache.airavata.registry.core.entities.expcatalog.ExperimentParsingTemplateEntity</class>
         <exclude-unlisted-classes>true</exclude-unlisted-classes>
         <properties>
             <property name="openjpa.DynamicEnhancementAgent" value="false"/>
diff --git a/modules/ide-integration/src/main/resources/database_scripts/expcatalog-mysql.sql b/modules/ide-integration/src/main/resources/database_scripts/expcatalog-mysql.sql
index 112ae62..bd79a1a 100644
--- a/modules/ide-integration/src/main/resources/database_scripts/expcatalog-mysql.sql
+++ b/modules/ide-integration/src/main/resources/database_scripts/expcatalog-mysql.sql
@@ -109,7 +109,7 @@ CREATE TABLE EXPERIMENT (
         GATEWAY_INSTANCE_ID varchar(255),
         ENABLE_EMAIL_NOTIFICATION tinyint(1),
         EMAIL_ADDRESSES text,
-        SWEEP_COUNT int DEFAULT 1,
+        SWEEP_RANGE varchar(255) DEFAULT '',
         EXECUTION_TYPE varchar(255) DEFAULT 'one_pass',
         PRIMARY KEY (EXPERIMENT_ID),
         FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID) ON DELETE CASCADE
@@ -423,6 +423,12 @@ CREATE TABLE CHILD_JOB_STATUS (
         FOREIGN KEY (CHILD_JOB_ID) REFERENCES CHILD_JOB(CHILD_JOB_ID) ON DELETE CASCADE
 )ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
+CREATE TABLE EXPERIMENT_PARSING_TEMPLATE(
+        EXPERIMENT_ID varchar(2048) NOT NULL,
+        PARSING_TEMPLATE_ID varchar(1024) NOT NULL,
+        PRIMARY KEY (EXPERIMENT_ID, PARSING_TEMPLATE_ID)
+)ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
 CREATE TABLE CONFIGURATION
 (
         CONFIG_KEY VARCHAR(255),
diff --git a/modules/ide-integration/src/main/resources/database_scripts/init/05-parameter-sweep-migration.sql b/modules/ide-integration/src/main/resources/database_scripts/init/05-parameter-sweep-migration.sql
index 2fc8278..3c1e890 100644
--- a/modules/ide-integration/src/main/resources/database_scripts/init/05-parameter-sweep-migration.sql
+++ b/modules/ide-integration/src/main/resources/database_scripts/init/05-parameter-sweep-migration.sql
@@ -1,6 +1,6 @@
 use experiment_catalog;
 
-ALTER TABLE EXPERIMENT ADD COLUMN SWEEP_COUNT INT DEFAULT 1;
+ALTER TABLE EXPERIMENT ADD COLUMN SWEEP_RANGE VARCHAR(255) DEFAULT '';
 ALTER TABLE EXPERIMENT ADD COLUMN EXECUTION_TYPE VARCHAR(50) DEFAULT 'one_pass';
 
 CREATE TABLE EXPERIMENT_OUTPUT_VALUE
@@ -29,4 +29,10 @@ CREATE TABLE CHILD_JOB_STATUS (
         REASON LONGTEXT,
         PRIMARY KEY (STATUS_ID, CHILD_JOB_ID),
         FOREIGN KEY (CHILD_JOB_ID) REFERENCES CHILD_JOB(CHILD_JOB_ID) ON DELETE CASCADE
+)ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE EXPERIMENT_PARSING_TEMPLATE(
+        EXPERIMENT_ID varchar(2048) NOT NULL,
+        PARSING_TEMPLATE_ID varchar(1024) NOT NULL,
+        PRIMARY KEY (EXPERIMENT_ID, PARSING_TEMPLATE_ID)
 )ENGINE=InnoDB DEFAULT CHARSET=latin1;
\ No newline at end of file
diff --git a/modules/ide-integration/src/main/resources/email-config.yaml b/modules/ide-integration/src/main/resources/email-config.yaml
index e6c6a85..42e6fc2 100644
--- a/modules/ide-integration/src/main/resources/email-config.yaml
+++ b/modules/ide-integration/src/main/resources/email-config.yaml
@@ -37,6 +37,7 @@ config:
        - slurm@js-169-158.jetstream-cloud.org
        - slurm@joker.nmsu.edu
        - root@ls5.tacc.utexas.edu
+       - SLURM resource manager <sl...@afrank-gamess-vc.novalocal>
 
    - jobManagerType: UGE
      emailParser: org.apache.airavata.monitor.email.parser.UGEEmailParser
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java
index 291c61d..6b97d59 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java
@@ -76,8 +76,8 @@ public class ExperimentEntity implements Serializable {
     @Column(name = "EXECUTION_TYPE")
     public String executionType;
 
-    @Column(name = "SWEEP_COUNT")
-    public int sweepCount;
+    @Column(name = "SWEEP_RANGE")
+    public String sweepRange;
 
     @Lob
     @Column(name = "EMAIL_ADDRESSES")
@@ -271,11 +271,11 @@ public class ExperimentEntity implements Serializable {
         this.executionType = executionType;
     }
 
-    public int getSweepCount() {
-        return sweepCount;
+    public String getSweepRange() {
+        return sweepRange;
     }
 
-    public void setSweepCount(int sweepCount) {
-        this.sweepCount = sweepCount;
+    public void setSweepRange(String sweepRange) {
+        this.sweepRange = sweepRange;
     }
 }
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentParsingTemplateEntity.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentParsingTemplateEntity.java
new file mode 100644
index 0000000..97147d5
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentParsingTemplateEntity.java
@@ -0,0 +1,55 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+ package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "EXPERIMENT_PARSING_TEMPLATE")
+@IdClass(ExperimentParsingTemplatePK.class)
+public class ExperimentParsingTemplateEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    private String experimentId;
+
+    @Id
+    @Column(name = "PARSING_TEMPLATE_ID")
+    private String parsingTemplateId;
+
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    public String getParsingTemplateId() {
+        return parsingTemplateId;
+    }
+
+    public void setParsingTemplateId(String parsingTemplateId) {
+        this.parsingTemplateId = parsingTemplateId;
+    }
+}
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentParsingTemplatePK.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentParsingTemplatePK.java
new file mode 100644
index 0000000..6c66241
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentParsingTemplatePK.java
@@ -0,0 +1,68 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+ package org.apache.airavata.registry.core.entities.expcatalog;
+
+import java.io.Serializable;
+
+public class ExperimentParsingTemplatePK implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String experimentId;
+    private String parsingTemplateId;
+
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    public String getParsingTemplateId() {
+        return parsingTemplateId;
+    }
+
+    public void setParsingTemplateId(String parsingTemplateId) {
+        this.parsingTemplateId = parsingTemplateId;
+    }
+
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+        if (!(other instanceof ExperimentOutputPK)) {
+            return false;
+        }
+        ExperimentParsingTemplatePK castOther = (ExperimentParsingTemplatePK) other;
+        return
+                this.experimentId.equals(castOther.experimentId)
+                        && this.parsingTemplateId.equals(castOther.parsingTemplateId);
+    }
+
+    public int hashCode() {
+        final int prime = 31;
+        int hash = 17;
+        hash = hash * prime + this.experimentId.hashCode();
+        hash = hash * prime + this.parsingTemplateId.hashCode();
+        return hash;
+    }
+}
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentParsingTemplateRepository.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentParsingTemplateRepository.java
new file mode 100644
index 0000000..398670b
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentParsingTemplateRepository.java
@@ -0,0 +1,72 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+ package org.apache.airavata.registry.core.repositories.expcatalog;
+
+import org.apache.airavata.model.experiment.ExperimentParsingTemplate;
+import org.apache.airavata.registry.core.entities.expcatalog.ExperimentParsingTemplateEntity;
+import org.apache.airavata.registry.core.entities.expcatalog.ExperimentParsingTemplatePK;
+import org.apache.airavata.registry.core.utils.DBConstants;
+import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
+import org.apache.airavata.registry.core.utils.QueryConstants;
+import org.dozer.Mapper;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class ExperimentParsingTemplateRepository extends
+                ExpCatAbstractRepository<ExperimentParsingTemplate, ExperimentParsingTemplateEntity, ExperimentParsingTemplatePK> {
+
+    public ExperimentParsingTemplateRepository() {
+        super(ExperimentParsingTemplate.class, ExperimentParsingTemplateEntity.class);
+    }
+
+    public List<ExperimentParsingTemplate> getAllParsingTemplatesForExperiment(String experimentId) {
+        Map<String, Object> queryParameters = new HashMap<>();
+        queryParameters.put(DBConstants.ExperimentParsingTemplate.EXPERIMENT_ID, experimentId);
+        return select(QueryConstants.GET_ALL_PARSING_TEMPLATES_FOR_EXPERIMENT, -1, 0, queryParameters);
+    }
+
+    public void addParsingTemplatesForExperiment(List<String> templates, String experimentId) {
+        List<ExperimentParsingTemplate> oldEntries = getAllParsingTemplatesForExperiment(experimentId);
+        for (ExperimentParsingTemplate oldEntry: oldEntries) {
+            ExperimentParsingTemplatePK pk = new ExperimentParsingTemplatePK();
+            pk.setExperimentId(experimentId);
+            pk.setParsingTemplateId(oldEntry.getParsingTemplateId());
+            delete(pk);
+        }
+
+        List<ExperimentParsingTemplate> parsingTemplates = templates.stream().map(id -> {
+            ExperimentParsingTemplate ept = new ExperimentParsingTemplate();
+            ept.setExperimentId(experimentId);
+            ept.setParsingTemplateId(id);
+            return ept;
+        }).collect(Collectors.toList());
+
+        for (ExperimentParsingTemplate template: parsingTemplates) {
+
+            Mapper mapper = ObjectMapperSingleton.getInstance();
+            ExperimentParsingTemplateEntity ptEntity = mapper.map(template, ExperimentParsingTemplateEntity.class);
+            execute(entityManager -> entityManager.merge(ptEntity));
+        }
+    }
+}
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/DBConstants.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/DBConstants.java
index 33eecd0..37eba9d 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/DBConstants.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/DBConstants.java
@@ -189,4 +189,9 @@ public class DBConstants {
         public static final String EXPERIMENT_ID = "experimentId";
         public static final String NAME = "name";
     }
+
+    public static class ExperimentParsingTemplate {
+        public static final String EXPERIMENT_ID = "experimentId";
+        public static final String PARSING_TEMPLATE_ID = "parsingTemplateId";
+    }
 }
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/QueryConstants.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/QueryConstants.java
index 91c30ff..2ece50c 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/QueryConstants.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/utils/QueryConstants.java
@@ -184,4 +184,10 @@ public interface QueryConstants {
 
     String GET_CHILD_JOB_FOR_PARENT = "SELECT CJ FROM " + ChildJobEntity.class.getSimpleName() + " CJ " +
             "WHERE CJ.parentJobId LIKE :" + DBConstants.ChildJob.PARENT_JOB_ID + " and CJ.parentTaskId LIKE :" + DBConstants.ChildJob.PARENT_TASK_ID;
+
+    String DELETE_ALL_TEMPLATES_FOR_EXPERIMENT = "DELETE FROM " + ExperimentParsingTemplateEntity.class.getSimpleName() + " EPT " +
+            "WHERE EPT.experimentId LIKE : " + DBConstants.ExperimentParsingTemplate.EXPERIMENT_ID;
+
+    String GET_ALL_PARSING_TEMPLATES_FOR_EXPERIMENT = "SELECT EPT FROM " + ExperimentParsingTemplateEntity.class.getSimpleName() +
+            " EPT WHERE EPT.experimentId LIKE : " + DBConstants.ExperimentParsingTemplate.EXPERIMENT_ID;
 }
diff --git a/modules/registry/registry-core/src/main/resources/META-INF/persistence.xml b/modules/registry/registry-core/src/main/resources/META-INF/persistence.xml
index 1c2d1d7..ec964dd 100644
--- a/modules/registry/registry-core/src/main/resources/META-INF/persistence.xml
+++ b/modules/registry/registry-core/src/main/resources/META-INF/persistence.xml
@@ -136,6 +136,7 @@
         <class>org.apache.airavata.registry.core.entities.expcatalog.TaskStatusEntity</class>
         <class>org.apache.airavata.registry.core.entities.expcatalog.UserConfigurationDataEntity</class>
         <class>org.apache.airavata.registry.core.entities.expcatalog.UserEntity</class>
+        <class>org.apache.airavata.registry.core.entities.expcatalog.ExperimentParsingTemplateEntity</class>
         <exclude-unlisted-classes>true</exclude-unlisted-classes>
     </persistence-unit>
 </persistence>
diff --git a/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql b/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql
index 04f4160..a0fe5be 100644
--- a/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql
+++ b/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql
@@ -109,7 +109,7 @@ CREATE TABLE EXPERIMENT (
         GATEWAY_INSTANCE_ID varchar(255),
         ENABLE_EMAIL_NOTIFICATION tinyint(1),
         EMAIL_ADDRESSES text,
-        SWEEP_COUNT int DEFAULT 1,
+        SWEEP_RANGE varchar(255) DEFAULT '',
         EXECUTION_TYPE varchar(255) DEFAULT 'one_pass',
         PRIMARY KEY (EXPERIMENT_ID),
         FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID) ON DELETE CASCADE
@@ -429,6 +429,12 @@ CREATE TABLE CHILD_JOB_STATUS (
         FOREIGN KEY (CHILD_JOB_ID) REFERENCES CHILD_JOB(CHILD_JOB_ID) ON DELETE CASCADE
 )ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
+CREATE TABLE EXPERIMENT_PARSING_TEMPLATE(
+        EXPERIMENT_ID varchar(2048) NOT NULL,
+        PARSING_TEMPLATE_ID varchar(1024) NOT NULL,
+        PRIMARY KEY (EXPERIMENT_ID, PARSING_TEMPLATE_ID)
+)ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
 CREATE TABLE CONFIGURATION
 (
         CONFIG_KEY VARCHAR(255),
diff --git a/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java b/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
index 880301f..c69319e 100644
--- a/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
+++ b/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
@@ -140,6 +140,7 @@ public class RegistryServerHandler implements RegistryService.Iface {
     private ParserInputRepository parserInputRepository = new ParserInputRepository();
     private ParserOutputRepository parserOutputRepository = new ParserOutputRepository();
     private ParsingTemplateRepository parsingTemplateRepository = new ParsingTemplateRepository();
+    private ExperimentParsingTemplateRepository experimentParsingTemplateRepository = new ExperimentParsingTemplateRepository();
     private UserRepository userRepository = new UserRepository();
     private ComputeResourceRepository computeResourceRepository = new ComputeResourceRepository();
 
@@ -5044,14 +5045,30 @@ public class RegistryServerHandler implements RegistryService.Iface {
     }
 
     @Override
+    public List<ParsingTemplate> getParsingTemplatesForApplication(String appInterfaceId, String gatewayId) throws RegistryServiceException, TException {
+        try {
+            return parsingTemplateRepository.getParsingTemplatesForApplication(appInterfaceId);
+        } catch (Exception e) {
+            final String message = "Error while retrieving parsing templates for application interface id " + appInterfaceId;
+            logger.error(message, e);
+            RegistryServiceException rse = new RegistryServiceException();
+            rse.setMessage(message + " More info: " + e.getMessage());
+            throw rse;
+        }
+    }
+
+    @Override
     public List<ParsingTemplate> getParsingTemplatesForExperiment(String experimentId, String gatewayId) throws RegistryServiceException, TException {
 
         try {
-            List<ProcessModel> processes = getExperiment(experimentId).getProcesses();
-            if (processes.size() > 0) {
-                return parsingTemplateRepository.getParsingTemplatesForApplication(processes.get(processes.size() - 1).getApplicationInterfaceId());
+            List<ExperimentParsingTemplate> allParsingTemplatesForExperiment = experimentParsingTemplateRepository.getAllParsingTemplatesForExperiment(experimentId);
+            List<ParsingTemplate> templates = new ArrayList<>();
+            if (allParsingTemplatesForExperiment != null) {
+                for (ExperimentParsingTemplate pt : allParsingTemplatesForExperiment) {
+                    templates.add(getParsingTemplate(pt.getParsingTemplateId(), gatewayId));
+                }
             }
-            return Collections.emptyList();
+            return templates;
 
         } catch (Exception e) {
             final String message = "Error while retrieving parsing templates for experiment id " + experimentId;
@@ -5060,7 +5077,11 @@ public class RegistryServerHandler implements RegistryService.Iface {
             rse.setMessage(message + " More info: " + e.getMessage());
             throw rse;
         }
+    }
 
+    @Override
+    public void addParsingTemplatesForExperiment(List<String> templateIds, String experimentId) throws RegistryServiceException, TException {
+        experimentParsingTemplateRepository.addParsingTemplatesForExperiment(templateIds, experimentId);
     }
 
     @Override
diff --git a/modules/registry/registry-server/registry-api-stubs/src/main/java/org/apache/airavata/registry/api/RegistryService.java b/modules/registry/registry-server/registry-api-stubs/src/main/java/org/apache/airavata/registry/api/RegistryService.java
index 0c32b1e..0e3dc45 100644
--- a/modules/registry/registry-server/registry-api-stubs/src/main/java/org/apache/airavata/registry/api/RegistryService.java
+++ b/modules/registry/registry-server/registry-api-stubs/src/main/java/org/apache/airavata/registry/api/RegistryService.java
@@ -2631,8 +2631,12 @@ public class RegistryService {
 
     public org.apache.airavata.model.appcatalog.parser.ParsingTemplate getParsingTemplate(java.lang.String templateId, java.lang.String gatewayId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException;
 
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForApplication(java.lang.String appInterfaceId, java.lang.String gatewayId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException;
+
     public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForExperiment(java.lang.String experimentId, java.lang.String gatewayId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException;
 
+    public void addParsingTemplatesForExperiment(java.util.List<java.lang.String> templateIds, java.lang.String experimentId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException;
+
     public java.lang.String saveParsingTemplate(org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException;
 
     public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> listAllParsingTemplates(java.lang.String gatewayId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException;
@@ -3035,8 +3039,12 @@ public class RegistryService {
 
     public void getParsingTemplate(java.lang.String templateId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> resultHandler) throws org.apache.thrift.TException;
 
+    public void getParsingTemplatesForApplication(java.lang.String appInterfaceId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException;
+
     public void getParsingTemplatesForExperiment(java.lang.String experimentId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException;
 
+    public void addParsingTemplatesForExperiment(java.util.List<java.lang.String> templateIds, java.lang.String experimentId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException;
+
     public void saveParsingTemplate(org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException;
 
     public void listAllParsingTemplates(java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException;
@@ -8299,6 +8307,33 @@ public class RegistryService {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getParsingTemplate failed: unknown result");
     }
 
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForApplication(java.lang.String appInterfaceId, java.lang.String gatewayId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException
+    {
+      send_getParsingTemplatesForApplication(appInterfaceId, gatewayId);
+      return recv_getParsingTemplatesForApplication();
+    }
+
+    public void send_getParsingTemplatesForApplication(java.lang.String appInterfaceId, java.lang.String gatewayId) throws org.apache.thrift.TException
+    {
+      getParsingTemplatesForApplication_args args = new getParsingTemplatesForApplication_args();
+      args.setAppInterfaceId(appInterfaceId);
+      args.setGatewayId(gatewayId);
+      sendBase("getParsingTemplatesForApplication", args);
+    }
+
+    public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> recv_getParsingTemplatesForApplication() throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException
+    {
+      getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
+      receiveBase(result, "getParsingTemplatesForApplication");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.rse != null) {
+        throw result.rse;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getParsingTemplatesForApplication failed: unknown result");
+    }
+
     public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getParsingTemplatesForExperiment(java.lang.String experimentId, java.lang.String gatewayId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException
     {
       send_getParsingTemplatesForExperiment(experimentId, gatewayId);
@@ -8326,6 +8361,30 @@ public class RegistryService {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getParsingTemplatesForExperiment failed: unknown result");
     }
 
+    public void addParsingTemplatesForExperiment(java.util.List<java.lang.String> templateIds, java.lang.String experimentId) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException
+    {
+      send_addParsingTemplatesForExperiment(templateIds, experimentId);
+      recv_addParsingTemplatesForExperiment();
+    }
+
+    public void send_addParsingTemplatesForExperiment(java.util.List<java.lang.String> templateIds, java.lang.String experimentId) throws org.apache.thrift.TException
+    {
+      addParsingTemplatesForExperiment_args args = new addParsingTemplatesForExperiment_args();
+      args.setTemplateIds(templateIds);
+      args.setExperimentId(experimentId);
+      sendBase("addParsingTemplatesForExperiment", args);
+    }
+
+    public void recv_addParsingTemplatesForExperiment() throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException
+    {
+      addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
+      receiveBase(result, "addParsingTemplatesForExperiment");
+      if (result.rse != null) {
+        throw result.rse;
+      }
+      return;
+    }
+
     public java.lang.String saveParsingTemplate(org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate) throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException
     {
       send_saveParsingTemplate(parsingTemplate);
@@ -15151,6 +15210,41 @@ public class RegistryService {
       }
     }
 
+    public void getParsingTemplatesForApplication(java.lang.String appInterfaceId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      getParsingTemplatesForApplication_call method_call = new getParsingTemplatesForApplication_call(appInterfaceId, gatewayId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class getParsingTemplatesForApplication_call extends org.apache.thrift.async.TAsyncMethodCall<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
+      private java.lang.String appInterfaceId;
+      private java.lang.String gatewayId;
+      public getParsingTemplatesForApplication_call(java.lang.String appInterfaceId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> 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.appInterfaceId = appInterfaceId;
+        this.gatewayId = gatewayId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getParsingTemplatesForApplication", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        getParsingTemplatesForApplication_args args = new getParsingTemplatesForApplication_args();
+        args.setAppInterfaceId(appInterfaceId);
+        args.setGatewayId(gatewayId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> getResult() throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_getParsingTemplatesForApplication();
+      }
+    }
+
     public void getParsingTemplatesForExperiment(java.lang.String experimentId, java.lang.String gatewayId, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
       checkReady();
       getParsingTemplatesForExperiment_call method_call = new getParsingTemplatesForExperiment_call(experimentId, gatewayId, resultHandler, this, ___protocolFactory, ___transport);
@@ -15186,6 +15280,41 @@ public class RegistryService {
       }
     }
 
+    public void addParsingTemplatesForExperiment(java.util.List<java.lang.String> templateIds, java.lang.String experimentId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      addParsingTemplatesForExperiment_call method_call = new addParsingTemplatesForExperiment_call(templateIds, experimentId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class addParsingTemplatesForExperiment_call extends org.apache.thrift.async.TAsyncMethodCall<Void> {
+      private java.util.List<java.lang.String> templateIds;
+      private java.lang.String experimentId;
+      public addParsingTemplatesForExperiment_call(java.util.List<java.lang.String> templateIds, java.lang.String experimentId, org.apache.thrift.async.AsyncMethodCallback<Void> 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.templateIds = templateIds;
+        this.experimentId = experimentId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("addParsingTemplatesForExperiment", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        addParsingTemplatesForExperiment_args args = new addParsingTemplatesForExperiment_args();
+        args.setTemplateIds(templateIds);
+        args.setExperimentId(experimentId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public Void getResult() throws org.apache.airavata.registry.api.exception.RegistryServiceException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return null;
+      }
+    }
+
     public void saveParsingTemplate(org.apache.airavata.model.appcatalog.parser.ParsingTemplate parsingTemplate, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
       checkReady();
       saveParsingTemplate_call method_call = new saveParsingTemplate_call(parsingTemplate, resultHandler, this, ___protocolFactory, ___transport);
@@ -15494,7 +15623,9 @@ public class RegistryService {
       processMap.put("getParserInput", new getParserInput());
       processMap.put("getParserOutput", new getParserOutput());
       processMap.put("getParsingTemplate", new getParsingTemplate());
+      processMap.put("getParsingTemplatesForApplication", new getParsingTemplatesForApplication());
       processMap.put("getParsingTemplatesForExperiment", new getParsingTemplatesForExperiment());
+      processMap.put("addParsingTemplatesForExperiment", new addParsingTemplatesForExperiment());
       processMap.put("saveParsingTemplate", new saveParsingTemplate());
       processMap.put("listAllParsingTemplates", new listAllParsingTemplates());
       processMap.put("removeParsingTemplate", new removeParsingTemplate());
@@ -20295,6 +20426,30 @@ public class RegistryService {
       }
     }
 
+    public static class getParsingTemplatesForApplication<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getParsingTemplatesForApplication_args> {
+      public getParsingTemplatesForApplication() {
+        super("getParsingTemplatesForApplication");
+      }
+
+      public getParsingTemplatesForApplication_args getEmptyArgsInstance() {
+        return new getParsingTemplatesForApplication_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public getParsingTemplatesForApplication_result getResult(I iface, getParsingTemplatesForApplication_args args) throws org.apache.thrift.TException {
+        getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
+        try {
+          result.success = iface.getParsingTemplatesForApplication(args.appInterfaceId, args.gatewayId);
+        } catch (org.apache.airavata.registry.api.exception.RegistryServiceException rse) {
+          result.rse = rse;
+        }
+        return result;
+      }
+    }
+
     public static class getParsingTemplatesForExperiment<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getParsingTemplatesForExperiment_args> {
       public getParsingTemplatesForExperiment() {
         super("getParsingTemplatesForExperiment");
@@ -20319,6 +20474,30 @@ public class RegistryService {
       }
     }
 
+    public static class addParsingTemplatesForExperiment<I extends Iface> extends org.apache.thrift.ProcessFunction<I, addParsingTemplatesForExperiment_args> {
+      public addParsingTemplatesForExperiment() {
+        super("addParsingTemplatesForExperiment");
+      }
+
+      public addParsingTemplatesForExperiment_args getEmptyArgsInstance() {
+        return new addParsingTemplatesForExperiment_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public addParsingTemplatesForExperiment_result getResult(I iface, addParsingTemplatesForExperiment_args args) throws org.apache.thrift.TException {
+        addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
+        try {
+          iface.addParsingTemplatesForExperiment(args.templateIds, args.experimentId);
+        } catch (org.apache.airavata.registry.api.exception.RegistryServiceException rse) {
+          result.rse = rse;
+        }
+        return result;
+      }
+    }
+
     public static class saveParsingTemplate<I extends Iface> extends org.apache.thrift.ProcessFunction<I, saveParsingTemplate_args> {
       public saveParsingTemplate() {
         super("saveParsingTemplate");
@@ -20600,7 +20779,9 @@ public class RegistryService {
       processMap.put("getParserInput", new getParserInput());
       processMap.put("getParserOutput", new getParserOutput());
       processMap.put("getParsingTemplate", new getParsingTemplate());
+      processMap.put("getParsingTemplatesForApplication", new getParsingTemplatesForApplication());
       processMap.put("getParsingTemplatesForExperiment", new getParsingTemplatesForExperiment());
+      processMap.put("addParsingTemplatesForExperiment", new addParsingTemplatesForExperiment());
       processMap.put("saveParsingTemplate", new saveParsingTemplate());
       processMap.put("listAllParsingTemplates", new listAllParsingTemplates());
       processMap.put("removeParsingTemplate", new removeParsingTemplate());
@@ -33448,6 +33629,71 @@ public class RegistryService {
       }
     }
 
+    public static class getParsingTemplatesForApplication<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getParsingTemplatesForApplication_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
+      public getParsingTemplatesForApplication() {
+        super("getParsingTemplatesForApplication");
+      }
+
+      public getParsingTemplatesForApplication_args getEmptyArgsInstance() {
+        return new getParsingTemplatesForApplication_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate> o) {
+            getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
+            result.success = o;
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            getParsingTemplatesForApplication_result result = new getParsingTemplatesForApplication_result();
+            if (e instanceof org.apache.airavata.registry.api.exception.RegistryServiceException) {
+              result.rse = (org.apache.airavata.registry.api.exception.RegistryServiceException) e;
+              result.setRseIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, getParsingTemplatesForApplication_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> resultHandler) throws org.apache.thrift.TException {
+        iface.getParsingTemplatesForApplication(args.appInterfaceId, args.gatewayId,resultHandler);
+      }
+    }
+
     public static class getParsingTemplatesForExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getParsingTemplatesForExperiment_args, java.util.List<org.apache.airavata.model.appcatalog.parser.ParsingTemplate>> {
       public getParsingTemplatesForExperiment() {
         super("getParsingTemplatesForExperiment");
@@ -33513,6 +33759,70 @@ public class RegistryService {
       }
     }
 
+    public static class addParsingTemplatesForExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, addParsingTemplatesForExperiment_args, Void> {
+      public addParsingTemplatesForExperiment() {
+        super("addParsingTemplatesForExperiment");
+      }
+
+      public addParsingTemplatesForExperiment_args getEmptyArgsInstance() {
+        return new addParsingTemplatesForExperiment_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<Void> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+            addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            addParsingTemplatesForExperiment_result result = new addParsingTemplatesForExperiment_result();
+            if (e instanceof org.apache.airavata.registry.api.exception.RegistryServiceException) {
+              result.rse = (org.apache.airavata.registry.api.exception.RegistryServiceException) e;
+              result.setRseIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, addParsingTemplatesForExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
+        iface.addParsingTemplatesForExperiment(args.templateIds, args.experimentId,resultHandler);
+      }
+    }
+
     public static class saveParsingTemplate<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, saveParsingTemplate_args, java.lang.String> {
       public saveParsingTemplate() {
         super("saveParsingTemplate");
@@ -213621,21 +213931,21 @@ public class RegistryService {
     }
   }
 
-  public static class getParsingTemplatesForExperiment_args implements org.apache.thrift.TBase<getParsingTemplatesForExperiment_args, getParsingTemplatesForExperiment_args._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForExperiment_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForExperiment_args");
+  public static class getParsingTemplatesForApplication_args implements org.apache.thrift.TBase<getParsingTemplatesForApplication_args, getParsingTemplatesForApplication_args._Fields>, java.io.Serializable, Cloneable, Comparable<getParsingTemplatesForApplication_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getParsingTemplatesForApplication_args");
 
-    private static final org.apache.thrift.protocol.TField EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("experimentId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField APP_INTERFACE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("appInterfaceId", org.apache.thrift.protocol.TType.STRING, (short)1);
     private static final org.apache.thrift.protocol.TField GATEWAY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("gatewayId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForExperiment_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForExperiment_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getParsingTemplatesForApplication_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getParsingTemplatesForApplication_argsTupleSchemeFactory();
 
-    public java.lang.String experimentId; // required
+    public java.lang.String appInterfaceId; // required
     public java.lang.String gatewayId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      EXPERIMENT_ID((short)1, "experimentId"),
+      APP_INTERFACE_ID((short)1, "appInterfaceId"),
       GATEWAY_ID((short)2, "gatewayId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
@@ -213651,8 +213961,8 @@ public class RegistryService {
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // EXPERIMENT_ID
-            return EXPERIMENT_ID;
+          case 1: // APP_INTERFACE_ID
+            return APP_INTERFACE_ID;
           case 2: // GATEWAY_ID
             return GATEWAY_ID;
           default:
@@ -213698,69 +214008,69 @@ public class RegistryService {
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("experimentId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+      tmpMap.put(_Fields.APP_INTERFACE_ID, new org.apache.thrift.meta_data.FieldMetaData("appInterfaceId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GATEWAY_ID, new org.apache.thrift.meta_data.FieldMetaData("gatewayId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForExperiment_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getParsingTemplatesForApplication_args.class, metaDataMap);
     }
 
-    public getParsingTemplatesForExperiment_args() {
+    public getParsingTemplatesForApplication_args() {
     }
 
-    public getParsingTemplatesForExperiment_args(
-      java.lang.String experimentId,
+    public getParsingTemplatesForApplication_args(
+      java.lang.String appInterfaceId,
       java.lang.String gatewayId)
     {
       this();
-      this.experimentId = experimentId;
+      this.appInterfaceId = appInterfaceId;
       this.gatewayId = gatewayId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getParsingTemplatesForExperiment_args(getParsingTemplatesForExperiment_args other) {
-      if (other.isSetExperimentId()) {
-        this.experimentId = other.experimentId;
+    public getParsingTemplatesForApplication_args(getParsingTemplatesForApplication_args other) {
+      if (other.isSetAppInterfaceId()) {
+        this.appInterfaceId = other.appInterfaceId;
       }
       if (other.isSetGatewayId()) {
         this.gatewayId = other.gatewayId;
       }
     }
 
... 2748 lines suppressed ...