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/11 17:09:39 UTC

[airavata-django-portal] 01/01: Initial param sweep implementation

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-django-portal.git

commit 6b55437835069c58374771359bb5699be070579e
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Thu Jun 11 13:09:23 2020 -0400

    Initial param sweep implementation
---
 airavata/api/Airavata-remote                       |   14 +
 airavata/api/Airavata.py                           | 1108 +++++++++++++++-----
 airavata/model/application/io/ttypes.py            |   74 ++
 airavata/model/experiment/ttypes.py                |  102 +-
 airavata/model/job/ttypes.py                       |  125 +++
 airavata/model/status/ttypes.py                    |   98 ++
 .../apps/api/migrations/0005_parsingtemplates.py   |   23 +
 django_airavata/apps/api/models.py                 |    5 +
 django_airavata/apps/api/output_views.py           |    4 +-
 django_airavata/apps/api/serializers.py            |    5 +
 .../api/static/django_airavata_api/js/index.js     |    2 +-
 .../django_airavata_api/js/models/Experiment.js    |   12 +-
 .../django_airavata_api/js/service_config.js       |    2 +-
 django_airavata/apps/api/urls.py                   |    1 +
 django_airavata/apps/api/views.py                  |   16 +-
 .../js/components/experiment/ExperimentEditor.vue  |   56 +-
 .../js/components/experiment/ExperimentSummary.vue |    6 +-
 .../experiment/parsing-editors/ParserSelector.vue  |   31 +
 18 files changed, 1403 insertions(+), 281 deletions(-)

diff --git a/airavata/api/Airavata-remote b/airavata/api/Airavata-remote
index 2531223..5d4ef6e 100755
--- a/airavata/api/Airavata-remote
+++ b/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.py b/airavata/api/Airavata.py
index 94b5d17..4141c94 100644
--- a/airavata/api/Airavata.py
+++ b/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/model/application/io/ttypes.py b/airavata/model/application/io/ttypes.py
index 17f1760..189cb43 100644
--- a/airavata/model/application/io/ttypes.py
+++ b/airavata/model/application/io/ttypes.py
@@ -510,3 +510,77 @@ class OutputDataObjectType(object):
 
     def __ne__(self, other):
         return not (self == other)
+
+
+class OutputDataValueObjectType(object):
+    """
+    Attributes:
+     - name
+     - value
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'name', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'value', 'UTF8', None, ),  # 2
+    )
+
+    def __init__(self, name=None, value=None,):
+        self.name = name
+        self.value = value
+
+    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.name = 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.value = 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('OutputDataValueObjectType')
+        if self.name is not None:
+            oprot.writeFieldBegin('name', TType.STRING, 1)
+            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
+            oprot.writeFieldEnd()
+        if self.value is not None:
+            oprot.writeFieldBegin('value', TType.STRING, 2)
+            oprot.writeString(self.value.encode('utf-8') if sys.version_info[0] == 2 else self.value)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.name is None:
+            raise TProtocolException(message='Required field name 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/model/experiment/ttypes.py b/airavata/model/experiment/ttypes.py
index d5cb425..fd95710 100644
--- a/airavata/model/experiment/ttypes.py
+++ b/airavata/model/experiment/ttypes.py
@@ -312,6 +312,8 @@ class ExperimentModel(object):
      - errors
      - processes
      - workflow
+     - executionType
+     - sweepRange
     """
 
     thrift_spec = (
@@ -336,9 +338,11 @@ class ExperimentModel(object):
         (18, TType.LIST, 'errors', (TType.STRUCT, (airavata.model.commons.ttypes.ErrorModel, airavata.model.commons.ttypes.ErrorModel.thrift_spec), False), None, ),  # 18
         (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.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,):
+    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
@@ -359,6 +363,8 @@ class ExperimentModel(object):
         self.errors = errors
         self.processes = processes
         self.workflow = workflow
+        self.executionType = executionType
+        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:
@@ -506,6 +512,16 @@ class ExperimentModel(object):
                     self.workflow.read(iprot)
                 else:
                     iprot.skip(ftype)
+            elif fid == 21:
+                if ftype == TType.STRING:
+                    self.executionType = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 22:
+                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:
                 iprot.skip(ftype)
             iprot.readFieldEnd()
@@ -614,6 +630,14 @@ class ExperimentModel(object):
             oprot.writeFieldBegin('workflow', TType.STRUCT, 20)
             self.workflow.write(oprot)
             oprot.writeFieldEnd()
+        if self.executionType is not None:
+            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.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()
 
@@ -1091,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/model/job/ttypes.py b/airavata/model/job/ttypes.py
index 1e16680..bc44a67 100644
--- a/airavata/model/job/ttypes.py
+++ b/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/model/status/ttypes.py b/airavata/model/status/ttypes.py
index 7dda202..3a4978c 100644
--- a/airavata/model/status/ttypes.py
+++ b/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/django_airavata/apps/api/migrations/0005_parsingtemplates.py b/django_airavata/apps/api/migrations/0005_parsingtemplates.py
new file mode 100644
index 0000000..30fc283
--- /dev/null
+++ b/django_airavata/apps/api/migrations/0005_parsingtemplates.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.28 on 2020-06-02 13:40
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('django_airavata_api', '0004_auto_20191112_2134'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ParsingTemplates',
+            fields=[
+                ('id', models.CharField(max_length=2048, primary_key=True, serialize=False)),
+                ('application_interface', models.CharField(max_length=2048)),
+                ('gatewayId', models.CharField(max_length=2048)),
+            ],
+        ),
+    ]
diff --git a/django_airavata/apps/api/models.py b/django_airavata/apps/api/models.py
index 4d83b96..ecc2d4e 100644
--- a/django_airavata/apps/api/models.py
+++ b/django_airavata/apps/api/models.py
@@ -47,3 +47,8 @@ class User_Files(models.Model):
             # TEXT column which is required to create an index
             models.Index(fields=['username'], name='username_idx')
         ]
