You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2019/05/09 16:19:59 UTC

[airavata-django-portal] 04/06: AIRAVATA-3030 Loading directly granted sharings for editing

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

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 8e7ad61cf2881ade620bf46d0e0d260050f7cb3f
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu May 9 12:13:55 2019 -0400

    AIRAVATA-3030 Loading directly granted sharings for editing
---
 airavata/api/Airavata-remote                       |   14 +
 airavata/api/Airavata.py                           | 1122 +++++++++++++++-----
 airavata/api/sharing/SharingRegistryService-remote |   14 +
 airavata/api/sharing/SharingRegistryService.py     |  562 +++++++++-
 django_airavata/apps/api/views.py                  |   66 +-
 5 files changed, 1468 insertions(+), 310 deletions(-)

diff --git a/airavata/api/Airavata-remote b/airavata/api/Airavata-remote
index 9ff7ab4..6957696 100755
--- a/airavata/api/Airavata-remote
+++ b/airavata/api/Airavata-remote
@@ -189,6 +189,8 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
     print('  bool revokeSharingOfResourceFromGroups(AuthzToken authzToken, string resourceId,  groupPermissionList)')
     print('   getAllAccessibleUsers(AuthzToken authzToken, string resourceId, ResourcePermissionType permissionType)')
     print('   getAllAccessibleGroups(AuthzToken authzToken, string resourceId, ResourcePermissionType permissionType)')
+    print('   getAllDirectlyAccessibleUsers(AuthzToken authzToken, string resourceId, ResourcePermissionType permissionType)')
+    print('   getAllDirectlyAccessibleGroups(AuthzToken authzToken, string resourceId, ResourcePermissionType permissionType)')
     print('  bool userHasAccess(AuthzToken authzToken, string resourceId, ResourcePermissionType permissionType)')
     print('  string createGroupResourceProfile(AuthzToken authzToken, GroupResourceProfile groupResourceProfile)')
     print('  void updateGroupResourceProfile(AuthzToken authzToken, GroupResourceProfile groupResourceProfile)')
@@ -1283,6 +1285,18 @@ elif cmd == 'getAllAccessibleGroups':
         sys.exit(1)
     pp.pprint(client.getAllAccessibleGroups(eval(args[0]), args[1], eval(args[2]),))
 