+
+class ParsingTemplates(models.Model):
+    id = models.CharField(max_length=2048, primary_key=True)
+    application_interface = models.CharField(max_length=2048)
+    gatewayId = models.CharField(max_length=2048)
\ No newline at end of file
diff --git a/django_airavata/apps/api/output_views.py b/django_airavata/apps/api/output_views.py
index 0614e56..dfa93b6 100644
--- a/django_airavata/apps/api/output_views.py
+++ b/django_airavata/apps/api/output_views.py
@@ -186,9 +186,7 @@ def _generate_data(request,
                                'test_output_file',
                                None)
     if (experiment_output.value and
-        experiment_output.type in (DataType.URI,
-                                   DataType.STDOUT,
-                                   DataType.STDERR) and
+        experiment_output.type == DataType.URI and
             experiment_output.value.startswith("airavata-dp")):
         data_product = request.airavata_client.getDataProduct(
             request.authz_token, experiment_output.value)
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index e1323a5..8881f59 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -32,6 +32,7 @@ from airavata.model.appcatalog.groupresourceprofile.ttypes import (
     GroupResourceProfile
 )
 from airavata.model.appcatalog.parser.ttypes import Parser
+from airavata.model.appcatalog.parser.ttypes import ParsingTemplate
 from airavata.model.appcatalog.storageresource.ttypes import (
     StorageResourceDescription
 )
@@ -845,6 +846,10 @@ class ParserSerializer(thrift_utils.create_serializer_class(Parser)):
         lookup_field='id',
         lookup_url_kwarg='parser_id')
 