+elif cmd == 'getAllDirectlyAccessibleUsers':
+    if len(args) != 3:
+        print('getAllDirectlyAccessibleUsers requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.getAllDirectlyAccessibleUsers(eval(args[0]), args[1], eval(args[2]),))
+
+elif cmd == 'getAllDirectlyAccessibleGroups':
+    if len(args) != 3:
+        print('getAllDirectlyAccessibleGroups requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.getAllDirectlyAccessibleGroups(eval(args[0]), args[1], eval(args[2]),))
+
 elif cmd == 'userHasAccess':
     if len(args) != 3:
         print('userHasAccess requires 3 args')
diff --git a/airavata/api/Airavata.py b/airavata/api/Airavata.py
index be91e70..b6e7762 100644
--- a/airavata/api/Airavata.py
+++ b/airavata/api/Airavata.py
@@ -3371,6 +3371,24 @@ class Iface(object):
         """
         pass
 
+    def getAllDirectlyAccessibleUsers(self, authzToken, resourceId, permissionType):
+        """
+        Parameters:
+         - authzToken
+         - resourceId
+         - permissionType
+        """
+        pass
+
+    def getAllDirectlyAccessibleGroups(self, authzToken, resourceId, permissionType):
+        """
+        Parameters:
+         - authzToken
+         - resourceId
+         - permissionType
+        """
+        pass
+
     def userHasAccess(self, authzToken, resourceId, permissionType):
         """
         Parameters:
@@ -12525,6 +12543,92 @@ class Client(Iface):
             raise result.ae
         raise TApplicationException(TApplicationException.MISSING_RESULT, "getAllAccessibleGroups failed: unknown result")
 
+    def getAllDirectlyAccessibleUsers(self, authzToken, resourceId, permissionType):
+        """
+        Parameters:
+         - authzToken
+         - resourceId
+         - permissionType
+        """
+        self.send_getAllDirectlyAccessibleUsers(authzToken, resourceId, permissionType)
+        return self.recv_getAllDirectlyAccessibleUsers()
+
+    def send_getAllDirectlyAccessibleUsers(self, authzToken, resourceId, permissionType):
+        self._oprot.writeMessageBegin('getAllDirectlyAccessibleUsers', TMessageType.CALL, self._seqid)
+        args = getAllDirectlyAccessibleUsers_args()
+        args.authzToken = authzToken
+        args.resourceId = resourceId
+        args.permissionType = permissionType
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getAllDirectlyAccessibleUsers(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getAllDirectlyAccessibleUsers_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, "getAllDirectlyAccessibleUsers failed: unknown result")
+
+    def getAllDirectlyAccessibleGroups(self, authzToken, resourceId, permissionType):
+        """
+        Parameters:
+         - authzToken
+         - resourceId
+         - permissionType
+        """
+        self.send_getAllDirectlyAccessibleGroups(authzToken, resourceId, permissionType)
+        return self.recv_getAllDirectlyAccessibleGroups()
+
+    def send_getAllDirectlyAccessibleGroups(self, authzToken, resourceId, permissionType):
+        self._oprot.writeMessageBegin('getAllDirectlyAccessibleGroups', TMessageType.CALL, self._seqid)
+        args = getAllDirectlyAccessibleGroups_args()
+        args.authzToken = authzToken
+        args.resourceId = resourceId
+        args.permissionType = permissionType
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getAllDirectlyAccessibleGroups(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getAllDirectlyAccessibleGroups_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, "getAllDirectlyAccessibleGroups failed: unknown result")
+
     def userHasAccess(self, authzToken, resourceId, permissionType):
         """
         Parameters:
@@ -13734,6 +13838,8 @@ class Processor(Iface, TProcessor):
         self._processMap["revokeSharingOfResourceFromGroups"] = Processor.process_revokeSharingOfResourceFromGroups
         self._processMap["getAllAccessibleUsers"] = Processor.process_getAllAccessibleUsers
         self._processMap["getAllAccessibleGroups"] = Processor.process_getAllAccessibleGroups
+        self._processMap["getAllDirectlyAccessibleUsers"] = Processor.process_getAllDirectlyAccessibleUsers
+        self._processMap["getAllDirectlyAccessibleGroups"] = Processor.process_getAllDirectlyAccessibleGroups
         self._processMap["userHasAccess"] = Processor.process_userHasAccess
         self._processMap["createGroupResourceProfile"] = Processor.process_createGroupResourceProfile
         self._processMap["updateGroupResourceProfile"] = Processor.process_updateGroupResourceProfile
@@ -18920,6 +19026,68 @@ class Processor(Iface, TProcessor):
         oprot.writeMessageEnd()
         oprot.trans.flush()
 
+    def process_getAllDirectlyAccessibleUsers(self, seqid, iprot, oprot):
+        args = getAllDirectlyAccessibleUsers_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = getAllDirectlyAccessibleUsers_result()
+        try:
+            result.success = self._handler.getAllDirectlyAccessibleUsers(args.authzToken, args.resourceId, args.permissionType)
+            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("getAllDirectlyAccessibleUsers", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_getAllDirectlyAccessibleGroups(self, seqid, iprot, oprot):
+        args = getAllDirectlyAccessibleGroups_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = getAllDirectlyAccessibleGroups_result()
+        try:
+            result.success = self._handler.getAllDirectlyAccessibleGroups(args.authzToken, args.resourceId, args.permissionType)
+            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("getAllDirectlyAccessibleGroups", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
     def process_userHasAccess(self, seqid, iprot, oprot):
         args = userHasAccess_args()
         args.read(iprot)
@@ -50647,19 +50815,394 @@ class deleteUserStoragePreference_result(object):
         return not (self == other)
 
 
-class getLatestQueueStatuses_args(object):
+class getLatestQueueStatuses_args(object):
+    """
+    Attributes:
+     - authzToken
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
+    )
+
+    def __init__(self, authzToken=None,):
+        self.authzToken = authzToken
+
+    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)
+            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('getLatestQueueStatuses_args')
+        if self.authzToken is not None:
+            oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
+            self.authzToken.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.authzToken is None:
+            raise TProtocolException(message='Required field authzToken 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 getLatestQueueStatuses_result(object):
+    """
+    Attributes:
+     - success
+     - ire
+     - ace
+     - ase
+     - ae
+    """
+
+    thrift_spec = (
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.status.ttypes.QueueStatusModel, airavata.model.status.ttypes.QueueStatusModel.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
+        (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.LIST:
+                    self.success = []
+                    (_etype280, _size277) = iprot.readListBegin()
+                    for _i281 in range(_size277):
+                        _elem282 = airavata.model.status.ttypes.QueueStatusModel()
+                        _elem282.read(iprot)
+                        self.success.append(_elem282)
+                    iprot.readListEnd()
+                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('getLatestQueueStatuses_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter283 in self.success:
+                iter283.write(oprot)
+            oprot.writeListEnd()
+            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 registerDataProduct_args(object):
+    """
+    Attributes:
+     - authzToken
+     - dataProductModel
+    """
+
+    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, 'dataProductModel', (airavata.model.data.replica.ttypes.DataProductModel, airavata.model.data.replica.ttypes.DataProductModel.thrift_spec), None, ),  # 2
+    )
+
+    def __init__(self, authzToken=None, dataProductModel=None,):
+        self.authzToken = authzToken
+        self.dataProductModel = dataProductModel
+
+    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.STRUCT:
+                    self.dataProductModel = airavata.model.data.replica.ttypes.DataProductModel()
+                    self.dataProductModel.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('registerDataProduct_args')
+        if self.authzToken is not None:
+            oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
+            self.authzToken.write(oprot)
+            oprot.writeFieldEnd()
+        if self.dataProductModel is not None:
+            oprot.writeFieldBegin('dataProductModel', TType.STRUCT, 2)
+            self.dataProductModel.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.dataProductModel is None:
+            raise TProtocolException(message='Required field dataProductModel 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 registerDataProduct_result(object):
+    """
+    Attributes:
+     - success
+     - ire
+     - ace
+     - ase
+     - ae
+    """
+
+    thrift_spec = (
+        (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
+        (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.STRING:
+                    self.success = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                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('registerDataProduct_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.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 getDataProduct_args(object):
     """
     Attributes:
      - authzToken
+     - dataProductUri
     """
 
     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, 'dataProductUri', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None,):
+    def __init__(self, authzToken=None, dataProductUri=None,):
         self.authzToken = authzToken
+        self.dataProductUri = dataProductUri
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -50676,6 +51219,11 @@ class getLatestQueueStatuses_args(object):
                     self.authzToken.read(iprot)
                 else:
                     iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.dataProductUri = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
             else:
                 iprot.skip(ftype)
             iprot.readFieldEnd()
@@ -50685,17 +51233,23 @@ class getLatestQueueStatuses_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('getLatestQueueStatuses_args')
+        oprot.writeStructBegin('getDataProduct_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
+        if self.dataProductUri is not None:
+            oprot.writeFieldBegin('dataProductUri', TType.STRING, 2)
+            oprot.writeString(self.dataProductUri.encode('utf-8') if sys.version_info[0] == 2 else self.dataProductUri)
+            oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
+        if self.dataProductUri is None:
+            raise TProtocolException(message='Required field dataProductUri is unset!')
         return
 
     def __repr__(self):
@@ -50710,7 +51264,7 @@ class getLatestQueueStatuses_args(object):
         return not (self == other)
 
 
-class getLatestQueueStatuses_result(object):
+class getDataProduct_result(object):
     """
     Attributes:
      - success
@@ -50721,7 +51275,7 @@ class getLatestQueueStatuses_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.status.ttypes.QueueStatusModel, airavata.model.status.ttypes.QueueStatusModel.thrift_spec), False), None, ),  # 0
+        (0, TType.STRUCT, 'success', (airavata.model.data.replica.ttypes.DataProductModel, airavata.model.data.replica.ttypes.DataProductModel.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
@@ -50745,14 +51299,9 @@ class getLatestQueueStatuses_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.LIST:
-                    self.success = []
-                    (_etype280, _size277) = iprot.readListBegin()
-                    for _i281 in range(_size277):
-                        _elem282 = airavata.model.status.ttypes.QueueStatusModel()
-                        _elem282.read(iprot)
-                        self.success.append(_elem282)
-                    iprot.readListEnd()
+                if ftype == TType.STRUCT:
+                    self.success = airavata.model.data.replica.ttypes.DataProductModel()
+                    self.success.read(iprot)
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -50788,13 +51337,10 @@ class getLatestQueueStatuses_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('getLatestQueueStatuses_result')
+        oprot.writeStructBegin('getDataProduct_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.LIST, 0)
-            oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter283 in self.success:
-                iter283.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)
@@ -50830,22 +51376,22 @@ class getLatestQueueStatuses_result(object):
         return not (self == other)
 
 
-class registerDataProduct_args(object):
+class registerReplicaLocation_args(object):
     """
     Attributes:
      - authzToken
-     - dataProductModel
+     - replicaLocationModel
     """
 
     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, 'dataProductModel', (airavata.model.data.replica.ttypes.DataProductModel, airavata.model.data.replica.ttypes.DataProductModel.thrift_spec), None, ),  # 2
+        (2, TType.STRUCT, 'replicaLocationModel', (airavata.model.data.replica.ttypes.DataReplicaLocationModel, airavata.model.data.replica.ttypes.DataReplicaLocationModel.thrift_spec), None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, dataProductModel=None,):
+    def __init__(self, authzToken=None, replicaLocationModel=None,):
         self.authzToken = authzToken
-        self.dataProductModel = dataProductModel
+        self.replicaLocationModel = replicaLocationModel
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -50864,8 +51410,8 @@ class registerDataProduct_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRUCT:
-                    self.dataProductModel = airavata.model.data.replica.ttypes.DataProductModel()
-                    self.dataProductModel.read(iprot)
+                    self.replicaLocationModel = airavata.model.data.replica.ttypes.DataReplicaLocationModel()
+                    self.replicaLocationModel.read(iprot)
                 else:
                     iprot.skip(ftype)
             else:
@@ -50877,14 +51423,14 @@ class registerDataProduct_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('registerDataProduct_args')
+        oprot.writeStructBegin('registerReplicaLocation_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.dataProductModel is not None:
-            oprot.writeFieldBegin('dataProductModel', TType.STRUCT, 2)
-            self.dataProductModel.write(oprot)
+        if self.replicaLocationModel is not None:
+            oprot.writeFieldBegin('replicaLocationModel', TType.STRUCT, 2)
+            self.replicaLocationModel.write(oprot)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -50892,8 +51438,8 @@ class registerDataProduct_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.dataProductModel is None:
-            raise TProtocolException(message='Required field dataProductModel is unset!')
+        if self.replicaLocationModel is None:
+            raise TProtocolException(message='Required field replicaLocationModel is unset!')
         return
 
     def __repr__(self):
@@ -50908,7 +51454,7 @@ class registerDataProduct_args(object):
         return not (self == other)
 
 
-class registerDataProduct_result(object):
+class registerReplicaLocation_result(object):
     """
     Attributes:
      - success
@@ -50980,7 +51526,7 @@ class registerDataProduct_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('registerDataProduct_result')
+        oprot.writeStructBegin('registerReplicaLocation_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)
@@ -51019,22 +51565,22 @@ class registerDataProduct_result(object):
         return not (self == other)
 
 
-class getDataProduct_args(object):
+class getParentDataProduct_args(object):
     """
     Attributes:
      - authzToken
-     - dataProductUri
+     - productUri
     """
 
     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, 'dataProductUri', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'productUri', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, dataProductUri=None,):
+    def __init__(self, authzToken=None, productUri=None,):
         self.authzToken = authzToken
-        self.dataProductUri = dataProductUri
+        self.productUri = productUri
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -51053,7 +51599,7 @@ class getDataProduct_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.dataProductUri = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.productUri = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -51065,14 +51611,14 @@ class getDataProduct_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('getDataProduct_args')
+        oprot.writeStructBegin('getParentDataProduct_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.dataProductUri is not None:
-            oprot.writeFieldBegin('dataProductUri', TType.STRING, 2)
-            oprot.writeString(self.dataProductUri.encode('utf-8') if sys.version_info[0] == 2 else self.dataProductUri)
+        if self.productUri is not None:
+            oprot.writeFieldBegin('productUri', TType.STRING, 2)
+            oprot.writeString(self.productUri.encode('utf-8') if sys.version_info[0] == 2 else self.productUri)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -51080,8 +51626,8 @@ class getDataProduct_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.dataProductUri is None:
-            raise TProtocolException(message='Required field dataProductUri is unset!')
+        if self.productUri is None:
+            raise TProtocolException(message='Required field productUri is unset!')
         return
 
     def __repr__(self):
@@ -51096,7 +51642,7 @@ class getDataProduct_args(object):
         return not (self == other)
 
 
-class getDataProduct_result(object):
+class getParentDataProduct_result(object):
     """
     Attributes:
      - success
@@ -51169,7 +51715,7 @@ class getDataProduct_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('getDataProduct_result')
+        oprot.writeStructBegin('getParentDataProduct_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.STRUCT, 0)
             self.success.write(oprot)
@@ -51208,22 +51754,22 @@ class getDataProduct_result(object):
         return not (self == other)
 
 
-class registerReplicaLocation_args(object):
+class getChildDataProducts_args(object):
     """
     Attributes:
      - authzToken
-     - replicaLocationModel
+     - productUri
     """
 
     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, 'replicaLocationModel', (airavata.model.data.replica.ttypes.DataReplicaLocationModel, airavata.model.data.replica.ttypes.DataReplicaLocationModel.thrift_spec), None, ),  # 2
+        (2, TType.STRING, 'productUri', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, replicaLocationModel=None,):
+    def __init__(self, authzToken=None, productUri=None,):
         self.authzToken = authzToken
-        self.replicaLocationModel = replicaLocationModel
+        self.productUri = productUri
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -51241,9 +51787,8 @@ class registerReplicaLocation_args(object):
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
-                if ftype == TType.STRUCT:
-                    self.replicaLocationModel = airavata.model.data.replica.ttypes.DataReplicaLocationModel()
-                    self.replicaLocationModel.read(iprot)
+                if ftype == TType.STRING:
+                    self.productUri = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -51255,14 +51800,14 @@ class registerReplicaLocation_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('registerReplicaLocation_args')
+        oprot.writeStructBegin('getChildDataProducts_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.replicaLocationModel is not None:
-            oprot.writeFieldBegin('replicaLocationModel', TType.STRUCT, 2)
-            self.replicaLocationModel.write(oprot)
+        if self.productUri is not None:
+            oprot.writeFieldBegin('productUri', TType.STRING, 2)
+            oprot.writeString(self.productUri.encode('utf-8') if sys.version_info[0] == 2 else self.productUri)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -51270,8 +51815,8 @@ class registerReplicaLocation_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.replicaLocationModel is None:
-            raise TProtocolException(message='Required field replicaLocationModel is unset!')
+        if self.productUri is None:
+            raise TProtocolException(message='Required field productUri is unset!')
         return
 
     def __repr__(self):
@@ -51286,7 +51831,7 @@ class registerReplicaLocation_args(object):
         return not (self == other)
 
 
-class registerReplicaLocation_result(object):
+class getChildDataProducts_result(object):
     """
     Attributes:
      - success
@@ -51297,7 +51842,7 @@ class registerReplicaLocation_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRING, 'success', 'UTF8', None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.data.replica.ttypes.DataProductModel, airavata.model.data.replica.ttypes.DataProductModel.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
@@ -51321,8 +51866,14 @@ class registerReplicaLocation_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.LIST:
+                    self.success = []
+                    (_etype287, _size284) = iprot.readListBegin()
+                    for _i288 in range(_size284):
+                        _elem289 = airavata.model.data.replica.ttypes.DataProductModel()
+                        _elem289.read(iprot)
+                        self.success.append(_elem289)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -51358,10 +51909,13 @@ class registerReplicaLocation_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('registerReplicaLocation_result')
+        oprot.writeStructBegin('getChildDataProducts_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.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter290 in self.success:
+                iter290.write(oprot)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -51397,22 +51951,26 @@ class registerReplicaLocation_result(object):
         return not (self == other)
 
 
-class getParentDataProduct_args(object):
+class shareResourceWithUsers_args(object):
     """
     Attributes:
      - authzToken
-     - productUri
+     - resourceId
+     - userPermissionList
     """
 
     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, 'productUri', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'resourceId', 'UTF8', None, ),  # 2
+        None,  # 3
+        (4, TType.MAP, 'userPermissionList', (TType.STRING, 'UTF8', TType.I32, None, False), None, ),  # 4
     )
 
-    def __init__(self, authzToken=None, productUri=None,):
+    def __init__(self, authzToken=None, resourceId=None, userPermissionList=None,):
         self.authzToken = authzToken
-        self.productUri = productUri
+        self.resourceId = resourceId
+        self.userPermissionList = userPermissionList
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -51431,7 +51989,18 @@ class getParentDataProduct_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.productUri = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.resourceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.MAP:
+                    self.userPermissionList = {}
+                    (_ktype292, _vtype293, _size291) = iprot.readMapBegin()
+                    for _i295 in range(_size291):
+                        _key296 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        _val297 = iprot.readI32()
+                        self.userPermissionList[_key296] = _val297
+                    iprot.readMapEnd()
                 else:
                     iprot.skip(ftype)
             else:
@@ -51443,14 +52012,22 @@ class getParentDataProduct_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('getParentDataProduct_args')
+        oprot.writeStructBegin('shareResourceWithUsers_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.productUri is not None:
-            oprot.writeFieldBegin('productUri', TType.STRING, 2)
-            oprot.writeString(self.productUri.encode('utf-8') if sys.version_info[0] == 2 else self.productUri)
+        if self.resourceId is not None:
+            oprot.writeFieldBegin('resourceId', TType.STRING, 2)
+            oprot.writeString(self.resourceId.encode('utf-8') if sys.version_info[0] == 2 else self.resourceId)
+            oprot.writeFieldEnd()
+        if self.userPermissionList is not None:
+            oprot.writeFieldBegin('userPermissionList', TType.MAP, 4)
+            oprot.writeMapBegin(TType.STRING, TType.I32, len(self.userPermissionList))
+            for kiter298, viter299 in self.userPermissionList.items():
+                oprot.writeString(kiter298.encode('utf-8') if sys.version_info[0] == 2 else kiter298)
+                oprot.writeI32(viter299)
+            oprot.writeMapEnd()
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -51458,8 +52035,8 @@ class getParentDataProduct_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.productUri is None:
-            raise TProtocolException(message='Required field productUri is unset!')
+        if self.resourceId is None:
+            raise TProtocolException(message='Required field resourceId is unset!')
         return
 
     def __repr__(self):
@@ -51474,7 +52051,7 @@ class getParentDataProduct_args(object):
         return not (self == other)
 
 
-class getParentDataProduct_result(object):
+class shareResourceWithUsers_result(object):
     """
     Attributes:
      - success
@@ -51485,7 +52062,7 @@ class getParentDataProduct_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.data.replica.ttypes.DataProductModel, airavata.model.data.replica.ttypes.DataProductModel.thrift_spec), 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
@@ -51509,9 +52086,8 @@ class getParentDataProduct_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.STRUCT:
-                    self.success = airavata.model.data.replica.ttypes.DataProductModel()
-                    self.success.read(iprot)
+                if ftype == TType.BOOL:
+                    self.success = iprot.readBool()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -51547,10 +52123,10 @@ class getParentDataProduct_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('getParentDataProduct_result')
+        oprot.writeStructBegin('shareResourceWithUsers_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.STRUCT, 0)
-            self.success.write(oprot)
+            oprot.writeFieldBegin('success', TType.BOOL, 0)
+            oprot.writeBool(self.success)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -51586,22 +52162,26 @@ class getParentDataProduct_result(object):
         return not (self == other)
 
 
-class getChildDataProducts_args(object):
+class shareResourceWithGroups_args(object):
     """
     Attributes:
      - authzToken
-     - productUri
+     - resourceId
+     - groupPermissionList
     """
 
     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, 'productUri', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'resourceId', 'UTF8', None, ),  # 2
+        None,  # 3
+        (4, TType.MAP, 'groupPermissionList', (TType.STRING, 'UTF8', TType.I32, None, False), None, ),  # 4
     )
 
-    def __init__(self, authzToken=None, productUri=None,):
+    def __init__(self, authzToken=None, resourceId=None, groupPermissionList=None,):
         self.authzToken = authzToken
-        self.productUri = productUri
+        self.resourceId = resourceId
+        self.groupPermissionList = groupPermissionList
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -51620,7 +52200,18 @@ class getChildDataProducts_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.productUri = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.resourceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.MAP:
+                    self.groupPermissionList = {}
+                    (_ktype301, _vtype302, _size300) = iprot.readMapBegin()
+                    for _i304 in range(_size300):
+                        _key305 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        _val306 = iprot.readI32()
+                        self.groupPermissionList[_key305] = _val306
+                    iprot.readMapEnd()
                 else:
                     iprot.skip(ftype)
             else:
@@ -51632,14 +52223,22 @@ class getChildDataProducts_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('getChildDataProducts_args')
+        oprot.writeStructBegin('shareResourceWithGroups_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.productUri is not None:
-            oprot.writeFieldBegin('productUri', TType.STRING, 2)
-            oprot.writeString(self.productUri.encode('utf-8') if sys.version_info[0] == 2 else self.productUri)
+        if self.resourceId is not None:
+            oprot.writeFieldBegin('resourceId', TType.STRING, 2)
+            oprot.writeString(self.resourceId.encode('utf-8') if sys.version_info[0] == 2 else self.resourceId)
+            oprot.writeFieldEnd()
+        if self.groupPermissionList is not None:
+            oprot.writeFieldBegin('groupPermissionList', TType.MAP, 4)
+            oprot.writeMapBegin(TType.STRING, TType.I32, len(self.groupPermissionList))
+            for kiter307, viter308 in self.groupPermissionList.items():
+                oprot.writeString(kiter307.encode('utf-8') if sys.version_info[0] == 2 else kiter307)
+                oprot.writeI32(viter308)
+            oprot.writeMapEnd()
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -51647,8 +52246,8 @@ class getChildDataProducts_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.productUri is None:
-            raise TProtocolException(message='Required field productUri is unset!')
+        if self.resourceId is None:
+            raise TProtocolException(message='Required field resourceId is unset!')
         return
 
     def __repr__(self):
@@ -51663,7 +52262,7 @@ class getChildDataProducts_args(object):
         return not (self == other)
 
 
-class getChildDataProducts_result(object):
+class shareResourceWithGroups_result(object):
     """
     Attributes:
      - success
@@ -51674,7 +52273,7 @@ class getChildDataProducts_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.data.replica.ttypes.DataProductModel, airavata.model.data.replica.ttypes.DataProductModel.thrift_spec), False), 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
@@ -51698,14 +52297,8 @@ class getChildDataProducts_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.LIST:
-                    self.success = []
-                    (_etype287, _size284) = iprot.readListBegin()
-                    for _i288 in range(_size284):
-                        _elem289 = airavata.model.data.replica.ttypes.DataProductModel()
-                        _elem289.read(iprot)
-                        self.success.append(_elem289)
-                    iprot.readListEnd()
+                if ftype == TType.BOOL:
+                    self.success = iprot.readBool()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -51741,13 +52334,10 @@ class getChildDataProducts_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('getChildDataProducts_result')
+        oprot.writeStructBegin('shareResourceWithGroups_result')
         if self.success is not None:
-            oprot.writeFieldBegin('success', TType.LIST, 0)
-            oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter290 in self.success:
-                iter290.write(oprot)
-            oprot.writeListEnd()
+            oprot.writeFieldBegin('success', TType.BOOL, 0)
+            oprot.writeBool(self.success)
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -51783,7 +52373,7 @@ class getChildDataProducts_result(object):
         return not (self == other)
 
 
-class shareResourceWithUsers_args(object):
+class revokeSharingOfResourceFromUsers_args(object):
     """
     Attributes:
      - authzToken
@@ -51827,11 +52417,11 @@ class shareResourceWithUsers_args(object):
             elif fid == 4:
                 if ftype == TType.MAP:
                     self.userPermissionList = {}
-                    (_ktype292, _vtype293, _size291) = iprot.readMapBegin()
-                    for _i295 in range(_size291):
-                        _key296 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        _val297 = iprot.readI32()
-                        self.userPermissionList[_key296] = _val297
+                    (_ktype310, _vtype311, _size309) = iprot.readMapBegin()
+                    for _i313 in range(_size309):
+                        _key314 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        _val315 = iprot.readI32()
+                        self.userPermissionList[_key314] = _val315
                     iprot.readMapEnd()
                 else:
                     iprot.skip(ftype)
@@ -51844,7 +52434,7 @@ class shareResourceWithUsers_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('shareResourceWithUsers_args')
+        oprot.writeStructBegin('revokeSharingOfResourceFromUsers_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -51856,9 +52446,9 @@ class shareResourceWithUsers_args(object):
         if self.userPermissionList is not None:
             oprot.writeFieldBegin('userPermissionList', TType.MAP, 4)
             oprot.writeMapBegin(TType.STRING, TType.I32, len(self.userPermissionList))
-            for kiter298, viter299 in self.userPermissionList.items():
-                oprot.writeString(kiter298.encode('utf-8') if sys.version_info[0] == 2 else kiter298)
-                oprot.writeI32(viter299)
+            for kiter316, viter317 in self.userPermissionList.items():
+                oprot.writeString(kiter316.encode('utf-8') if sys.version_info[0] == 2 else kiter316)
+                oprot.writeI32(viter317)
             oprot.writeMapEnd()
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
@@ -51883,7 +52473,7 @@ class shareResourceWithUsers_args(object):
         return not (self == other)
 
 
-class shareResourceWithUsers_result(object):
+class revokeSharingOfResourceFromUsers_result(object):
     """
     Attributes:
      - success
@@ -51955,7 +52545,7 @@ class shareResourceWithUsers_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('shareResourceWithUsers_result')
+        oprot.writeStructBegin('revokeSharingOfResourceFromUsers_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.BOOL, 0)
             oprot.writeBool(self.success)
@@ -51994,7 +52584,7 @@ class shareResourceWithUsers_result(object):
         return not (self == other)
 
 
-class shareResourceWithGroups_args(object):
+class revokeSharingOfResourceFromGroups_args(object):
     """
     Attributes:
      - authzToken
@@ -52038,11 +52628,11 @@ class shareResourceWithGroups_args(object):
             elif fid == 4:
                 if ftype == TType.MAP:
                     self.groupPermissionList = {}
-                    (_ktype301, _vtype302, _size300) = iprot.readMapBegin()
-                    for _i304 in range(_size300):
-                        _key305 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        _val306 = iprot.readI32()
-                        self.groupPermissionList[_key305] = _val306
+                    (_ktype319, _vtype320, _size318) = iprot.readMapBegin()
+                    for _i322 in range(_size318):
+                        _key323 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        _val324 = iprot.readI32()
+                        self.groupPermissionList[_key323] = _val324
                     iprot.readMapEnd()
                 else:
                     iprot.skip(ftype)
@@ -52055,7 +52645,7 @@ class shareResourceWithGroups_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('shareResourceWithGroups_args')
+        oprot.writeStructBegin('revokeSharingOfResourceFromGroups_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -52067,9 +52657,9 @@ class shareResourceWithGroups_args(object):
         if self.groupPermissionList is not None:
             oprot.writeFieldBegin('groupPermissionList', TType.MAP, 4)
             oprot.writeMapBegin(TType.STRING, TType.I32, len(self.groupPermissionList))
-            for kiter307, viter308 in self.groupPermissionList.items():
-                oprot.writeString(kiter307.encode('utf-8') if sys.version_info[0] == 2 else kiter307)
-                oprot.writeI32(viter308)
+            for kiter325, viter326 in self.groupPermissionList.items():
+                oprot.writeString(kiter325.encode('utf-8') if sys.version_info[0] == 2 else kiter325)
+                oprot.writeI32(viter326)
             oprot.writeMapEnd()
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
@@ -52094,7 +52684,7 @@ class shareResourceWithGroups_args(object):
         return not (self == other)
 
 
-class shareResourceWithGroups_result(object):
+class revokeSharingOfResourceFromGroups_result(object):
     """
     Attributes:
      - success
@@ -52166,7 +52756,7 @@ class shareResourceWithGroups_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('shareResourceWithGroups_result')
+        oprot.writeStructBegin('revokeSharingOfResourceFromGroups_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.BOOL, 0)
             oprot.writeBool(self.success)
@@ -52205,12 +52795,12 @@ class shareResourceWithGroups_result(object):
         return not (self == other)
 
 
-class revokeSharingOfResourceFromUsers_args(object):
+class getAllAccessibleUsers_args(object):
     """
     Attributes:
      - authzToken
      - resourceId
-     - userPermissionList
+     - permissionType
     """
 
     thrift_spec = (
@@ -52218,13 +52808,13 @@ class revokeSharingOfResourceFromUsers_args(object):
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
         (2, TType.STRING, 'resourceId', 'UTF8', None, ),  # 2
         None,  # 3
-        (4, TType.MAP, 'userPermissionList', (TType.STRING, 'UTF8', TType.I32, None, False), None, ),  # 4
+        (4, TType.I32, 'permissionType', None, None, ),  # 4
     )
 
-    def __init__(self, authzToken=None, resourceId=None, userPermissionList=None,):
+    def __init__(self, authzToken=None, resourceId=None, permissionType=None,):
         self.authzToken = authzToken
         self.resourceId = resourceId
-        self.userPermissionList = userPermissionList
+        self.permissionType = permissionType
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -52247,14 +52837,8 @@ class revokeSharingOfResourceFromUsers_args(object):
                 else:
                     iprot.skip(ftype)
             elif fid == 4:
-                if ftype == TType.MAP:
-                    self.userPermissionList = {}
-                    (_ktype310, _vtype311, _size309) = iprot.readMapBegin()
-                    for _i313 in range(_size309):
-                        _key314 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        _val315 = iprot.readI32()
-                        self.userPermissionList[_key314] = _val315
-                    iprot.readMapEnd()
+                if ftype == TType.I32:
+                    self.permissionType = iprot.readI32()
                 else:
                     iprot.skip(ftype)
             else:
@@ -52266,7 +52850,7 @@ class revokeSharingOfResourceFromUsers_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('revokeSharingOfResourceFromUsers_args')
+        oprot.writeStructBegin('getAllAccessibleUsers_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -52275,13 +52859,9 @@ class revokeSharingOfResourceFromUsers_args(object):
             oprot.writeFieldBegin('resourceId', TType.STRING, 2)
             oprot.writeString(self.resourceId.encode('utf-8') if sys.version_info[0] == 2 else self.resourceId)
             oprot.writeFieldEnd()
-        if self.userPermissionList is not None:
-            oprot.writeFieldBegin('userPermissionList', TType.MAP, 4)
-            oprot.writeMapBegin(TType.STRING, TType.I32, len(self.userPermissionList))
-            for kiter316, viter317 in self.userPermissionList.items():
-                oprot.writeString(kiter316.encode('utf-8') if sys.version_info[0] == 2 else kiter316)
-                oprot.writeI32(viter317)
-            oprot.writeMapEnd()
+        if self.permissionType is not None:
+            oprot.writeFieldBegin('permissionType', TType.I32, 4)
+            oprot.writeI32(self.permissionType)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -52291,6 +52871,8 @@ class revokeSharingOfResourceFromUsers_args(object):
             raise TProtocolException(message='Required field authzToken is unset!')
         if self.resourceId is None:
             raise TProtocolException(message='Required field resourceId is unset!')
+        if self.permissionType is None:
+            raise TProtocolException(message='Required field permissionType is unset!')
         return
 
     def __repr__(self):
@@ -52305,7 +52887,7 @@ class revokeSharingOfResourceFromUsers_args(object):
         return not (self == other)
 
 
-class revokeSharingOfResourceFromUsers_result(object):
+class getAllAccessibleUsers_result(object):
     """
     Attributes:
      - success
@@ -52316,7 +52898,7 @@ class revokeSharingOfResourceFromUsers_result(object):
     """
 
     thrift_spec = (
-        (0, TType.BOOL, 'success', None, None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRING, 'UTF8', 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
@@ -52340,8 +52922,13 @@ class revokeSharingOfResourceFromUsers_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.BOOL:
-                    self.success = iprot.readBool()
+                if ftype == TType.LIST:
+                    self.success = []
+                    (_etype330, _size327) = iprot.readListBegin()
+                    for _i331 in range(_size327):
+                        _elem332 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.success.append(_elem332)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -52377,10 +52964,13 @@ class revokeSharingOfResourceFromUsers_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('revokeSharingOfResourceFromUsers_result')
+        oprot.writeStructBegin('getAllAccessibleUsers_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.STRING, len(self.success))
+            for iter333 in self.success:
+                oprot.writeString(iter333.encode('utf-8') if sys.version_info[0] == 2 else iter333)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -52416,12 +53006,12 @@ class revokeSharingOfResourceFromUsers_result(object):
         return not (self == other)
 
 
-class revokeSharingOfResourceFromGroups_args(object):
+class getAllAccessibleGroups_args(object):
     """
     Attributes:
      - authzToken
      - resourceId
-     - groupPermissionList
+     - permissionType
     """
 
     thrift_spec = (
@@ -52429,13 +53019,13 @@ class revokeSharingOfResourceFromGroups_args(object):
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
         (2, TType.STRING, 'resourceId', 'UTF8', None, ),  # 2
         None,  # 3
-        (4, TType.MAP, 'groupPermissionList', (TType.STRING, 'UTF8', TType.I32, None, False), None, ),  # 4
+        (4, TType.I32, 'permissionType', None, None, ),  # 4
     )
 
-    def __init__(self, authzToken=None, resourceId=None, groupPermissionList=None,):
+    def __init__(self, authzToken=None, resourceId=None, permissionType=None,):
         self.authzToken = authzToken
         self.resourceId = resourceId
-        self.groupPermissionList = groupPermissionList
+        self.permissionType = permissionType
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -52458,14 +53048,8 @@ class revokeSharingOfResourceFromGroups_args(object):
                 else:
                     iprot.skip(ftype)
             elif fid == 4:
-                if ftype == TType.MAP:
-                    self.groupPermissionList = {}
-                    (_ktype319, _vtype320, _size318) = iprot.readMapBegin()
-                    for _i322 in range(_size318):
-                        _key323 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        _val324 = iprot.readI32()
-                        self.groupPermissionList[_key323] = _val324
-                    iprot.readMapEnd()
+                if ftype == TType.I32:
+                    self.permissionType = iprot.readI32()
                 else:
                     iprot.skip(ftype)
             else:
@@ -52477,7 +53061,7 @@ class revokeSharingOfResourceFromGroups_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('revokeSharingOfResourceFromGroups_args')
+        oprot.writeStructBegin('getAllAccessibleGroups_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -52486,13 +53070,9 @@ class revokeSharingOfResourceFromGroups_args(object):
             oprot.writeFieldBegin('resourceId', TType.STRING, 2)
             oprot.writeString(self.resourceId.encode('utf-8') if sys.version_info[0] == 2 else self.resourceId)
             oprot.writeFieldEnd()
-        if self.groupPermissionList is not None:
-            oprot.writeFieldBegin('groupPermissionList', TType.MAP, 4)
-            oprot.writeMapBegin(TType.STRING, TType.I32, len(self.groupPermissionList))
-            for kiter325, viter326 in self.groupPermissionList.items():
-                oprot.writeString(kiter325.encode('utf-8') if sys.version_info[0] == 2 else kiter325)
-                oprot.writeI32(viter326)
-            oprot.writeMapEnd()
+        if self.permissionType is not None:
+            oprot.writeFieldBegin('permissionType', TType.I32, 4)
+            oprot.writeI32(self.permissionType)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -52502,6 +53082,8 @@ class revokeSharingOfResourceFromGroups_args(object):
             raise TProtocolException(message='Required field authzToken is unset!')
         if self.resourceId is None:
             raise TProtocolException(message='Required field resourceId is unset!')
+        if self.permissionType is None:
+            raise TProtocolException(message='Required field permissionType is unset!')
         return
 
     def __repr__(self):
@@ -52516,7 +53098,7 @@ class revokeSharingOfResourceFromGroups_args(object):
         return not (self == other)
 
 
-class revokeSharingOfResourceFromGroups_result(object):
+class getAllAccessibleGroups_result(object):
     """
     Attributes:
      - success
@@ -52527,7 +53109,7 @@ class revokeSharingOfResourceFromGroups_result(object):
     """
 
     thrift_spec = (
-        (0, TType.BOOL, 'success', None, None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRING, 'UTF8', 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
@@ -52551,8 +53133,13 @@ class revokeSharingOfResourceFromGroups_result(object):
             if ftype == TType.STOP:
                 break
             if fid == 0:
-                if ftype == TType.BOOL:
-                    self.success = iprot.readBool()
+                if ftype == TType.LIST:
+                    self.success = []
+                    (_etype337, _size334) = iprot.readListBegin()
+                    for _i338 in range(_size334):
+                        _elem339 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.success.append(_elem339)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 1:
@@ -52588,10 +53175,13 @@ class revokeSharingOfResourceFromGroups_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('revokeSharingOfResourceFromGroups_result')
+        oprot.writeStructBegin('getAllAccessibleGroups_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.STRING, len(self.success))
+            for iter340 in self.success:
+                oprot.writeString(iter340.encode('utf-8') if sys.version_info[0] == 2 else iter340)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
             oprot.writeFieldBegin('ire', TType.STRUCT, 1)
@@ -52627,7 +53217,7 @@ class revokeSharingOfResourceFromGroups_result(object):
         return not (self == other)
 
 
-class getAllAccessibleUsers_args(object):
+class getAllDirectlyAccessibleUsers_args(object):
     """
     Attributes:
      - authzToken
@@ -52682,7 +53272,7 @@ class getAllAccessibleUsers_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('getAllAccessibleUsers_args')
+        oprot.writeStructBegin('getAllDirectlyAccessibleUsers_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -52719,7 +53309,7 @@ class getAllAccessibleUsers_args(object):
         return not (self == other)
 
 
-class getAllAccessibleUsers_result(object):
+class getAllDirectlyAccessibleUsers_result(object):
     """
     Attributes:
      - success
@@ -52756,10 +53346,10 @@ class getAllAccessibleUsers_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype330, _size327) = iprot.readListBegin()
-                    for _i331 in range(_size327):
-                        _elem332 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        self.success.append(_elem332)
+                    (_etype344, _size341) = iprot.readListBegin()
+                    for _i345 in range(_size341):
+                        _elem346 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.success.append(_elem346)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -52796,12 +53386,12 @@ class getAllAccessibleUsers_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('getAllAccessibleUsers_result')
+        oprot.writeStructBegin('getAllDirectlyAccessibleUsers_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRING, len(self.success))
-            for iter333 in self.success:
-                oprot.writeString(iter333.encode('utf-8') if sys.version_info[0] == 2 else iter333)
+            for iter347 in self.success:
+                oprot.writeString(iter347.encode('utf-8') if sys.version_info[0] == 2 else iter347)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -52838,7 +53428,7 @@ class getAllAccessibleUsers_result(object):
         return not (self == other)
 
 
-class getAllAccessibleGroups_args(object):
+class getAllDirectlyAccessibleGroups_args(object):
     """
     Attributes:
      - authzToken
@@ -52893,7 +53483,7 @@ class getAllAccessibleGroups_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('getAllAccessibleGroups_args')
+        oprot.writeStructBegin('getAllDirectlyAccessibleGroups_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -52930,7 +53520,7 @@ class getAllAccessibleGroups_args(object):
         return not (self == other)
 
 
-class getAllAccessibleGroups_result(object):
+class getAllDirectlyAccessibleGroups_result(object):
     """
     Attributes:
      - success
@@ -52967,10 +53557,10 @@ class getAllAccessibleGroups_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype337, _size334) = iprot.readListBegin()
-                    for _i338 in range(_size334):
-                        _elem339 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        self.success.append(_elem339)
+                    (_etype351, _size348) = iprot.readListBegin()
+                    for _i352 in range(_size348):
+                        _elem353 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.success.append(_elem353)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -53007,12 +53597,12 @@ class getAllAccessibleGroups_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('getAllAccessibleGroups_result')
+        oprot.writeStructBegin('getAllDirectlyAccessibleGroups_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRING, len(self.success))
-            for iter340 in self.success:
-                oprot.writeString(iter340.encode('utf-8') if sys.version_info[0] == 2 else iter340)
+            for iter354 in self.success:
+                oprot.writeString(iter354.encode('utf-8') if sys.version_info[0] == 2 else iter354)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -54109,11 +54699,11 @@ class getGroupResourceList_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype344, _size341) = iprot.readListBegin()
-                    for _i345 in range(_size341):
-                        _elem346 = airavata.model.appcatalog.groupresourceprofile.ttypes.GroupResourceProfile()
-                        _elem346.read(iprot)
-                        self.success.append(_elem346)
+                    (_etype358, _size355) = iprot.readListBegin()
+                    for _i359 in range(_size355):
+                        _elem360 = airavata.model.appcatalog.groupresourceprofile.ttypes.GroupResourceProfile()
+                        _elem360.read(iprot)
+                        self.success.append(_elem360)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -54154,8 +54744,8 @@ class getGroupResourceList_result(object):
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter347 in self.success:
-                iter347.write(oprot)
+            for iter361 in self.success:
+                iter361.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -55465,11 +56055,11 @@ class getGroupComputeResourcePrefList_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype351, _size348) = iprot.readListBegin()
-                    for _i352 in range(_size348):
-                        _elem353 = airavata.model.appcatalog.groupresourceprofile.ttypes.GroupComputeResourcePreference()
-                        _elem353.read(iprot)
-                        self.success.append(_elem353)
+                    (_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)
@@ -55510,8 +56100,8 @@ class getGroupComputeResourcePrefList_result(object):
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter354 in self.success:
-                iter354.write(oprot)
+            for iter368 in self.success:
+                iter368.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -55662,11 +56252,11 @@ class getGroupBatchQueueResourcePolicyList_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype358, _size355) = iprot.readListBegin()
-                    for _i359 in range(_size355):
-                        _elem360 = airavata.model.appcatalog.groupresourceprofile.ttypes.BatchQueueResourcePolicy()
-                        _elem360.read(iprot)
-                        self.success.append(_elem360)
+                    (_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)
@@ -55707,8 +56297,8 @@ class getGroupBatchQueueResourcePolicyList_result(object):
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter361 in self.success:
-                iter361.write(oprot)
+            for iter375 in self.success:
+                iter375.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -55859,11 +56449,11 @@ class getGroupComputeResourcePolicyList_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.ComputeResourcePolicy()
-                        _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)
@@ -55904,8 +56494,8 @@ class getGroupComputeResourcePolicyList_result(object):
         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:
@@ -56623,11 +57213,11 @@ class listAllParsers_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype372, _size369) = iprot.readListBegin()
-                    for _i373 in range(_size369):
-                        _elem374 = airavata.model.appcatalog.parser.ttypes.Parser()
-                        _elem374.read(iprot)
-                        self.success.append(_elem374)
+                    (_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)
@@ -56668,8 +57258,8 @@ class listAllParsers_result(object):
         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)
+            for iter389 in self.success:
+                iter389.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -57239,11 +57829,11 @@ class getParsingTemplatesForExperiment_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype379, _size376) = iprot.readListBegin()
-                    for _i380 in range(_size376):
-                        _elem381 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
-                        _elem381.read(iprot)
-                        self.success.append(_elem381)
+                    (_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)
@@ -57284,8 +57874,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 iter382 in self.success:
-                iter382.write(oprot)
+            for iter396 in self.success:
+                iter396.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
@@ -57827,11 +58417,11 @@ class listAllParsingTemplates_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype386, _size383) = iprot.readListBegin()
-                    for _i387 in range(_size383):
-                        _elem388 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
-                        _elem388.read(iprot)
-                        self.success.append(_elem388)
+                    (_etype400, _size397) = iprot.readListBegin()
+                    for _i401 in range(_size397):
+                        _elem402 = airavata.model.appcatalog.parser.ttypes.ParsingTemplate()
+                        _elem402.read(iprot)
+                        self.success.append(_elem402)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -57872,8 +58462,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 iter389 in self.success:
-                iter389.write(oprot)
+            for iter403 in self.success:
+                iter403.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.ire is not None:
diff --git a/airavata/api/sharing/SharingRegistryService-remote b/airavata/api/sharing/SharingRegistryService-remote
index 4e45a36..4a0427e 100755
--- a/airavata/api/sharing/SharingRegistryService-remote
+++ b/airavata/api/sharing/SharingRegistryService-remote
@@ -67,7 +67,9 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
     print('  Entity getEntity(string domainId, string entityId)')
     print('   searchEntities(string domainId, string userId,  filters, i32 offset, i32 limit)')
     print('   getListOfSharedUsers(string domainId, string entityId, string permissionTypeId)')
+    print('   getListOfDirectlySharedUsers(string domainId, string entityId, string permissionTypeId)')
     print('   getListOfSharedGroups(string domainId, string entityId, string permissionTypeId)')
+    print('   getListOfDirectlySharedGroups(string domainId, string entityId, string permissionTypeId)')
     print('  string createPermissionType(PermissionType permissionType)')
     print('  bool updatePermissionType(PermissionType permissionType)')
     print('  bool isPermissionExists(string dimainId, string permissionId)')
@@ -416,12 +418,24 @@ elif cmd == 'getListOfSharedUsers':
         sys.exit(1)
     pp.pprint(client.getListOfSharedUsers(args[0], args[1], args[2],))
 
+elif cmd == 'getListOfDirectlySharedUsers':
+    if len(args) != 3:
+        print('getListOfDirectlySharedUsers requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.getListOfDirectlySharedUsers(args[0], args[1], args[2],))
+
 elif cmd == 'getListOfSharedGroups':
     if len(args) != 3:
         print('getListOfSharedGroups requires 3 args')
         sys.exit(1)
     pp.pprint(client.getListOfSharedGroups(args[0], args[1], args[2],))
 
+elif cmd == 'getListOfDirectlySharedGroups':
+    if len(args) != 3:
+        print('getListOfDirectlySharedGroups requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.getListOfDirectlySharedGroups(args[0], args[1], args[2],))
+
 elif cmd == 'createPermissionType':
     if len(args) != 1:
         print('createPermissionType requires 1 args')
diff --git a/airavata/api/sharing/SharingRegistryService.py b/airavata/api/sharing/SharingRegistryService.py
index dd3c22f..1c4f702 100644
--- a/airavata/api/sharing/SharingRegistryService.py
+++ b/airavata/api/sharing/SharingRegistryService.py
@@ -454,6 +454,17 @@ class Iface(object):
         """
         pass
 
+    def getListOfDirectlySharedUsers(self, domainId, entityId, permissionTypeId):
+        """
+        <p>API method to get a list of shared users given the entity id where the sharing type is directly applied</p>
+
+        Parameters:
+         - domainId
+         - entityId
+         - permissionTypeId
+        """
+        pass
+
     def getListOfSharedGroups(self, domainId, entityId, permissionTypeId):
         """
         <p>API method to get a list of shared groups given the entity id</p>
@@ -465,6 +476,17 @@ class Iface(object):
         """
         pass
 
+    def getListOfDirectlySharedGroups(self, domainId, entityId, permissionTypeId):
+        """
+        <p>API method to get a list of directly shared groups given the entity id where the sharing type is directly applied</p>
+
+        Parameters:
+         - domainId
+         - entityId
+         - permissionTypeId
+        """
+        pass
+
     def createPermissionType(self, permissionType):
         """
         <p>API method to create permission type</p>
@@ -2204,6 +2226,45 @@ class Client(Iface):
             raise result.sre
         raise TApplicationException(TApplicationException.MISSING_RESULT, "getListOfSharedUsers failed: unknown result")
 
+    def getListOfDirectlySharedUsers(self, domainId, entityId, permissionTypeId):
+        """
+        <p>API method to get a list of shared users given the entity id where the sharing type is directly applied</p>
+
+        Parameters:
+         - domainId
+         - entityId
+         - permissionTypeId
+        """
+        self.send_getListOfDirectlySharedUsers(domainId, entityId, permissionTypeId)
+        return self.recv_getListOfDirectlySharedUsers()
+
+    def send_getListOfDirectlySharedUsers(self, domainId, entityId, permissionTypeId):
+        self._oprot.writeMessageBegin('getListOfDirectlySharedUsers', TMessageType.CALL, self._seqid)
+        args = getListOfDirectlySharedUsers_args()
+        args.domainId = domainId
+        args.entityId = entityId
+        args.permissionTypeId = permissionTypeId
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getListOfDirectlySharedUsers(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getListOfDirectlySharedUsers_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        if result.sre is not None:
+            raise result.sre
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getListOfDirectlySharedUsers failed: unknown result")
+
     def getListOfSharedGroups(self, domainId, entityId, permissionTypeId):
         """
         <p>API method to get a list of shared groups given the entity id</p>
@@ -2243,6 +2304,45 @@ class Client(Iface):
             raise result.sre
         raise TApplicationException(TApplicationException.MISSING_RESULT, "getListOfSharedGroups failed: unknown result")
 
+    def getListOfDirectlySharedGroups(self, domainId, entityId, permissionTypeId):
+        """
+        <p>API method to get a list of directly shared groups given the entity id where the sharing type is directly applied</p>
+
+        Parameters:
+         - domainId
+         - entityId
+         - permissionTypeId
+        """
+        self.send_getListOfDirectlySharedGroups(domainId, entityId, permissionTypeId)
+        return self.recv_getListOfDirectlySharedGroups()
+
+    def send_getListOfDirectlySharedGroups(self, domainId, entityId, permissionTypeId):
+        self._oprot.writeMessageBegin('getListOfDirectlySharedGroups', TMessageType.CALL, self._seqid)
+        args = getListOfDirectlySharedGroups_args()
+        args.domainId = domainId
+        args.entityId = entityId
+        args.permissionTypeId = permissionTypeId
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getListOfDirectlySharedGroups(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getListOfDirectlySharedGroups_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        if result.sre is not None:
+            raise result.sre
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getListOfDirectlySharedGroups failed: unknown result")
+
     def createPermissionType(self, permissionType):
         """
         <p>API method to create permission type</p>
@@ -2722,7 +2822,9 @@ class Processor(Iface, TProcessor):
         self._processMap["getEntity"] = Processor.process_getEntity
         self._processMap["searchEntities"] = Processor.process_searchEntities
         self._processMap["getListOfSharedUsers"] = Processor.process_getListOfSharedUsers
+        self._processMap["getListOfDirectlySharedUsers"] = Processor.process_getListOfDirectlySharedUsers
         self._processMap["getListOfSharedGroups"] = Processor.process_getListOfSharedGroups
+        self._processMap["getListOfDirectlySharedGroups"] = Processor.process_getListOfDirectlySharedGroups
         self._processMap["createPermissionType"] = Processor.process_createPermissionType
         self._processMap["updatePermissionType"] = Processor.process_updatePermissionType
         self._processMap["isPermissionExists"] = Processor.process_isPermissionExists
@@ -3702,6 +3804,28 @@ class Processor(Iface, TProcessor):
         oprot.writeMessageEnd()
         oprot.trans.flush()
 
+    def process_getListOfDirectlySharedUsers(self, seqid, iprot, oprot):
+        args = getListOfDirectlySharedUsers_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = getListOfDirectlySharedUsers_result()
+        try:
+            result.success = self._handler.getListOfDirectlySharedUsers(args.domainId, args.entityId, args.permissionTypeId)
+            msg_type = TMessageType.REPLY
+        except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+            raise
+        except airavata.model.sharing.ttypes.SharingRegistryException as sre:
+            msg_type = TMessageType.REPLY
+            result.sre = sre
+        except Exception as ex:
+            msg_type = TMessageType.EXCEPTION
+            logging.exception(ex)
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("getListOfDirectlySharedUsers", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
     def process_getListOfSharedGroups(self, seqid, iprot, oprot):
         args = getListOfSharedGroups_args()
         args.read(iprot)
@@ -3724,6 +3848,28 @@ class Processor(Iface, TProcessor):
         oprot.writeMessageEnd()
         oprot.trans.flush()
 
+    def process_getListOfDirectlySharedGroups(self, seqid, iprot, oprot):
+        args = getListOfDirectlySharedGroups_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = getListOfDirectlySharedGroups_result()
+        try:
+            result.success = self._handler.getListOfDirectlySharedGroups(args.domainId, args.entityId, args.permissionTypeId)
+            msg_type = TMessageType.REPLY
+        except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+            raise
+        except airavata.model.sharing.ttypes.SharingRegistryException as sre:
+            msg_type = TMessageType.REPLY
+            result.sre = sre
+        except Exception as ex:
+            msg_type = TMessageType.EXCEPTION
+            logging.exception(ex)
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("getListOfDirectlySharedGroups", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
     def process_createPermissionType(self, seqid, iprot, oprot):
         args = createPermissionType_args()
         args.read(iprot)
@@ -10603,7 +10749,7 @@ class getListOfSharedUsers_result(object):
         return not (self == other)
 
 
-class getListOfSharedGroups_args(object):
+class getListOfDirectlySharedUsers_args(object):
     """
     Attributes:
      - domainId
@@ -10656,7 +10802,7 @@ class getListOfSharedGroups_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('getListOfSharedGroups_args')
+        oprot.writeStructBegin('getListOfDirectlySharedUsers_args')
         if self.domainId is not None:
             oprot.writeFieldBegin('domainId', TType.STRING, 1)
             oprot.writeString(self.domainId.encode('utf-8') if sys.version_info[0] == 2 else self.domainId)
@@ -10693,7 +10839,7 @@ class getListOfSharedGroups_args(object):
         return not (self == other)
 
 
-class getListOfSharedGroups_result(object):
+class getListOfDirectlySharedUsers_result(object):
     """
     Attributes:
      - success
@@ -10701,7 +10847,7 @@ class getListOfSharedGroups_result(object):
     """
 
     thrift_spec = (
-        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.sharing.ttypes.UserGroup, airavata.model.sharing.ttypes.UserGroup.thrift_spec), False), None, ),  # 0
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.sharing.ttypes.User, airavata.model.sharing.ttypes.User.thrift_spec), False), None, ),  # 0
         (1, TType.STRUCT, 'sre', (airavata.model.sharing.ttypes.SharingRegistryException, airavata.model.sharing.ttypes.SharingRegistryException.thrift_spec), None, ),  # 1
     )
 
@@ -10723,7 +10869,7 @@ class getListOfSharedGroups_result(object):
                     self.success = []
                     (_etype108, _size105) = iprot.readListBegin()
                     for _i109 in range(_size105):
-                        _elem110 = airavata.model.sharing.ttypes.UserGroup()
+                        _elem110 = airavata.model.sharing.ttypes.User()
                         _elem110.read(iprot)
                         self.success.append(_elem110)
                     iprot.readListEnd()
@@ -10744,7 +10890,7 @@ class getListOfSharedGroups_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('getListOfSharedGroups_result')
+        oprot.writeStructBegin('getListOfDirectlySharedUsers_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
@@ -10774,6 +10920,348 @@ class getListOfSharedGroups_result(object):
         return not (self == other)
 
 
+class getListOfSharedGroups_args(object):
+    """
+    Attributes:
+     - domainId
+     - entityId
+     - permissionTypeId
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'domainId', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'entityId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'permissionTypeId', 'UTF8', None, ),  # 3
+    )
+
+    def __init__(self, domainId=None, entityId=None, permissionTypeId=None,):
+        self.domainId = domainId
+        self.entityId = entityId
+        self.permissionTypeId = permissionTypeId
+
+    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.domainId = 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.entityId = 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.permissionTypeId = 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('getListOfSharedGroups_args')
+        if self.domainId is not None:
+            oprot.writeFieldBegin('domainId', TType.STRING, 1)
+            oprot.writeString(self.domainId.encode('utf-8') if sys.version_info[0] == 2 else self.domainId)
+            oprot.writeFieldEnd()
+        if self.entityId is not None:
+            oprot.writeFieldBegin('entityId', TType.STRING, 2)
+            oprot.writeString(self.entityId.encode('utf-8') if sys.version_info[0] == 2 else self.entityId)
+            oprot.writeFieldEnd()
+        if self.permissionTypeId is not None:
+            oprot.writeFieldBegin('permissionTypeId', TType.STRING, 3)
+            oprot.writeString(self.permissionTypeId.encode('utf-8') if sys.version_info[0] == 2 else self.permissionTypeId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.domainId is None:
+            raise TProtocolException(message='Required field domainId is unset!')
+        if self.entityId is None:
+            raise TProtocolException(message='Required field entityId is unset!')
+        if self.permissionTypeId is None:
+            raise TProtocolException(message='Required field permissionTypeId 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 getListOfSharedGroups_result(object):
+    """
+    Attributes:
+     - success
+     - sre
+    """
+
+    thrift_spec = (
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.sharing.ttypes.UserGroup, airavata.model.sharing.ttypes.UserGroup.thrift_spec), False), None, ),  # 0
+        (1, TType.STRUCT, 'sre', (airavata.model.sharing.ttypes.SharingRegistryException, airavata.model.sharing.ttypes.SharingRegistryException.thrift_spec), None, ),  # 1
+    )
+
+    def __init__(self, success=None, sre=None,):
+        self.success = success
+        self.sre = sre
+
+    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.LIST:
+                    self.success = []
+                    (_etype115, _size112) = iprot.readListBegin()
+                    for _i116 in range(_size112):
+                        _elem117 = airavata.model.sharing.ttypes.UserGroup()
+                        _elem117.read(iprot)
+                        self.success.append(_elem117)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 1:
+                if ftype == TType.STRUCT:
+                    self.sre = airavata.model.sharing.ttypes.SharingRegistryException()
+                    self.sre.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('getListOfSharedGroups_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter118 in self.success:
+                iter118.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.sre is not None:
+            oprot.writeFieldBegin('sre', TType.STRUCT, 1)
+            self.sre.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 getListOfDirectlySharedGroups_args(object):
+    """
+    Attributes:
+     - domainId
+     - entityId
+     - permissionTypeId
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'domainId', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'entityId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'permissionTypeId', 'UTF8', None, ),  # 3
+    )
+
+    def __init__(self, domainId=None, entityId=None, permissionTypeId=None,):
+        self.domainId = domainId
+        self.entityId = entityId
+        self.permissionTypeId = permissionTypeId
+
+    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.domainId = 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.entityId = 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.permissionTypeId = 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('getListOfDirectlySharedGroups_args')
+        if self.domainId is not None:
+            oprot.writeFieldBegin('domainId', TType.STRING, 1)
+            oprot.writeString(self.domainId.encode('utf-8') if sys.version_info[0] == 2 else self.domainId)
+            oprot.writeFieldEnd()
+        if self.entityId is not None:
+            oprot.writeFieldBegin('entityId', TType.STRING, 2)
+            oprot.writeString(self.entityId.encode('utf-8') if sys.version_info[0] == 2 else self.entityId)
+            oprot.writeFieldEnd()
+        if self.permissionTypeId is not None:
+            oprot.writeFieldBegin('permissionTypeId', TType.STRING, 3)
+            oprot.writeString(self.permissionTypeId.encode('utf-8') if sys.version_info[0] == 2 else self.permissionTypeId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.domainId is None:
+            raise TProtocolException(message='Required field domainId is unset!')
+        if self.entityId is None:
+            raise TProtocolException(message='Required field entityId is unset!')
+        if self.permissionTypeId is None:
+            raise TProtocolException(message='Required field permissionTypeId 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 getListOfDirectlySharedGroups_result(object):
+    """
+    Attributes:
+     - success
+     - sre
+    """
+
+    thrift_spec = (
+        (0, TType.LIST, 'success', (TType.STRUCT, (airavata.model.sharing.ttypes.UserGroup, airavata.model.sharing.ttypes.UserGroup.thrift_spec), False), None, ),  # 0
+        (1, TType.STRUCT, 'sre', (airavata.model.sharing.ttypes.SharingRegistryException, airavata.model.sharing.ttypes.SharingRegistryException.thrift_spec), None, ),  # 1
+    )
+
+    def __init__(self, success=None, sre=None,):
+        self.success = success
+        self.sre = sre
+
+    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.LIST:
+                    self.success = []
+                    (_etype122, _size119) = iprot.readListBegin()
+                    for _i123 in range(_size119):
+                        _elem124 = airavata.model.sharing.ttypes.UserGroup()
+                        _elem124.read(iprot)
+                        self.success.append(_elem124)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 1:
+                if ftype == TType.STRUCT:
+                    self.sre = airavata.model.sharing.ttypes.SharingRegistryException()
+                    self.sre.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('getListOfDirectlySharedGroups_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.LIST, 0)
+            oprot.writeListBegin(TType.STRUCT, len(self.success))
+            for iter125 in self.success:
+                iter125.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.sre is not None:
+            oprot.writeFieldBegin('sre', TType.STRUCT, 1)
+            self.sre.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 createPermissionType_args(object):
     """
     Attributes:
@@ -11620,11 +12108,11 @@ class getPermissionTypes_result(object):
             if fid == 0:
                 if ftype == TType.LIST:
                     self.success = []
-                    (_etype115, _size112) = iprot.readListBegin()
-                    for _i116 in range(_size112):
-                        _elem117 = airavata.model.sharing.ttypes.PermissionType()
-                        _elem117.read(iprot)
-                        self.success.append(_elem117)
+                    (_etype129, _size126) = iprot.readListBegin()
+                    for _i130 in range(_size126):
+                        _elem131 = airavata.model.sharing.ttypes.PermissionType()
+                        _elem131.read(iprot)
+                        self.success.append(_elem131)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -11647,8 +12135,8 @@ class getPermissionTypes_result(object):
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.LIST, 0)
             oprot.writeListBegin(TType.STRUCT, len(self.success))
-            for iter118 in self.success:
-                iter118.write(oprot)
+            for iter132 in self.success:
+                iter132.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.sre is not None:
@@ -11721,10 +12209,10 @@ class shareEntityWithUsers_args(object):
             elif fid == 3:
                 if ftype == TType.LIST:
                     self.userList = []
-                    (_etype122, _size119) = iprot.readListBegin()
-                    for _i123 in range(_size119):
-                        _elem124 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        self.userList.append(_elem124)
+                    (_etype136, _size133) = iprot.readListBegin()
+                    for _i137 in range(_size133):
+                        _elem138 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.userList.append(_elem138)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -11759,8 +12247,8 @@ class shareEntityWithUsers_args(object):
         if self.userList is not None:
             oprot.writeFieldBegin('userList', TType.LIST, 3)
             oprot.writeListBegin(TType.STRING, len(self.userList))
-            for iter125 in self.userList:
-                oprot.writeString(iter125.encode('utf-8') if sys.version_info[0] == 2 else iter125)
+            for iter139 in self.userList:
+                oprot.writeString(iter139.encode('utf-8') if sys.version_info[0] == 2 else iter139)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.permissionTypeId is not None:
@@ -11916,10 +12404,10 @@ class revokeEntitySharingFromUsers_args(object):
             elif fid == 3:
                 if ftype == TType.LIST:
                     self.userList = []
-                    (_etype129, _size126) = iprot.readListBegin()
-                    for _i130 in range(_size126):
-                        _elem131 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        self.userList.append(_elem131)
+                    (_etype143, _size140) = iprot.readListBegin()
+                    for _i144 in range(_size140):
+                        _elem145 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.userList.append(_elem145)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -11949,8 +12437,8 @@ class revokeEntitySharingFromUsers_args(object):
         if self.userList is not None:
             oprot.writeFieldBegin('userList', TType.LIST, 3)
             oprot.writeListBegin(TType.STRING, len(self.userList))
-            for iter132 in self.userList:
-                oprot.writeString(iter132.encode('utf-8') if sys.version_info[0] == 2 else iter132)
+            for iter146 in self.userList:
+                oprot.writeString(iter146.encode('utf-8') if sys.version_info[0] == 2 else iter146)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.permissionTypeId is not None:
@@ -12103,10 +12591,10 @@ class shareEntityWithGroups_args(object):
             elif fid == 3:
                 if ftype == TType.LIST:
                     self.groupList = []
-                    (_etype136, _size133) = iprot.readListBegin()
-                    for _i137 in range(_size133):
-                        _elem138 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        self.groupList.append(_elem138)
+                    (_etype150, _size147) = iprot.readListBegin()
+                    for _i151 in range(_size147):
+                        _elem152 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.groupList.append(_elem152)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -12141,8 +12629,8 @@ class shareEntityWithGroups_args(object):
         if self.groupList is not None:
             oprot.writeFieldBegin('groupList', TType.LIST, 3)
             oprot.writeListBegin(TType.STRING, len(self.groupList))
-            for iter139 in self.groupList:
-                oprot.writeString(iter139.encode('utf-8') if sys.version_info[0] == 2 else iter139)
+            for iter153 in self.groupList:
+                oprot.writeString(iter153.encode('utf-8') if sys.version_info[0] == 2 else iter153)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.permissionTypeId is not None:
@@ -12298,10 +12786,10 @@ class revokeEntitySharingFromGroups_args(object):
             elif fid == 3:
                 if ftype == TType.LIST:
                     self.groupList = []
-                    (_etype143, _size140) = iprot.readListBegin()
-                    for _i144 in range(_size140):
-                        _elem145 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
-                        self.groupList.append(_elem145)
+                    (_etype157, _size154) = iprot.readListBegin()
+                    for _i158 in range(_size154):
+                        _elem159 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.groupList.append(_elem159)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
@@ -12331,8 +12819,8 @@ class revokeEntitySharingFromGroups_args(object):
         if self.groupList is not None:
             oprot.writeFieldBegin('groupList', TType.LIST, 3)
             oprot.writeListBegin(TType.STRING, len(self.groupList))
-            for iter146 in self.groupList:
-                oprot.writeString(iter146.encode('utf-8') if sys.version_info[0] == 2 else iter146)
+            for iter160 in self.groupList:
+                oprot.writeString(iter160.encode('utf-8') if sys.version_info[0] == 2 else iter160)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
         if self.permissionTypeId is not None:
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 40874fe..85c7869 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -903,17 +903,19 @@ class SharedEntityViewSet(mixins.RetrieveModelMixin,
 
     def get_instance(self, lookup_value):
         users = {}
+        # Only load *directly* granted permissions since these are the only
+        # ones that can be edited
         # Load accessible users in order of permission precedence: users that
         # have WRITE permission should also have READ
-        users.update(self._load_accessible_users(
+        users.update(self._load_directly_accessible_users(
             lookup_value, ResourcePermissionType.READ))
-        users.update(self._load_accessible_users(
+        users.update(self._load_directly_accessible_users(
             lookup_value, ResourcePermissionType.WRITE))
-        owner_ids = self._load_accessible_users(lookup_value,
-                                                ResourcePermissionType.OWNER)
+        owner_ids = self._load_directly_accessible_users(
+            lookup_value, ResourcePermissionType.OWNER)
         # Assume that there is one and only one DIRECT owner (there may be one
         # or more INDIRECT cascading owners, which would the owners of the
-        # ancestor entities, but getAllAccessibleUsers does not return
+        # ancestor entities, but getAllDirectlyAccessibleUsers does not return
         # indirectly cascading owners)
         owner_id = list(owner_ids.keys())[0]
         # Remove owner from the users list
@@ -923,9 +925,9 @@ class SharedEntityViewSet(mixins.RetrieveModelMixin,
             user_list.append({'user': self._load_user_profile(user_id),
                               'permissionType': users[user_id]})
         groups = {}
-        groups.update(self._load_accessible_groups(
+        groups.update(self._load_directly_accessible_groups(
             lookup_value, ResourcePermissionType.READ))
-        groups.update(self._load_accessible_groups(
+        groups.update(self._load_directly_accessible_groups(
             lookup_value, ResourcePermissionType.WRITE))
         group_list = []
         for group_id in groups:
@@ -941,6 +943,11 @@ class SharedEntityViewSet(mixins.RetrieveModelMixin,
             self.authz_token, entity_id, permission_type)
         return {user_id: permission_type for user_id in users}
 
+    def _load_directly_accessible_users(self, entity_id, permission_type):
+        users = self.request.airavata_client.getAllDirectlyAccessibleUsers(
+            self.authz_token, entity_id, permission_type)
+        return {user_id: permission_type for user_id in users}
+
     def _load_user_profile(self, user_id):
         user_profile_client = self.request.profile_service['user_profile']
         username = user_id[0:user_id.rindex('@')]
@@ -953,6 +960,11 @@ class SharedEntityViewSet(mixins.RetrieveModelMixin,
             self.authz_token, entity_id, permission_type)
         return {group_id: permission_type for group_id in groups}
 
+    def _load_directly_accessible_groups(self, entity_id, permission_type):
+        groups = self.request.airavata_client.getAllDirectlyAccessibleGroups(
+            self.authz_token, entity_id, permission_type)
+        return {group_id: permission_type for group_id in groups}
+
     def _load_group(self, group_id):
         group_manager_client = self.request.profile_service['group_manager']
         return group_manager_client.getGroup(self.authz_token, group_id)
@@ -1036,6 +1048,46 @@ class SharedEntityViewSet(mixins.RetrieveModelMixin,
         self.perform_update(merged_serializer)
         return Response(merged_serializer.data)
 
+    @detail_route(methods=['get'])
+    def all(self, request, entity_id=None):
+        """Load direct plus indirectly (inherited) shared permissions."""
+        users = {}
+        # Load accessible users in order of permission precedence: users that
+        # have WRITE permission should also have READ
+        users.update(self._load_accessible_users(
+            entity_id, ResourcePermissionType.READ))
+        users.update(self._load_accessible_users(
+            entity_id, ResourcePermissionType.WRITE))
+        owner_ids = self._load_accessible_users(
+            entity_id, ResourcePermissionType.OWNER)
+        # Assume that there is one and only one DIRECT owner (there may be one
+        # or more INDIRECT cascading owners, which would the owners of the
+        # ancestor entities, but getAllAccessibleUsers does not return
+        # indirectly cascading owners)
+        owner_id = list(owner_ids.keys())[0]
+        # Remove owner from the users list
+        del users[owner_id]
+        user_list = []
+        for user_id in users:
+            user_list.append({'user': self._load_user_profile(user_id),
+                              'permissionType': users[user_id]})
+        groups = {}
+        groups.update(self._load_accessible_groups(
+            entity_id, ResourcePermissionType.READ))
+        groups.update(self._load_accessible_groups(
+            entity_id, ResourcePermissionType.WRITE))
+        group_list = []
+        for group_id in groups:
+            group_list.append({'group': self._load_group(group_id),
+                               'permissionType': groups[group_id]})
+        shared_entity = {'entityId': entity_id,
+                         'userPermissions': user_list,
+                         'groupPermissions': group_list,
+                         'owner': self._load_user_profile(owner_id)}
+        serializer = self.serializer_class(
+            shared_entity, context={'request': request})
+        return Response(serializer.data)
+
 
 class CredentialSummaryViewSet(APIBackedViewSet):
     serializer_class = serializers.CredentialSummarySerializer