+class ParsingTemplateSerializer(thrift_utils.create_serializer_class(ParsingTemplate)):
+    class Meta:
+        model = models.ParsingTemplates
+        exclude = ('initialInputs', 'parserConnections')
 
 class UserStorageFileSerializer(serializers.Serializer):
     name = serializers.CharField()
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/index.js b/django_airavata/apps/api/static/django_airavata_api/js/index.js
index a6be8d5..8bfa57a 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/index.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/index.js
@@ -108,7 +108,7 @@ const services = {
   CredentialSummaryService: ServiceFactory.service("CredentialSummaries"),
   DataProductService: ServiceFactory.service("DataProducts"),
   ExperimentSearchService: ServiceFactory.service("ExperimentSearch"),
-  ExperimentService: ServiceFactory.service("Experiments"),
+  ExperimentService: ServiceFactory.service("Experiments"),    // Here
   ExperimentStatisticsService: ServiceFactory.service("ExperimentStatistics"),
   FullExperimentService: ServiceFactory.service("FullExperiments"),
   GatewayResourceProfileService: ServiceFactory.service(
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js b/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
index 7f2d7ad..c1dbbdd 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
@@ -71,7 +71,17 @@ const FIELDS = [
     type: "boolean",
     default: true
   },
-  "relativeExperimentDataDir"
+  "relativeExperimentDataDir",
+  {
+    name: "executionType",
+    type: "string",
+    default: "one_pass"
+  }, 
+  {
+    name: "sweepRange",
+    type: "string",
+    default: ""
+  }
 ];
 
 export default class Experiment extends BaseModel {
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/service_config.js b/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
index b022f99..da9dc50 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/service_config.js
@@ -156,7 +156,7 @@ export default {
     },
     modelClass: CredentialSummary
   },
-  DataProducts: {
+  DataProducts: {   // Here
     url: "/api/data-products/",
     methods: {
       retrieve: {
diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index 70db566..e1d24ea 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -88,6 +88,7 @@ urlpatterns = [
     url(r'^experiment-statistics',
         views.ExperimentStatisticsView.as_view(),
         name="experiment-statistics"),
+    url(r'^app-parser', views.ApplicationParserViewset.as_view(), name="app-parser"),  # router.register(r'app-parser', views.ApplicationParserViewset, base_name='app-parser')
     url(r'ack-notifications/<slug:id>/', views.AckNotificationViewSet.as_view(), name="ack-notifications"),
     url(r'ack-notifications/', views.AckNotificationViewSet.as_view(), name="ack-notifications"),
     url(r'^log', views.LogRecordConsumer.as_view(), name='log'),
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 01cb1ab..cc536a4 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -459,14 +459,12 @@ class FullExperimentViewSet(mixins.RetrieveModelMixin,
             for output in experimentModel.experimentOutputs
             if (output.value and
                 output.value.startswith('airavata-dp') and
-                output.type in (DataType.URI,
-                                DataType.STDOUT,
-                                DataType.STDERR))]
+                output.type == DataType.URI)]
         outputDataProducts += [
             self.request.airavata_client.getDataProduct(self.authz_token, dp)
             for output in experimentModel.experimentOutputs
             if (output.value and
-                output.type == DataType.URI_COLLECTION)
+                (output.type == DataType.URI_COLLECTION or output.type == DataType.STDERR or output.type == DataType.STDOUT))
             for dp in output.value.split(',')
             if output.value.startswith('airavata-dp')]
         appInterfaceId = experimentModel.executionId
@@ -1491,7 +1489,17 @@ class ParserViewSet(mixins.CreateModelMixin,
     def perform_update(self, serializer):
         parser = serializer.save()
         self.request.airavata_client.saveParser(self.authz_token, parser)
+        
+class ApplicationParserViewset(APIView):
+    serializer_class = serializers.ParsingTemplateSerializer
 
+    def get(self, request, format=None):
+        
+        appId = request.query_params["appId"]
+        templates = request.airavata_client.getParsingTemplatesForApplication(request.authz_token, appId, settings.GATEWAY_ID)
+
+        serializer = self.serializer_class(templates, context={'request': request})
+        return Response(serializer.data)
 
 class UserStoragePathView(APIView):
     serializer_class = serializers.UserStoragePathSerializer
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentEditor.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentEditor.vue
index 8749d46..a296dab 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentEditor.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentEditor.vue
@@ -46,6 +46,44 @@
           <experiment-description-editor v-model="localExperiment.description" />
         </div>
       </div>
+
+      <div class="row">
+        <div class="col">
+          <b-form-group
+            label="Execution Type"
+            label-for="execution-type"
+          >
+            <b-row>
+              <b-col>
+                <b-form-select
+                  id="execution-type" 
+                  v-model="localExperiment.executionType"
+                  required
+                  :options="[{value: 'one_pass', text: 'One Pass'}, {value: 'param_sweep', text: 'Parameter Sweep'}]"
+                />
+              </b-col>
+              <b-col v-if="localExperiment.executionType == 'param_sweep'">
+                <b-row>
+                  <b-col>
+                    <label class="mr-sm-2" for="sweep-count">Number of Sweep Jobs</label>
+                  </b-col>
+                  <b-col>
+                    <b-form-input
+                      id="sweep-range"
+                      type="text"
+                      v-model="localExperiment.sweepRange"
+                      required
+                      placeholder="Range of Sweep Jobs"
+                    ></b-form-input>
+                  </b-col>
+                </b-row>
+              </b-col>
+
+            </b-row>
+          </b-form-group>
+        </div>
+      </div>
+
       <div class="row">
         <div class="col">
           <b-form-group
@@ -111,6 +149,20 @@
           </div>
         </div>
       </div>
+      <div class="row">
+        <div class="col">
+          <div class="card border-default">
+            <div class="card-body">
+              <h2 class="h6 mb-3">
+                Parsing Templates
+              </h2>
+
+                <parser-selector/>
+
+            </div>
+          </div>
+        </div>
+      </div>
       <group-resource-profile-selector
         v-model="localExperiment.userConfigurationData.groupResourceProfileId"
       >
@@ -158,6 +210,7 @@ import ComputationalResourceSchedulingEditor from "./ComputationalResourceSchedu
 import ExperimentDescriptionEditor from "./ExperimentDescriptionEditor.vue";
 import GroupResourceProfileSelector from "./GroupResourceProfileSelector.vue";
 import InputEditorContainer from "./input-editors/InputEditorContainer.vue";
+import ParserSelector from "./parsing-editors/ParserSelector.vue";
 import { models, services } from "django-airavata-api";
 import { components, utils } from "django-airavata-common-ui";
 
@@ -189,6 +242,7 @@ export default {
     ExperimentDescriptionEditor,
     GroupResourceProfileSelector,
     InputEditorContainer,
+    ParserSelector,
     "share-button": components.ShareButton,
     "unsaved-changes-guard": components.UnsavedChangesGuard
   },
@@ -271,7 +325,7 @@ export default {
           data: this.localExperiment
         }).then(experiment => {
           // Can't save sharing settings for a new experiment until it has been
-          // created
+          // created     // TODO call to save parsing templated
           this.saved = true;
           return this.$refs.shareButton
             .mergeAndSave(experiment.experimentId)
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
index 95265f3..5bf2cb3 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
@@ -58,7 +58,7 @@
 
       <div
         class="row"
-        v-if="experiment.isFinished && outputDataProducts[output.name].length > 0"
+        v-if="outputDataProducts[output.name].length > 0"
         :key="output.name"
       >
         <div class="col">
@@ -73,7 +73,7 @@
     </template>
     <div
       class="row"
-      v-if="experiment.isFinished && storageDirLink"
+      v-if="storageDirLink"
     >
       <div class="col">
         <b-card header="Other Files">
@@ -411,7 +411,7 @@ export default {
         return [];
       }
       let dataProducts = null;
-      if (io.type === models.DataType.URI_COLLECTION) {
+      if (io.type === models.DataType.URI_COLLECTION || io.type === models.DataType.STDOUT || io.type === models.DataType.STDERR) {
         const dataProductURIs = io.value.split(",");
         dataProducts = dataProductURIs.map(uri =>
           collection.find(dp => dp.productUri === uri)
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/parsing-editors/ParserSelector.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/parsing-editors/ParserSelector.vue
new file mode 100644
index 0000000..cfa1402
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/parsing-editors/ParserSelector.vue
@@ -0,0 +1,31 @@
+<template>
+  <div>
+    <b-form-group>
+      <b-form-checkbox-group
+        v-model="selected"
+        :options="options"
+        name="flavour-2a"
+        stacked
+      ></b-form-checkbox-group>
+    </b-form-group>
+
+  </div>
+</template>
+
+<script>
+
+export default {
+  name: "parser-selector",
+  data() {
+    return {
+      selected: [], // Must be an array reference!
+      options: [
+        { text: 'Gamess RNA Parser', value: 'orange' },
+        { text: 'Gamess Lig Parser', value: 'apple' },
+        { text: 'Gamess Cmplx Parser', value: 'pineapple' }
+      ]
+    }
+  }
+}
+
+</script>
\ No newline at end of file