airavata-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AIRAVATA-2591) Add group roles capabilities to Groups
Date Tue, 28 Nov 2017 21:12:09 GMT

    [ https://issues.apache.org/jira/browse/AIRAVATA-2591?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16269467#comment-16269467 ] 

ASF GitHub Bot commented on AIRAVATA-2591:
------------------------------------------

smarru closed pull request #141: [AIRAVATA-2591]: Add group roles capabilities to Groups
URL: https://github.com/apache/airavata/pull/141
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupAdminEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupAdminEntity.java
new file mode 100644
index 0000000000..26851b34e1
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupAdminEntity.java
@@ -0,0 +1,66 @@
+package org.apache.airavata.sharing.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "GROUP_ADMIN", schema = "")
+@IdClass(GroupAdminPK.class)
+public class GroupAdminEntity {
+    private final static Logger logger = LoggerFactory.getLogger(GroupAdminEntity.class);
+    private String groupId;
+    private String domainId;
+    private String adminId;
+
+    @Id
+    @Column(name = "GROUP_ID")
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
+    @Id
+    @Column(name = "ADMIN_ID")
+    public String getAdminId() {
+        return adminId;
+    }
+
+    public void setAdminId(String adminId) {
+        this.adminId = adminId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        GroupAdminEntity that = (GroupAdminEntity) o;
+
+        if (!getGroupId().equals(that.getGroupId())) return false;
+        if (!getDomainId().equals(that.getDomainId())) return false;
+        return getAdminId().equals(that.getAdminId());
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getGroupId().hashCode();
+        result = 31 * result + getDomainId().hashCode();
+        result = 31 * result + getAdminId().hashCode();
+        return result;
+    }
+}
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupAdminPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupAdminPK.java
new file mode 100644
index 0000000000..37be99184f
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupAdminPK.java
@@ -0,0 +1,66 @@
+package org.apache.airavata.sharing.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class GroupAdminPK implements Serializable{
+
+    private final static Logger logger = LoggerFactory.getLogger(GroupAdminPK.class);
+    private String groupId;
+    private String domainId;
+    private String adminId;
+
+    @Id
+    @Column(name = "GROUP_ID")
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
+    @Id
+    @Column(name = "ADMIN_ID")
+    public String getAdminId() {
+        return adminId;
+    }
+
+    public void setAdminId(String adminId) {
+        this.adminId = adminId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        GroupAdminPK groupAdminPK = (GroupAdminPK) o;
+
+        if (!getGroupId().equals(groupAdminPK.getGroupId())) return false;
+        if (!getDomainId().equals(groupAdminPK.getDomainId())) return false;
+        return getAdminId().equals(groupAdminPK.getAdminId());
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getGroupId().hashCode();
+        result = 31 * result + getDomainId().hashCode();
+        result = 31 * result + getAdminId().hashCode();
+        return result;
+    }
+}
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupOwnerEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupOwnerEntity.java
new file mode 100644
index 0000000000..5a15ee5f20
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupOwnerEntity.java
@@ -0,0 +1,64 @@
+package org.apache.airavata.sharing.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "GROUP_OWNER", schema = "")
+@IdClass(GroupOwnerPK.class)
+public class GroupOwnerEntity {
+    private final static Logger logger = LoggerFactory.getLogger(GroupOwnerEntity.class);
+    private String groupId;
+    private String domainId;
+    private String ownerId;
+
+    @Column(name = "GROUP_ID")
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+    @Id
+    @Column(name = "OWNER_ID")
+    public String getOwnerId() {
+        return ownerId;
+    }
+
+    public void setOwnerId(String ownerId) {
+        this.ownerId = ownerId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        GroupOwnerEntity that = (GroupOwnerEntity) o;
+
+        if (!getGroupId().equals(that.getGroupId())) return false;
+        if (!getDomainId().equals(that.getDomainId())) return false;
+        return getOwnerId().equals(that.getOwnerId());
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getGroupId().hashCode();
+        result = 31 * result + getDomainId().hashCode();
+        result = 31 * result + getOwnerId().hashCode();
+        return result;
+    }
+}
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupOwnerPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupOwnerPK.java
new file mode 100644
index 0000000000..365e9e0fe6
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupOwnerPK.java
@@ -0,0 +1,53 @@
+package org.apache.airavata.sharing.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class GroupOwnerPK implements Serializable{
+
+    private final static Logger logger = LoggerFactory.getLogger(GroupOwnerPK.class);
+    private String ownerId;
+    private String domainId;
+
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
+    @Id
+    @Column(name = "OWNER_ID")
+    public String getOwnerId() {
+        return ownerId;
+    }
+
+    public void setOwnerId(String ownerId) {
+        this.ownerId = ownerId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        GroupOwnerPK groupOwnerPK = (GroupOwnerPK) o;
+
+        if (!getOwnerId().equals(groupOwnerPK.getOwnerId())) return false;
+        return getDomainId().equals(groupOwnerPK.getDomainId());
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getOwnerId().hashCode();
+        result = 31 * result + getDomainId().hashCode();
+        return result;
+    }
+}
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupAdminRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupAdminRepository.java
new file mode 100644
index 0000000000..62c56e51e2
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupAdminRepository.java
@@ -0,0 +1,17 @@
+package org.apache.airavata.sharing.registry.db.repositories;
+
+import org.apache.airavata.sharing.registry.db.entities.GroupAdminEntity;
+import org.apache.airavata.sharing.registry.db.entities.GroupAdminPK;
+import org.apache.airavata.sharing.registry.models.GroupAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GroupAdminRepository extends AbstractRepository<GroupAdmin, GroupAdminEntity, GroupAdminPK> {
+
+    private final static Logger logger = LoggerFactory.getLogger(GroupAdminRepository.class);
+
+    public GroupAdminRepository() {
+        super(GroupAdmin.class, GroupAdminEntity.class);
+    }
+
+}
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupOwnerRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupOwnerRepository.java
new file mode 100644
index 0000000000..e3a809c149
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupOwnerRepository.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.sharing.registry.db.repositories;
+
+import org.apache.airavata.sharing.registry.db.entities.GroupOwnerEntity;
+import org.apache.airavata.sharing.registry.db.entities.GroupOwnerPK;
+import org.apache.airavata.sharing.registry.models.GroupOwner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GroupOwnerRepository extends AbstractRepository<GroupOwner, GroupOwnerEntity, GroupOwnerPK>{
+
+    private final static Logger logger = LoggerFactory.getLogger(GroupOwnerRepository.class);
+
+    public GroupOwnerRepository() {
+        super(GroupOwner.class, GroupOwnerEntity.class);
+    }
+}
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java
index eea12a3223..60f5786f24 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java
@@ -406,6 +406,133 @@ public boolean removeUsersFromGroup(String domainId, List<String> userIds, Strin
         }
     }
 
+    @Override
+    public boolean transferGroupOwnership(String domainId, String groupId, String newOwnerId) throws SharingRegistryException, TException {
+        try {
+            if (hasOwnerAccess(domainId, groupId, newOwnerId)) {
+                throw new DuplicateEntryException("User already the current owner of the group");
+            }
+            // remove the new owner as Admin if present
+            if (hasAdminAccess(domainId, groupId, newOwnerId)) {
+                removeGroupAdmins(domainId, groupId, Arrays.asList(newOwnerId));
+            }
+
+            UserGroupPK userGroupPK = new UserGroupPK();
+            userGroupPK.setGroupId(groupId);
+            userGroupPK.setDomainId(domainId);
+            UserGroup userGroup = (new UserGroupRepository()).get(userGroupPK);
+            String currentOwnerId = userGroup.getOwnerId();
+            UserGroup newUserGroup = new UserGroup();
+            newUserGroup.setUpdatedTime(System.currentTimeMillis());
+            newUserGroup.setOwnerId(newOwnerId);
+            newUserGroup.setGroupCardinality(GroupCardinality.MULTI_USER);
+            newUserGroup.setCreatedTime(userGroup.createdTime);
+            newUserGroup = getUpdatedObject(userGroup, newUserGroup);
+
+            (new UserGroupRepository()).update(newUserGroup);
+
+            GroupOwnerPK groupOwnerPK = new GroupOwnerPK();
+            groupOwnerPK.setDomainId(domainId);
+            groupOwnerPK.setOwnerId(currentOwnerId);
+            GroupOwner currentOwner = (new GroupOwnerRepository()).get(groupOwnerPK);
+            GroupOwner newOwner = new GroupOwner();
+            newOwner.setDomainId(domainId);
+            newOwner.setOwnerId(newOwnerId);
+            newOwner.setGroupId(groupId);
+            newOwner = getUpdatedObject(currentOwner, newOwner);
+
+            (new GroupOwnerRepository()).update(newOwner);
+            return true;
+        }
+        catch (Throwable ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new SharingRegistryException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+        }
+    }
+
+    @Override
+    public boolean addGroupAdmins(String domainId, String groupId, List<String> adminIds) throws SharingRegistryException, TException {
+        try{
+            for (String adminId: adminIds) {
+                GroupAdminPK groupAdminPK = new GroupAdminPK();
+                groupAdminPK.setGroupId(groupId);
+                groupAdminPK.setAdminId(adminId);
+                groupAdminPK.setDomainId(domainId);
+
+                if((new GroupAdminRepository()).get(groupAdminPK) != null)
+                    throw new DuplicateEntryException("User already an admin for the group");
+
+                GroupAdmin admin = new GroupAdmin();
+                admin.setAdminId(adminId);
+                admin.setDomainId(domainId);
+                admin.setGroupId(groupId);
+                (new GroupAdminRepository()).create(admin);
+            }
+            return true;
+        }
+        catch (Throwable ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new SharingRegistryException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+        }
+    }
+
+    @Override
+    public boolean removeGroupAdmins(String domainId, String groupId, List<String> adminIds) throws SharingRegistryException, TException {
+        try {
+            for (String adminId: adminIds) {
+                GroupAdminPK groupAdminPK = new GroupAdminPK();
+                groupAdminPK.setAdminId(adminId);
+                groupAdminPK.setDomainId(domainId);
+                groupAdminPK.setGroupId(groupId);
+                (new GroupAdminRepository()).delete(groupAdminPK);
+            }
+            return true;
+        }
+        catch (Throwable ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new SharingRegistryException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+        }
+    }
+
+    @Override
+    public boolean hasAdminAccess(String domainId, String groupId, String adminId) throws SharingRegistryException, TException {
+        try{
+            GroupAdminPK groupAdminPK = new GroupAdminPK();
+            groupAdminPK.setGroupId(groupId);
+            groupAdminPK.setAdminId(adminId);
+            groupAdminPK.setDomainId(domainId);
+
+            if((new GroupAdminRepository()).get(groupAdminPK) != null)
+                return true;
+            return false;
+        }
+        catch (Throwable ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new SharingRegistryException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+        }
+    }
+
+    @Override
+    public boolean hasOwnerAccess(String domainId, String groupId, String ownerId) throws SharingRegistryException, TException {
+        try {
+            GroupOwnerPK groupOwnerPK = new GroupOwnerPK();
+            groupOwnerPK.setDomainId(domainId);
+            groupOwnerPK.setOwnerId(ownerId);
+
+            GroupOwner owner = (new GroupOwnerRepository()).get(groupOwnerPK);
+            if (owner != null) {
+                if (owner.groupId.equals(groupId)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        catch (Throwable ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new SharingRegistryException().setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
+        }
+    }
+
     @Override
     public List<User> getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit) throws SharingRegistryException, TException {
         try{
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/utils/ThriftDataModelConversion.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/utils/ThriftDataModelConversion.java
index 99db7f1369..adef4e7189 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/utils/ThriftDataModelConversion.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/utils/ThriftDataModelConversion.java
@@ -1,10 +1,8 @@
 package org.apache.airavata.sharing.registry.utils;
 
 import org.apache.airavata.model.user.UserProfile;
-import org.apache.airavata.sharing.registry.db.entities.UserPK;
 import org.apache.airavata.sharing.registry.models.User;
 
-import java.util.Date;
 
 /**
  * Created by Ajinkya on 3/29/17.
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml b/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml
index a9f808c180..c650e59650 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml
+++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml
@@ -10,6 +10,8 @@
         <class>org.apache.airavata.sharing.registry.db.entities.PermissionTypeEntity</class>
         <class>org.apache.airavata.sharing.registry.db.entities.SharingEntity</class>
         <class>org.apache.airavata.sharing.registry.db.entities.UserEntity</class>
+        <class>org.apache.airavata.sharing.registry.db.entities.GroupAdminEntity</class>
+        <class>org.apache.airavata.sharing.registry.db.entities.GroupOwnerEntity</class>
         <class>org.apache.airavata.sharing.registry.db.entities.UserGroupEntity</class>
     </persistence-unit>
 </persistence>
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql
index 5897b3b4aa..a4d8676aae 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql
+++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql
@@ -42,6 +42,22 @@ CREATE TABLE SHARING_USER (
   FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
+CREATE TABLE GROUP_OWNER (
+  OWNER_ID VARCHAR(255) NOT NULL,
+  GROUP_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR(255) NOT NULL,
+  PRIMARY KEY (OWNER_ID, DOMAIN_ID),
+  FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+);
+
+CREATE TABLE GROUP_ADMIN (
+  ADMIN_ID VARCHAR(255) NOT NULL,
+  GROUP_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR(255) NOT NULL,
+  PRIMARY KEY (ADMIN_ID, GROUP_ID, DOMAIN_ID),
+  FOREIGN KEY (ADMIN_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+);
+
 CREATE TABLE USER_GROUP (
   GROUP_ID VARCHAR(255) NOT NULL,
   DOMAIN_ID VARCHAR(255) NOT NULL,
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql
index 09830a04a7..2e05cb64ca 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql
+++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql
@@ -56,6 +56,21 @@ CREATE TABLE USER_GROUP (
   FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 )ENGINE=InnoDB DEFAULT CHARACTER SET=latin1;
 
+CREATE TABLE GROUP_OWNER (
+  OWNER_ID VARCHAR(255) NOT NULL,
+  GROUP_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR(255) NOT NULL,
+  PRIMARY KEY (OWNER_ID, DOMAIN_ID),
+  FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+)ENGINE=InnoDB DEFAULT CHARACTER SET=latin1;
+
+CREATE TABLE GROUP_ADMIN (
+  ADMIN_ID VARCHAR(255) NOT NULL,
+  GROUP_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR(255) NOT NULL,
+  PRIMARY KEY (ADMIN_ID, GROUP_ID, DOMAIN_ID),
+  FOREIGN KEY (ADMIN_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+)ENGINE=InnoDB DEFAULT CHARACTER SET=latin1;
 
 CREATE TABLE GROUP_MEMBERSHIP (
   PARENT_ID VARCHAR(255) NOT NULL,
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupAdmin.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupAdmin.java
new file mode 100644
index 0000000000..e4cf404997
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupAdmin.java
@@ -0,0 +1,582 @@
+/**
+ * Autogenerated by Thrift Compiler (1.0.0-dev)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.airavata.sharing.registry.models;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (1.0.0-dev)")
+public class GroupAdmin implements org.apache.thrift.TBase<GroupAdmin, GroupAdmin._Fields>, java.io.Serializable, Cloneable, Comparable<GroupAdmin> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("GroupAdmin");
+
+  private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField ADMIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("adminId", org.apache.thrift.protocol.TType.STRING, (short)3);
+
+  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new GroupAdminStandardSchemeFactory();
+  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new GroupAdminTupleSchemeFactory();
+
+  public java.lang.String groupId; // optional
+  public java.lang.String domainId; // optional
+  public java.lang.String adminId; // optional
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    GROUP_ID((short)1, "groupId"),
+    DOMAIN_ID((short)2, "domainId"),
+    ADMIN_ID((short)3, "adminId");
+
+    private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+    static {
+      for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // GROUP_ID
+          return GROUP_ID;
+        case 2: // DOMAIN_ID
+          return DOMAIN_ID;
+        case 3: // ADMIN_ID
+          return ADMIN_ID;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(java.lang.String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final java.lang.String _fieldName;
+
+    _Fields(short thriftId, java.lang.String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public java.lang.String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final _Fields optionals[] = {_Fields.GROUP_ID,_Fields.DOMAIN_ID,_Fields.ADMIN_ID};
+  public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.ADMIN_ID, new org.apache.thrift.meta_data.FieldMetaData("adminId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(GroupAdmin.class, metaDataMap);
+  }
+
+  public GroupAdmin() {
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public GroupAdmin(GroupAdmin other) {
+    if (other.isSetGroupId()) {
+      this.groupId = other.groupId;
+    }
+    if (other.isSetDomainId()) {
+      this.domainId = other.domainId;
+    }
+    if (other.isSetAdminId()) {
+      this.adminId = other.adminId;
+    }
+  }
+
+  public GroupAdmin deepCopy() {
+    return new GroupAdmin(this);
+  }
+
+  @Override
+  public void clear() {
+    this.groupId = null;
+    this.domainId = null;
+    this.adminId = null;
+  }
+
+  public java.lang.String getGroupId() {
+    return this.groupId;
+  }
+
+  public GroupAdmin setGroupId(java.lang.String groupId) {
+    this.groupId = groupId;
+    return this;
+  }
+
+  public void unsetGroupId() {
+    this.groupId = null;
+  }
+
+  /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+  public boolean isSetGroupId() {
+    return this.groupId != null;
+  }
+
+  public void setGroupIdIsSet(boolean value) {
+    if (!value) {
+      this.groupId = null;
+    }
+  }
+
+  public java.lang.String getDomainId() {
+    return this.domainId;
+  }
+
+  public GroupAdmin setDomainId(java.lang.String domainId) {
+    this.domainId = domainId;
+    return this;
+  }
+
+  public void unsetDomainId() {
+    this.domainId = null;
+  }
+
+  /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+  public boolean isSetDomainId() {
+    return this.domainId != null;
+  }
+
+  public void setDomainIdIsSet(boolean value) {
+    if (!value) {
+      this.domainId = null;
+    }
+  }
+
+  public java.lang.String getAdminId() {
+    return this.adminId;
+  }
+
+  public GroupAdmin setAdminId(java.lang.String adminId) {
+    this.adminId = adminId;
+    return this;
+  }
+
+  public void unsetAdminId() {
+    this.adminId = null;
+  }
+
+  /** Returns true if field adminId is set (has been assigned a value) and false otherwise */
+  public boolean isSetAdminId() {
+    return this.adminId != null;
+  }
+
+  public void setAdminIdIsSet(boolean value) {
+    if (!value) {
+      this.adminId = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, java.lang.Object value) {
+    switch (field) {
+    case GROUP_ID:
+      if (value == null) {
+        unsetGroupId();
+      } else {
+        setGroupId((java.lang.String)value);
+      }
+      break;
+
+    case DOMAIN_ID:
+      if (value == null) {
+        unsetDomainId();
+      } else {
+        setDomainId((java.lang.String)value);
+      }
+      break;
+
+    case ADMIN_ID:
+      if (value == null) {
+        unsetAdminId();
+      } else {
+        setAdminId((java.lang.String)value);
+      }
+      break;
+
+    }
+  }
+
+  public java.lang.Object getFieldValue(_Fields field) {
+    switch (field) {
+    case GROUP_ID:
+      return getGroupId();
+
+    case DOMAIN_ID:
+      return getDomainId();
+
+    case ADMIN_ID:
+      return getAdminId();
+
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new java.lang.IllegalArgumentException();
+    }
+
+    switch (field) {
+    case GROUP_ID:
+      return isSetGroupId();
+    case DOMAIN_ID:
+      return isSetDomainId();
+    case ADMIN_ID:
+      return isSetAdminId();
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(java.lang.Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof GroupAdmin)
+      return this.equals((GroupAdmin)that);
+    return false;
+  }
+
+  public boolean equals(GroupAdmin that) {
+    if (that == null)
+      return false;
+    if (this == that)
+      return true;
+
+    boolean this_present_groupId = true && this.isSetGroupId();
+    boolean that_present_groupId = true && that.isSetGroupId();
+    if (this_present_groupId || that_present_groupId) {
+      if (!(this_present_groupId && that_present_groupId))
+        return false;
+      if (!this.groupId.equals(that.groupId))
+        return false;
+    }
+
+    boolean this_present_domainId = true && this.isSetDomainId();
+    boolean that_present_domainId = true && that.isSetDomainId();
+    if (this_present_domainId || that_present_domainId) {
+      if (!(this_present_domainId && that_present_domainId))
+        return false;
+      if (!this.domainId.equals(that.domainId))
+        return false;
+    }
+
+    boolean this_present_adminId = true && this.isSetAdminId();
+    boolean that_present_adminId = true && that.isSetAdminId();
+    if (this_present_adminId || that_present_adminId) {
+      if (!(this_present_adminId && that_present_adminId))
+        return false;
+      if (!this.adminId.equals(that.adminId))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int hashCode = 1;
+
+    hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+    if (isSetGroupId())
+      hashCode = hashCode * 8191 + groupId.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+    if (isSetDomainId())
+      hashCode = hashCode * 8191 + domainId.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetAdminId()) ? 131071 : 524287);
+    if (isSetAdminId())
+      hashCode = hashCode * 8191 + adminId.hashCode();
+
+    return hashCode;
+  }
+
+  @Override
+  public int compareTo(GroupAdmin other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetGroupId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetDomainId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetAdminId()).compareTo(other.isSetAdminId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetAdminId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.adminId, other.adminId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    scheme(iprot).read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    scheme(oprot).write(oprot, this);
+  }
+
+  @Override
+  public java.lang.String toString() {
+    java.lang.StringBuilder sb = new java.lang.StringBuilder("GroupAdmin(");
+    boolean first = true;
+
+    if (isSetGroupId()) {
+      sb.append("groupId:");
+      if (this.groupId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.groupId);
+      }
+      first = false;
+    }
+    if (isSetDomainId()) {
+      if (!first) sb.append(", ");
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+    }
+    if (isSetAdminId()) {
+      if (!first) sb.append(", ");
+      sb.append("adminId:");
+      if (this.adminId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.adminId);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class GroupAdminStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public GroupAdminStandardScheme getScheme() {
+      return new GroupAdminStandardScheme();
+    }
+  }
+
+  private static class GroupAdminStandardScheme extends org.apache.thrift.scheme.StandardScheme<GroupAdmin> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, GroupAdmin struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // GROUP_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.groupId = iprot.readString();
+              struct.setGroupIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // DOMAIN_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.domainId = iprot.readString();
+              struct.setDomainIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // ADMIN_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.adminId = iprot.readString();
+              struct.setAdminIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, GroupAdmin struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.groupId != null) {
+        if (struct.isSetGroupId()) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.domainId != null) {
+        if (struct.isSetDomainId()) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.adminId != null) {
+        if (struct.isSetAdminId()) {
+          oprot.writeFieldBegin(ADMIN_ID_FIELD_DESC);
+          oprot.writeString(struct.adminId);
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class GroupAdminTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public GroupAdminTupleScheme getScheme() {
+      return new GroupAdminTupleScheme();
+    }
+  }
+
+  private static class GroupAdminTupleScheme extends org.apache.thrift.scheme.TupleScheme<GroupAdmin> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, GroupAdmin struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      java.util.BitSet optionals = new java.util.BitSet();
+      if (struct.isSetGroupId()) {
+        optionals.set(0);
+      }
+      if (struct.isSetDomainId()) {
+        optionals.set(1);
+      }
+      if (struct.isSetAdminId()) {
+        optionals.set(2);
+      }
+      oprot.writeBitSet(optionals, 3);
+      if (struct.isSetGroupId()) {
+        oprot.writeString(struct.groupId);
+      }
+      if (struct.isSetDomainId()) {
+        oprot.writeString(struct.domainId);
+      }
+      if (struct.isSetAdminId()) {
+        oprot.writeString(struct.adminId);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, GroupAdmin struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      java.util.BitSet incoming = iprot.readBitSet(3);
+      if (incoming.get(0)) {
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.adminId = iprot.readString();
+        struct.setAdminIdIsSet(true);
+      }
+    }
+  }
+
+  private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+    return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+  }
+}
+
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupOwner.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupOwner.java
new file mode 100644
index 0000000000..3c0811b557
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupOwner.java
@@ -0,0 +1,582 @@
+/**
+ * Autogenerated by Thrift Compiler (1.0.0-dev)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.airavata.sharing.registry.models;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (1.0.0-dev)")
+public class GroupOwner implements org.apache.thrift.TBase<GroupOwner, GroupOwner._Fields>, java.io.Serializable, Cloneable, Comparable<GroupOwner> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("GroupOwner");
+
+  private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField OWNER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("ownerId", org.apache.thrift.protocol.TType.STRING, (short)3);
+
+  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new GroupOwnerStandardSchemeFactory();
+  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new GroupOwnerTupleSchemeFactory();
+
+  public java.lang.String groupId; // optional
+  public java.lang.String domainId; // optional
+  public java.lang.String ownerId; // optional
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    GROUP_ID((short)1, "groupId"),
+    DOMAIN_ID((short)2, "domainId"),
+    OWNER_ID((short)3, "ownerId");
+
+    private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+    static {
+      for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // GROUP_ID
+          return GROUP_ID;
+        case 2: // DOMAIN_ID
+          return DOMAIN_ID;
+        case 3: // OWNER_ID
+          return OWNER_ID;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(java.lang.String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final java.lang.String _fieldName;
+
+    _Fields(short thriftId, java.lang.String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public java.lang.String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final _Fields optionals[] = {_Fields.GROUP_ID,_Fields.DOMAIN_ID,_Fields.OWNER_ID};
+  public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.OWNER_ID, new org.apache.thrift.meta_data.FieldMetaData("ownerId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(GroupOwner.class, metaDataMap);
+  }
+
+  public GroupOwner() {
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public GroupOwner(GroupOwner other) {
+    if (other.isSetGroupId()) {
+      this.groupId = other.groupId;
+    }
+    if (other.isSetDomainId()) {
+      this.domainId = other.domainId;
+    }
+    if (other.isSetOwnerId()) {
+      this.ownerId = other.ownerId;
+    }
+  }
+
+  public GroupOwner deepCopy() {
+    return new GroupOwner(this);
+  }
+
+  @Override
+  public void clear() {
+    this.groupId = null;
+    this.domainId = null;
+    this.ownerId = null;
+  }
+
+  public java.lang.String getGroupId() {
+    return this.groupId;
+  }
+
+  public GroupOwner setGroupId(java.lang.String groupId) {
+    this.groupId = groupId;
+    return this;
+  }
+
+  public void unsetGroupId() {
+    this.groupId = null;
+  }
+
+  /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+  public boolean isSetGroupId() {
+    return this.groupId != null;
+  }
+
+  public void setGroupIdIsSet(boolean value) {
+    if (!value) {
+      this.groupId = null;
+    }
+  }
+
+  public java.lang.String getDomainId() {
+    return this.domainId;
+  }
+
+  public GroupOwner setDomainId(java.lang.String domainId) {
+    this.domainId = domainId;
+    return this;
+  }
+
+  public void unsetDomainId() {
+    this.domainId = null;
+  }
+
+  /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+  public boolean isSetDomainId() {
+    return this.domainId != null;
+  }
+
+  public void setDomainIdIsSet(boolean value) {
+    if (!value) {
+      this.domainId = null;
+    }
+  }
+
+  public java.lang.String getOwnerId() {
+    return this.ownerId;
+  }
+
+  public GroupOwner setOwnerId(java.lang.String ownerId) {
+    this.ownerId = ownerId;
+    return this;
+  }
+
+  public void unsetOwnerId() {
+    this.ownerId = null;
+  }
+
+  /** Returns true if field ownerId is set (has been assigned a value) and false otherwise */
+  public boolean isSetOwnerId() {
+    return this.ownerId != null;
+  }
+
+  public void setOwnerIdIsSet(boolean value) {
+    if (!value) {
+      this.ownerId = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, java.lang.Object value) {
+    switch (field) {
+    case GROUP_ID:
+      if (value == null) {
+        unsetGroupId();
+      } else {
+        setGroupId((java.lang.String)value);
+      }
+      break;
+
+    case DOMAIN_ID:
+      if (value == null) {
+        unsetDomainId();
+      } else {
+        setDomainId((java.lang.String)value);
+      }
+      break;
+
+    case OWNER_ID:
+      if (value == null) {
+        unsetOwnerId();
+      } else {
+        setOwnerId((java.lang.String)value);
+      }
+      break;
+
+    }
+  }
+
+  public java.lang.Object getFieldValue(_Fields field) {
+    switch (field) {
+    case GROUP_ID:
+      return getGroupId();
+
+    case DOMAIN_ID:
+      return getDomainId();
+
+    case OWNER_ID:
+      return getOwnerId();
+
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new java.lang.IllegalArgumentException();
+    }
+
+    switch (field) {
+    case GROUP_ID:
+      return isSetGroupId();
+    case DOMAIN_ID:
+      return isSetDomainId();
+    case OWNER_ID:
+      return isSetOwnerId();
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(java.lang.Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof GroupOwner)
+      return this.equals((GroupOwner)that);
+    return false;
+  }
+
+  public boolean equals(GroupOwner that) {
+    if (that == null)
+      return false;
+    if (this == that)
+      return true;
+
+    boolean this_present_groupId = true && this.isSetGroupId();
+    boolean that_present_groupId = true && that.isSetGroupId();
+    if (this_present_groupId || that_present_groupId) {
+      if (!(this_present_groupId && that_present_groupId))
+        return false;
+      if (!this.groupId.equals(that.groupId))
+        return false;
+    }
+
+    boolean this_present_domainId = true && this.isSetDomainId();
+    boolean that_present_domainId = true && that.isSetDomainId();
+    if (this_present_domainId || that_present_domainId) {
+      if (!(this_present_domainId && that_present_domainId))
+        return false;
+      if (!this.domainId.equals(that.domainId))
+        return false;
+    }
+
+    boolean this_present_ownerId = true && this.isSetOwnerId();
+    boolean that_present_ownerId = true && that.isSetOwnerId();
+    if (this_present_ownerId || that_present_ownerId) {
+      if (!(this_present_ownerId && that_present_ownerId))
+        return false;
+      if (!this.ownerId.equals(that.ownerId))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int hashCode = 1;
+
+    hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+    if (isSetGroupId())
+      hashCode = hashCode * 8191 + groupId.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+    if (isSetDomainId())
+      hashCode = hashCode * 8191 + domainId.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetOwnerId()) ? 131071 : 524287);
+    if (isSetOwnerId())
+      hashCode = hashCode * 8191 + ownerId.hashCode();
+
+    return hashCode;
+  }
+
+  @Override
+  public int compareTo(GroupOwner other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetGroupId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetDomainId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetOwnerId()).compareTo(other.isSetOwnerId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetOwnerId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ownerId, other.ownerId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    scheme(iprot).read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    scheme(oprot).write(oprot, this);
+  }
+
+  @Override
+  public java.lang.String toString() {
+    java.lang.StringBuilder sb = new java.lang.StringBuilder("GroupOwner(");
+    boolean first = true;
+
+    if (isSetGroupId()) {
+      sb.append("groupId:");
+      if (this.groupId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.groupId);
+      }
+      first = false;
+    }
+    if (isSetDomainId()) {
+      if (!first) sb.append(", ");
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+    }
+    if (isSetOwnerId()) {
+      if (!first) sb.append(", ");
+      sb.append("ownerId:");
+      if (this.ownerId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ownerId);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class GroupOwnerStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public GroupOwnerStandardScheme getScheme() {
+      return new GroupOwnerStandardScheme();
+    }
+  }
+
+  private static class GroupOwnerStandardScheme extends org.apache.thrift.scheme.StandardScheme<GroupOwner> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, GroupOwner struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // GROUP_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.groupId = iprot.readString();
+              struct.setGroupIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // DOMAIN_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.domainId = iprot.readString();
+              struct.setDomainIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // OWNER_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.ownerId = iprot.readString();
+              struct.setOwnerIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, GroupOwner struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.groupId != null) {
+        if (struct.isSetGroupId()) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.domainId != null) {
+        if (struct.isSetDomainId()) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.ownerId != null) {
+        if (struct.isSetOwnerId()) {
+          oprot.writeFieldBegin(OWNER_ID_FIELD_DESC);
+          oprot.writeString(struct.ownerId);
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class GroupOwnerTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public GroupOwnerTupleScheme getScheme() {
+      return new GroupOwnerTupleScheme();
+    }
+  }
+
+  private static class GroupOwnerTupleScheme extends org.apache.thrift.scheme.TupleScheme<GroupOwner> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, GroupOwner struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      java.util.BitSet optionals = new java.util.BitSet();
+      if (struct.isSetGroupId()) {
+        optionals.set(0);
+      }
+      if (struct.isSetDomainId()) {
+        optionals.set(1);
+      }
+      if (struct.isSetOwnerId()) {
+        optionals.set(2);
+      }
+      oprot.writeBitSet(optionals, 3);
+      if (struct.isSetGroupId()) {
+        oprot.writeString(struct.groupId);
+      }
+      if (struct.isSetDomainId()) {
+        oprot.writeString(struct.domainId);
+      }
+      if (struct.isSetOwnerId()) {
+        oprot.writeString(struct.ownerId);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, GroupOwner struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      java.util.BitSet incoming = iprot.readBitSet(3);
+      if (incoming.get(0)) {
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.ownerId = iprot.readString();
+        struct.setOwnerIdIsSet(true);
+      }
+    }
+  }
+
+  private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+    return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+  }
+}
+
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java
index 4e59a5084a..f0e876ed8e 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.10.0)
+ * Autogenerated by Thrift Compiler (1.0.0-dev)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.airavata.sharing.registry.service.cpi;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.10.0)")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (1.0.0-dev)")
 public class SharingRegistryService {
 
   public interface Iface {
@@ -170,6 +170,51 @@
      */
     public boolean removeUsersFromGroup(java.lang.String domainId, java.util.List<java.lang.String> userIds, java.lang.String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
+    /**
+     * <p>API method to transfer group ownership</p>
+     * 
+     * @param domainId
+     * @param groupId
+     * @param newOwnerId
+     */
+    public boolean transferGroupOwnership(java.lang.String domainId, java.lang.String groupId, java.lang.String newOwnerId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+
+    /**
+     * <p>API method to add Admin for a group</p>
+     * 
+     * @param domainId
+     * @param groupId
+     * @param adminIds
+     */
+    public boolean addGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+
+    /**
+     * <p>API method to remove Admin for a group</p>
+     * 
+     * @param domainId
+     * @param groupId
+     * @param adminIds
+     */
+    public boolean removeGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+
+    /**
+     * <p>API method to check whether the user has Admin access for the group</p>
+     * 
+     * @param domainId
+     * @param groupId
+     * @param adminId
+     */
+    public boolean hasAdminAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String adminId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+
+    /**
+     * <p>API method to check whether the user has Admin access for the group</p>
+     * 
+     * @param domainId
+     * @param groupId
+     * @param ownerId
+     */
+    public boolean hasOwnerAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String ownerId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+
     /**
      * <p>API method to get list of child users in a group. Only the direct members will be returned.</p>
      * 
@@ -467,6 +512,16 @@
 
     public void removeUsersFromGroup(java.lang.String domainId, java.util.List<java.lang.String> userIds, java.lang.String groupId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
 
+    public void transferGroupOwnership(java.lang.String domainId, java.lang.String groupId, java.lang.String newOwnerId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
+
+    public void addGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
+
+    public void removeGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
+
+    public void hasAdminAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String adminId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
+
+    public void hasOwnerAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String ownerId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
+
     public void getGroupMembersOfTypeUser(java.lang.String domainId, java.lang.String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws org.apache.thrift.TException;
 
     public void getGroupMembersOfTypeGroup(java.lang.String domainId, java.lang.String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException;
@@ -1087,6 +1142,146 @@ public boolean recv_removeUsersFromGroup() throws org.apache.airavata.sharing.re
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "removeUsersFromGroup failed: unknown result");
     }
 
+    public boolean transferGroupOwnership(java.lang.String domainId, java.lang.String groupId, java.lang.String newOwnerId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      send_transferGroupOwnership(domainId, groupId, newOwnerId);
+      return recv_transferGroupOwnership();
+    }
+
+    public void send_transferGroupOwnership(java.lang.String domainId, java.lang.String groupId, java.lang.String newOwnerId) throws org.apache.thrift.TException
+    {
+      transferGroupOwnership_args args = new transferGroupOwnership_args();
+      args.setDomainId(domainId);
+      args.setGroupId(groupId);
+      args.setNewOwnerId(newOwnerId);
+      sendBase("transferGroupOwnership", args);
+    }
+
+    public boolean recv_transferGroupOwnership() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      transferGroupOwnership_result result = new transferGroupOwnership_result();
+      receiveBase(result, "transferGroupOwnership");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.sre != null) {
+        throw result.sre;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "transferGroupOwnership failed: unknown result");
+    }
+
+    public boolean addGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      send_addGroupAdmins(domainId, groupId, adminIds);
+      return recv_addGroupAdmins();
+    }
+
+    public void send_addGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds) throws org.apache.thrift.TException
+    {
+      addGroupAdmins_args args = new addGroupAdmins_args();
+      args.setDomainId(domainId);
+      args.setGroupId(groupId);
+      args.setAdminIds(adminIds);
+      sendBase("addGroupAdmins", args);
+    }
+
+    public boolean recv_addGroupAdmins() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      addGroupAdmins_result result = new addGroupAdmins_result();
+      receiveBase(result, "addGroupAdmins");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.sre != null) {
+        throw result.sre;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "addGroupAdmins failed: unknown result");
+    }
+
+    public boolean removeGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      send_removeGroupAdmins(domainId, groupId, adminIds);
+      return recv_removeGroupAdmins();
+    }
+
+    public void send_removeGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds) throws org.apache.thrift.TException
+    {
+      removeGroupAdmins_args args = new removeGroupAdmins_args();
+      args.setDomainId(domainId);
+      args.setGroupId(groupId);
+      args.setAdminIds(adminIds);
+      sendBase("removeGroupAdmins", args);
+    }
+
+    public boolean recv_removeGroupAdmins() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      removeGroupAdmins_result result = new removeGroupAdmins_result();
+      receiveBase(result, "removeGroupAdmins");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.sre != null) {
+        throw result.sre;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "removeGroupAdmins failed: unknown result");
+    }
+
+    public boolean hasAdminAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String adminId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      send_hasAdminAccess(domainId, groupId, adminId);
+      return recv_hasAdminAccess();
+    }
+
+    public void send_hasAdminAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String adminId) throws org.apache.thrift.TException
+    {
+      hasAdminAccess_args args = new hasAdminAccess_args();
+      args.setDomainId(domainId);
+      args.setGroupId(groupId);
+      args.setAdminId(adminId);
+      sendBase("hasAdminAccess", args);
+    }
+
+    public boolean recv_hasAdminAccess() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      hasAdminAccess_result result = new hasAdminAccess_result();
+      receiveBase(result, "hasAdminAccess");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.sre != null) {
+        throw result.sre;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "hasAdminAccess failed: unknown result");
+    }
+
+    public boolean hasOwnerAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String ownerId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      send_hasOwnerAccess(domainId, groupId, ownerId);
+      return recv_hasOwnerAccess();
+    }
+
+    public void send_hasOwnerAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String ownerId) throws org.apache.thrift.TException
+    {
+      hasOwnerAccess_args args = new hasOwnerAccess_args();
+      args.setDomainId(domainId);
+      args.setGroupId(groupId);
+      args.setOwnerId(ownerId);
+      sendBase("hasOwnerAccess", args);
+    }
+
+    public boolean recv_hasOwnerAccess() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    {
+      hasOwnerAccess_result result = new hasOwnerAccess_result();
+      receiveBase(result, "hasOwnerAccess");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.sre != null) {
+        throw result.sre;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "hasOwnerAccess failed: unknown result");
+    }
+
     public java.util.List<org.apache.airavata.sharing.registry.models.User> getGroupMembersOfTypeUser(java.lang.String domainId, java.lang.String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
       send_getGroupMembersOfTypeUser(domainId, groupId, offset, limit);
@@ -2625,6 +2820,196 @@ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apa
       }
     }
 
+    public void transferGroupOwnership(java.lang.String domainId, java.lang.String groupId, java.lang.String newOwnerId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      transferGroupOwnership_call method_call = new transferGroupOwnership_call(domainId, groupId, newOwnerId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class transferGroupOwnership_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Boolean> {
+      private java.lang.String domainId;
+      private java.lang.String groupId;
+      private java.lang.String newOwnerId;
+      public transferGroupOwnership_call(java.lang.String domainId, java.lang.String groupId, java.lang.String newOwnerId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
+        this.groupId = groupId;
+        this.newOwnerId = newOwnerId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("transferGroupOwnership", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        transferGroupOwnership_args args = new transferGroupOwnership_args();
+        args.setDomainId(domainId);
+        args.setGroupId(groupId);
+        args.setNewOwnerId(newOwnerId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.lang.Boolean getResult() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_transferGroupOwnership();
+      }
+    }
+
+    public void addGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      addGroupAdmins_call method_call = new addGroupAdmins_call(domainId, groupId, adminIds, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class addGroupAdmins_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Boolean> {
+      private java.lang.String domainId;
+      private java.lang.String groupId;
+      private java.util.List<java.lang.String> adminIds;
+      public addGroupAdmins_call(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
+        this.groupId = groupId;
+        this.adminIds = adminIds;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("addGroupAdmins", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        addGroupAdmins_args args = new addGroupAdmins_args();
+        args.setDomainId(domainId);
+        args.setGroupId(groupId);
+        args.setAdminIds(adminIds);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.lang.Boolean getResult() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_addGroupAdmins();
+      }
+    }
+
+    public void removeGroupAdmins(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      removeGroupAdmins_call method_call = new removeGroupAdmins_call(domainId, groupId, adminIds, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class removeGroupAdmins_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Boolean> {
+      private java.lang.String domainId;
+      private java.lang.String groupId;
+      private java.util.List<java.lang.String> adminIds;
+      public removeGroupAdmins_call(java.lang.String domainId, java.lang.String groupId, java.util.List<java.lang.String> adminIds, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
+        this.groupId = groupId;
+        this.adminIds = adminIds;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("removeGroupAdmins", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        removeGroupAdmins_args args = new removeGroupAdmins_args();
+        args.setDomainId(domainId);
+        args.setGroupId(groupId);
+        args.setAdminIds(adminIds);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.lang.Boolean getResult() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_removeGroupAdmins();
+      }
+    }
+
+    public void hasAdminAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String adminId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      hasAdminAccess_call method_call = new hasAdminAccess_call(domainId, groupId, adminId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class hasAdminAccess_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Boolean> {
+      private java.lang.String domainId;
+      private java.lang.String groupId;
+      private java.lang.String adminId;
+      public hasAdminAccess_call(java.lang.String domainId, java.lang.String groupId, java.lang.String adminId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
+        this.groupId = groupId;
+        this.adminId = adminId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("hasAdminAccess", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        hasAdminAccess_args args = new hasAdminAccess_args();
+        args.setDomainId(domainId);
+        args.setGroupId(groupId);
+        args.setAdminId(adminId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.lang.Boolean getResult() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_hasAdminAccess();
+      }
+    }
+
+    public void hasOwnerAccess(java.lang.String domainId, java.lang.String groupId, java.lang.String ownerId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      hasOwnerAccess_call method_call = new hasOwnerAccess_call(domainId, groupId, ownerId, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class hasOwnerAccess_call extends org.apache.thrift.async.TAsyncMethodCall<java.lang.Boolean> {
+      private java.lang.String domainId;
+      private java.lang.String groupId;
+      private java.lang.String ownerId;
+      public hasOwnerAccess_call(java.lang.String domainId, java.lang.String groupId, java.lang.String ownerId, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
+        this.groupId = groupId;
+        this.ownerId = ownerId;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("hasOwnerAccess", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        hasOwnerAccess_args args = new hasOwnerAccess_args();
+        args.setDomainId(domainId);
+        args.setGroupId(groupId);
+        args.setOwnerId(ownerId);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.lang.Boolean getResult() throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_hasOwnerAccess();
+      }
+    }
+
     public void getGroupMembersOfTypeUser(java.lang.String domainId, java.lang.String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws org.apache.thrift.TException {
       checkReady();
       getGroupMembersOfTypeUser_call method_call = new getGroupMembersOfTypeUser_call(domainId, groupId, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
@@ -3765,6 +4150,11 @@ protected Processor(I iface, java.util.Map<java.lang.String, org.apache.thrift.P
       processMap.put("getGroups", new getGroups());
       processMap.put("addUsersToGroup", new addUsersToGroup());
       processMap.put("removeUsersFromGroup", new removeUsersFromGroup());
+      processMap.put("transferGroupOwnership", new transferGroupOwnership());
+      processMap.put("addGroupAdmins", new addGroupAdmins());
+      processMap.put("removeGroupAdmins", new removeGroupAdmins());
+      processMap.put("hasAdminAccess", new hasAdminAccess());
+      processMap.put("hasOwnerAccess", new hasOwnerAccess());
       processMap.put("getGroupMembersOfTypeUser", new getGroupMembersOfTypeUser());
       processMap.put("getGroupMembersOfTypeGroup", new getGroupMembersOfTypeGroup());
       processMap.put("addChildGroupsToParentGroup", new addChildGroupsToParentGroup());
@@ -4289,6 +4679,131 @@ public removeUsersFromGroup_result getResult(I iface, removeUsersFromGroup_args
       }
     }
 
+    public static class transferGroupOwnership<I extends Iface> extends org.apache.thrift.ProcessFunction<I, transferGroupOwnership_args> {
+      public transferGroupOwnership() {
+        super("transferGroupOwnership");
+      }
+
+      public transferGroupOwnership_args getEmptyArgsInstance() {
+        return new transferGroupOwnership_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public transferGroupOwnership_result getResult(I iface, transferGroupOwnership_args args) throws org.apache.thrift.TException {
+        transferGroupOwnership_result result = new transferGroupOwnership_result();
+        try {
+          result.success = iface.transferGroupOwnership(args.domainId, args.groupId, args.newOwnerId);
+          result.setSuccessIsSet(true);
+        } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+          result.sre = sre;
+        }
+        return result;
+      }
+    }
+
+    public static class addGroupAdmins<I extends Iface> extends org.apache.thrift.ProcessFunction<I, addGroupAdmins_args> {
+      public addGroupAdmins() {
+        super("addGroupAdmins");
+      }
+
+      public addGroupAdmins_args getEmptyArgsInstance() {
+        return new addGroupAdmins_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public addGroupAdmins_result getResult(I iface, addGroupAdmins_args args) throws org.apache.thrift.TException {
+        addGroupAdmins_result result = new addGroupAdmins_result();
+        try {
+          result.success = iface.addGroupAdmins(args.domainId, args.groupId, args.adminIds);
+          result.setSuccessIsSet(true);
+        } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+          result.sre = sre;
+        }
+        return result;
+      }
+    }
+
+    public static class removeGroupAdmins<I extends Iface> extends org.apache.thrift.ProcessFunction<I, removeGroupAdmins_args> {
+      public removeGroupAdmins() {
+        super("removeGroupAdmins");
+      }
+
+      public removeGroupAdmins_args getEmptyArgsInstance() {
+        return new removeGroupAdmins_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public removeGroupAdmins_result getResult(I iface, removeGroupAdmins_args args) throws org.apache.thrift.TException {
+        removeGroupAdmins_result result = new removeGroupAdmins_result();
+        try {
+          result.success = iface.removeGroupAdmins(args.domainId, args.groupId, args.adminIds);
+          result.setSuccessIsSet(true);
+        } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+          result.sre = sre;
+        }
+        return result;
+      }
+    }
+
+    public static class hasAdminAccess<I extends Iface> extends org.apache.thrift.ProcessFunction<I, hasAdminAccess_args> {
+      public hasAdminAccess() {
+        super("hasAdminAccess");
+      }
+
+      public hasAdminAccess_args getEmptyArgsInstance() {
+        return new hasAdminAccess_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public hasAdminAccess_result getResult(I iface, hasAdminAccess_args args) throws org.apache.thrift.TException {
+        hasAdminAccess_result result = new hasAdminAccess_result();
+        try {
+          result.success = iface.hasAdminAccess(args.domainId, args.groupId, args.adminId);
+          result.setSuccessIsSet(true);
+        } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+          result.sre = sre;
+        }
+        return result;
+      }
+    }
+
+    public static class hasOwnerAccess<I extends Iface> extends org.apache.thrift.ProcessFunction<I, hasOwnerAccess_args> {
+      public hasOwnerAccess() {
+        super("hasOwnerAccess");
+      }
+
+      public hasOwnerAccess_args getEmptyArgsInstance() {
+        return new hasOwnerAccess_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public hasOwnerAccess_result getResult(I iface, hasOwnerAccess_args args) throws org.apache.thrift.TException {
+        hasOwnerAccess_result result = new hasOwnerAccess_result();
+        try {
+          result.success = iface.hasOwnerAccess(args.domainId, args.groupId, args.ownerId);
+          result.setSuccessIsSet(true);
+        } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+          result.sre = sre;
+        }
+        return result;
+      }
+    }
+
     public static class getGroupMembersOfTypeUser<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getGroupMembersOfTypeUser_args> {
       public getGroupMembersOfTypeUser() {
         super("getGroupMembersOfTypeUser");
@@ -5062,6 +5577,11 @@ protected AsyncProcessor(I iface, java.util.Map<java.lang.String,  org.apache.th
       processMap.put("getGroups", new getGroups());
       processMap.put("addUsersToGroup", new addUsersToGroup());
       processMap.put("removeUsersFromGroup", new removeUsersFromGroup());
+      processMap.put("transferGroupOwnership", new transferGroupOwnership());
+      processMap.put("addGroupAdmins", new addGroupAdmins());
+      processMap.put("removeGroupAdmins", new removeGroupAdmins());
+      processMap.put("hasAdminAccess", new hasAdminAccess());
+      processMap.put("hasOwnerAccess", new hasOwnerAccess());
       processMap.put("getGroupMembersOfTypeUser", new getGroupMembersOfTypeUser());
       processMap.put("getGroupMembersOfTypeGroup", new getGroupMembersOfTypeGroup());
       processMap.put("addChildGroupsToParentGroup", new addChildGroupsToParentGroup());
@@ -6410,21 +6930,22 @@ public void start(I iface, removeUsersFromGroup_args args, org.apache.thrift.asy
       }
     }
 
-    public static class getGroupMembersOfTypeUser<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getGroupMembersOfTypeUser_args, java.util.List<org.apache.airavata.sharing.registry.models.User>> {
-      public getGroupMembersOfTypeUser() {
-        super("getGroupMembersOfTypeUser");
+    public static class transferGroupOwnership<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, transferGroupOwnership_args, java.lang.Boolean> {
+      public transferGroupOwnership() {
+        super("transferGroupOwnership");
       }
 
-      public getGroupMembersOfTypeUser_args getEmptyArgsInstance() {
-        return new getGroupMembersOfTypeUser_args();
+      public transferGroupOwnership_args getEmptyArgsInstance() {
+        return new transferGroupOwnership_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.User> o) {
-            getGroupMembersOfTypeUser_result result = new getGroupMembersOfTypeUser_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            transferGroupOwnership_result result = new transferGroupOwnership_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -6438,7 +6959,7 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getGroupMembersOfTypeUser_result result = new getGroupMembersOfTypeUser_result();
+            transferGroupOwnership_result result = new transferGroupOwnership_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6470,26 +6991,27 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getGroupMembersOfTypeUser_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws org.apache.thrift.TException {
-        iface.getGroupMembersOfTypeUser(args.domainId, args.groupId, args.offset, args.limit,resultHandler);
+      public void start(I iface, transferGroupOwnership_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.transferGroupOwnership(args.domainId, args.groupId, args.newOwnerId,resultHandler);
       }
     }
 
-    public static class getGroupMembersOfTypeGroup<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getGroupMembersOfTypeGroup_args, java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> {
-      public getGroupMembersOfTypeGroup() {
-        super("getGroupMembersOfTypeGroup");
+    public static class addGroupAdmins<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, addGroupAdmins_args, java.lang.Boolean> {
+      public addGroupAdmins() {
+        super("addGroupAdmins");
       }
 
-      public getGroupMembersOfTypeGroup_args getEmptyArgsInstance() {
-        return new getGroupMembersOfTypeGroup_args();
+      public addGroupAdmins_args getEmptyArgsInstance() {
+        return new addGroupAdmins_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> o) {
-            getGroupMembersOfTypeGroup_result result = new getGroupMembersOfTypeGroup_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            addGroupAdmins_result result = new addGroupAdmins_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -6503,7 +7025,7 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getGroupMembersOfTypeGroup_result result = new getGroupMembersOfTypeGroup_result();
+            addGroupAdmins_result result = new addGroupAdmins_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6535,25 +7057,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getGroupMembersOfTypeGroup_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException {
-        iface.getGroupMembersOfTypeGroup(args.domainId, args.groupId, args.offset, args.limit,resultHandler);
+      public void start(I iface, addGroupAdmins_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.addGroupAdmins(args.domainId, args.groupId, args.adminIds,resultHandler);
       }
     }
 
-    public static class addChildGroupsToParentGroup<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, addChildGroupsToParentGroup_args, java.lang.Boolean> {
-      public addChildGroupsToParentGroup() {
-        super("addChildGroupsToParentGroup");
+    public static class removeGroupAdmins<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, removeGroupAdmins_args, java.lang.Boolean> {
+      public removeGroupAdmins() {
+        super("removeGroupAdmins");
       }
 
-      public addChildGroupsToParentGroup_args getEmptyArgsInstance() {
-        return new addChildGroupsToParentGroup_args();
+      public removeGroupAdmins_args getEmptyArgsInstance() {
+        return new removeGroupAdmins_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            addChildGroupsToParentGroup_result result = new addChildGroupsToParentGroup_result();
+            removeGroupAdmins_result result = new removeGroupAdmins_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -6569,7 +7091,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            addChildGroupsToParentGroup_result result = new addChildGroupsToParentGroup_result();
+            removeGroupAdmins_result result = new removeGroupAdmins_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6601,25 +7123,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, addChildGroupsToParentGroup_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.addChildGroupsToParentGroup(args.domainId, args.childIds, args.groupId,resultHandler);
+      public void start(I iface, removeGroupAdmins_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.removeGroupAdmins(args.domainId, args.groupId, args.adminIds,resultHandler);
       }
     }
 
-    public static class removeChildGroupFromParentGroup<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, removeChildGroupFromParentGroup_args, java.lang.Boolean> {
-      public removeChildGroupFromParentGroup() {
-        super("removeChildGroupFromParentGroup");
+    public static class hasAdminAccess<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, hasAdminAccess_args, java.lang.Boolean> {
+      public hasAdminAccess() {
+        super("hasAdminAccess");
       }
 
-      public removeChildGroupFromParentGroup_args getEmptyArgsInstance() {
-        return new removeChildGroupFromParentGroup_args();
+      public hasAdminAccess_args getEmptyArgsInstance() {
+        return new hasAdminAccess_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            removeChildGroupFromParentGroup_result result = new removeChildGroupFromParentGroup_result();
+            hasAdminAccess_result result = new hasAdminAccess_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -6635,7 +7157,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            removeChildGroupFromParentGroup_result result = new removeChildGroupFromParentGroup_result();
+            hasAdminAccess_result result = new hasAdminAccess_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6667,26 +7189,27 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, removeChildGroupFromParentGroup_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.removeChildGroupFromParentGroup(args.domainId, args.childId, args.groupId,resultHandler);
+      public void start(I iface, hasAdminAccess_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.hasAdminAccess(args.domainId, args.groupId, args.adminId,resultHandler);
       }
     }
 
-    public static class getAllMemberGroupsForUser<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllMemberGroupsForUser_args, java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> {
-      public getAllMemberGroupsForUser() {
-        super("getAllMemberGroupsForUser");
+    public static class hasOwnerAccess<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, hasOwnerAccess_args, java.lang.Boolean> {
+      public hasOwnerAccess() {
+        super("hasOwnerAccess");
       }
 
-      public getAllMemberGroupsForUser_args getEmptyArgsInstance() {
-        return new getAllMemberGroupsForUser_args();
+      public hasOwnerAccess_args getEmptyArgsInstance() {
+        return new hasOwnerAccess_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> o) {
-            getAllMemberGroupsForUser_result result = new getAllMemberGroupsForUser_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            hasOwnerAccess_result result = new hasOwnerAccess_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -6700,7 +7223,7 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getAllMemberGroupsForUser_result result = new getAllMemberGroupsForUser_result();
+            hasOwnerAccess_result result = new hasOwnerAccess_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6732,25 +7255,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getAllMemberGroupsForUser_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException {
-        iface.getAllMemberGroupsForUser(args.domainId, args.userId,resultHandler);
+      public void start(I iface, hasOwnerAccess_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.hasOwnerAccess(args.domainId, args.groupId, args.ownerId,resultHandler);
       }
     }
 
-    public static class createEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createEntityType_args, java.lang.String> {
-      public createEntityType() {
-        super("createEntityType");
+    public static class getGroupMembersOfTypeUser<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getGroupMembersOfTypeUser_args, java.util.List<org.apache.airavata.sharing.registry.models.User>> {
+      public getGroupMembersOfTypeUser() {
+        super("getGroupMembersOfTypeUser");
       }
 
-      public createEntityType_args getEmptyArgsInstance() {
-        return new createEntityType_args();
+      public getGroupMembersOfTypeUser_args getEmptyArgsInstance() {
+        return new getGroupMembersOfTypeUser_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
-          public void onComplete(java.lang.String o) {
-            createEntityType_result result = new createEntityType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.User> o) {
+            getGroupMembersOfTypeUser_result result = new getGroupMembersOfTypeUser_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -6765,15 +7288,11 @@ public void onComplete(java.lang.String o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            createEntityType_result result = new createEntityType_result();
+            getGroupMembersOfTypeUser_result result = new getGroupMembersOfTypeUser_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
               msg = result;
-            } else if (e instanceof org.apache.airavata.sharing.registry.models.DuplicateEntryException) {
-              result.dee = (org.apache.airavata.sharing.registry.models.DuplicateEntryException) e;
-              result.setDeeIsSet(true);
-              msg = result;
             } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
@@ -6801,27 +7320,26 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, createEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
-        iface.createEntityType(args.entityType,resultHandler);
+      public void start(I iface, getGroupMembersOfTypeUser_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws org.apache.thrift.TException {
+        iface.getGroupMembersOfTypeUser(args.domainId, args.groupId, args.offset, args.limit,resultHandler);
       }
     }
 
-    public static class updateEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateEntityType_args, java.lang.Boolean> {
-      public updateEntityType() {
-        super("updateEntityType");
+    public static class getGroupMembersOfTypeGroup<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getGroupMembersOfTypeGroup_args, java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> {
+      public getGroupMembersOfTypeGroup() {
+        super("getGroupMembersOfTypeGroup");
       }
 
-      public updateEntityType_args getEmptyArgsInstance() {
-        return new updateEntityType_args();
+      public getGroupMembersOfTypeGroup_args getEmptyArgsInstance() {
+        return new getGroupMembersOfTypeGroup_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            updateEntityType_result result = new updateEntityType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> o) {
+            getGroupMembersOfTypeGroup_result result = new getGroupMembersOfTypeGroup_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -6835,7 +7353,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            updateEntityType_result result = new updateEntityType_result();
+            getGroupMembersOfTypeGroup_result result = new getGroupMembersOfTypeGroup_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6867,25 +7385,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, updateEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.updateEntityType(args.entityType,resultHandler);
+      public void start(I iface, getGroupMembersOfTypeGroup_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException {
+        iface.getGroupMembersOfTypeGroup(args.domainId, args.groupId, args.offset, args.limit,resultHandler);
       }
     }
 
-    public static class isEntityTypeExists<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, isEntityTypeExists_args, java.lang.Boolean> {
-      public isEntityTypeExists() {
-        super("isEntityTypeExists");
+    public static class addChildGroupsToParentGroup<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, addChildGroupsToParentGroup_args, java.lang.Boolean> {
+      public addChildGroupsToParentGroup() {
+        super("addChildGroupsToParentGroup");
       }
 
-      public isEntityTypeExists_args getEmptyArgsInstance() {
-        return new isEntityTypeExists_args();
+      public addChildGroupsToParentGroup_args getEmptyArgsInstance() {
+        return new addChildGroupsToParentGroup_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            isEntityTypeExists_result result = new isEntityTypeExists_result();
+            addChildGroupsToParentGroup_result result = new addChildGroupsToParentGroup_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -6901,7 +7419,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            isEntityTypeExists_result result = new isEntityTypeExists_result();
+            addChildGroupsToParentGroup_result result = new addChildGroupsToParentGroup_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6933,25 +7451,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, isEntityTypeExists_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.isEntityTypeExists(args.domainId, args.entityTypeId,resultHandler);
+      public void start(I iface, addChildGroupsToParentGroup_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.addChildGroupsToParentGroup(args.domainId, args.childIds, args.groupId,resultHandler);
       }
     }
 
-    public static class deleteEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, deleteEntityType_args, java.lang.Boolean> {
-      public deleteEntityType() {
-        super("deleteEntityType");
+    public static class removeChildGroupFromParentGroup<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, removeChildGroupFromParentGroup_args, java.lang.Boolean> {
+      public removeChildGroupFromParentGroup() {
+        super("removeChildGroupFromParentGroup");
       }
 
-      public deleteEntityType_args getEmptyArgsInstance() {
-        return new deleteEntityType_args();
+      public removeChildGroupFromParentGroup_args getEmptyArgsInstance() {
+        return new removeChildGroupFromParentGroup_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            deleteEntityType_result result = new deleteEntityType_result();
+            removeChildGroupFromParentGroup_result result = new removeChildGroupFromParentGroup_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -6967,7 +7485,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            deleteEntityType_result result = new deleteEntityType_result();
+            removeChildGroupFromParentGroup_result result = new removeChildGroupFromParentGroup_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -6999,25 +7517,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, deleteEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.deleteEntityType(args.domainId, args.entityTypeId,resultHandler);
+      public void start(I iface, removeChildGroupFromParentGroup_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.removeChildGroupFromParentGroup(args.domainId, args.childId, args.groupId,resultHandler);
       }
     }
 
-    public static class getEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getEntityType_args, org.apache.airavata.sharing.registry.models.EntityType> {
-      public getEntityType() {
-        super("getEntityType");
+    public static class getAllMemberGroupsForUser<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllMemberGroupsForUser_args, java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> {
+      public getAllMemberGroupsForUser() {
+        super("getAllMemberGroupsForUser");
       }
 
-      public getEntityType_args getEmptyArgsInstance() {
-        return new getEntityType_args();
+      public getAllMemberGroupsForUser_args getEmptyArgsInstance() {
+        return new getAllMemberGroupsForUser_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType>() { 
-          public void onComplete(org.apache.airavata.sharing.registry.models.EntityType o) {
-            getEntityType_result result = new getEntityType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> o) {
+            getAllMemberGroupsForUser_result result = new getAllMemberGroupsForUser_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -7032,7 +7550,7 @@ public void onComplete(org.apache.airavata.sharing.registry.models.EntityType o)
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getEntityType_result result = new getEntityType_result();
+            getAllMemberGroupsForUser_result result = new getAllMemberGroupsForUser_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7064,25 +7582,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType> resultHandler) throws org.apache.thrift.TException {
-        iface.getEntityType(args.domainId, args.entityTypeId,resultHandler);
+      public void start(I iface, getAllMemberGroupsForUser_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException {
+        iface.getAllMemberGroupsForUser(args.domainId, args.userId,resultHandler);
       }
     }
 
-    public static class getEntityTypes<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getEntityTypes_args, java.util.List<org.apache.airavata.sharing.registry.models.EntityType>> {
-      public getEntityTypes() {
-        super("getEntityTypes");
+    public static class createEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createEntityType_args, java.lang.String> {
+      public createEntityType() {
+        super("createEntityType");
       }
 
-      public getEntityTypes_args getEmptyArgsInstance() {
-        return new getEntityTypes_args();
+      public createEntityType_args getEmptyArgsInstance() {
+        return new createEntityType_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.EntityType>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.EntityType>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.EntityType> o) {
-            getEntityTypes_result result = new getEntityTypes_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
+          public void onComplete(java.lang.String o) {
+            createEntityType_result result = new createEntityType_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -7097,11 +7615,15 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getEntityTypes_result result = new getEntityTypes_result();
+            createEntityType_result result = new createEntityType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
               msg = result;
+            } else if (e instanceof org.apache.airavata.sharing.registry.models.DuplicateEntryException) {
+              result.dee = (org.apache.airavata.sharing.registry.models.DuplicateEntryException) e;
+              result.setDeeIsSet(true);
+              msg = result;
             } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
@@ -7129,26 +7651,27 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getEntityTypes_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.EntityType>> resultHandler) throws org.apache.thrift.TException {
-        iface.getEntityTypes(args.domainId, args.offset, args.limit,resultHandler);
+      public void start(I iface, createEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
+        iface.createEntityType(args.entityType,resultHandler);
       }
     }
 
-    public static class createEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createEntity_args, java.lang.String> {
-      public createEntity() {
-        super("createEntity");
+    public static class updateEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateEntityType_args, java.lang.Boolean> {
+      public updateEntityType() {
+        super("updateEntityType");
       }
 
-      public createEntity_args getEmptyArgsInstance() {
-        return new createEntity_args();
+      public updateEntityType_args getEmptyArgsInstance() {
+        return new updateEntityType_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
-          public void onComplete(java.lang.String o) {
-            createEntity_result result = new createEntity_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            updateEntityType_result result = new updateEntityType_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7162,7 +7685,7 @@ public void onComplete(java.lang.String o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            createEntity_result result = new createEntity_result();
+            updateEntityType_result result = new updateEntityType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7194,25 +7717,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, createEntity_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
-        iface.createEntity(args.entity,resultHandler);
+      public void start(I iface, updateEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.updateEntityType(args.entityType,resultHandler);
       }
     }
 
-    public static class updateEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateEntity_args, java.lang.Boolean> {
-      public updateEntity() {
-        super("updateEntity");
+    public static class isEntityTypeExists<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, isEntityTypeExists_args, java.lang.Boolean> {
+      public isEntityTypeExists() {
+        super("isEntityTypeExists");
       }
 
-      public updateEntity_args getEmptyArgsInstance() {
-        return new updateEntity_args();
+      public isEntityTypeExists_args getEmptyArgsInstance() {
+        return new isEntityTypeExists_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            updateEntity_result result = new updateEntity_result();
+            isEntityTypeExists_result result = new isEntityTypeExists_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -7228,7 +7751,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            updateEntity_result result = new updateEntity_result();
+            isEntityTypeExists_result result = new isEntityTypeExists_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7260,25 +7783,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, updateEntity_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.updateEntity(args.entity,resultHandler);
+      public void start(I iface, isEntityTypeExists_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.isEntityTypeExists(args.domainId, args.entityTypeId,resultHandler);
       }
     }
 
-    public static class isEntityExists<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, isEntityExists_args, java.lang.Boolean> {
-      public isEntityExists() {
-        super("isEntityExists");
+    public static class deleteEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, deleteEntityType_args, java.lang.Boolean> {
+      public deleteEntityType() {
+        super("deleteEntityType");
       }
 
-      public isEntityExists_args getEmptyArgsInstance() {
-        return new isEntityExists_args();
+      public deleteEntityType_args getEmptyArgsInstance() {
+        return new deleteEntityType_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            isEntityExists_result result = new isEntityExists_result();
+            deleteEntityType_result result = new deleteEntityType_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -7294,7 +7817,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            isEntityExists_result result = new isEntityExists_result();
+            deleteEntityType_result result = new deleteEntityType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7326,27 +7849,26 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, isEntityExists_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.isEntityExists(args.domainId, args.entityId,resultHandler);
+      public void start(I iface, deleteEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.deleteEntityType(args.domainId, args.entityTypeId,resultHandler);
       }
     }
 
-    public static class deleteEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, deleteEntity_args, java.lang.Boolean> {
-      public deleteEntity() {
-        super("deleteEntity");
+    public static class getEntityType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getEntityType_args, org.apache.airavata.sharing.registry.models.EntityType> {
+      public getEntityType() {
+        super("getEntityType");
       }
 
-      public deleteEntity_args getEmptyArgsInstance() {
-        return new deleteEntity_args();
+      public getEntityType_args getEmptyArgsInstance() {
+        return new getEntityType_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            deleteEntity_result result = new deleteEntity_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType>() { 
+          public void onComplete(org.apache.airavata.sharing.registry.models.EntityType o) {
+            getEntityType_result result = new getEntityType_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7360,7 +7882,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            deleteEntity_result result = new deleteEntity_result();
+            getEntityType_result result = new getEntityType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7392,25 +7914,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, deleteEntity_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.deleteEntity(args.domainId, args.entityId,resultHandler);
+      public void start(I iface, getEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType> resultHandler) throws org.apache.thrift.TException {
+        iface.getEntityType(args.domainId, args.entityTypeId,resultHandler);
       }
     }
 
-    public static class getEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getEntity_args, org.apache.airavata.sharing.registry.models.Entity> {
-      public getEntity() {
-        super("getEntity");
+    public static class getEntityTypes<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getEntityTypes_args, java.util.List<org.apache.airavata.sharing.registry.models.EntityType>> {
+      public getEntityTypes() {
+        super("getEntityTypes");
       }
 
-      public getEntity_args getEmptyArgsInstance() {
-        return new getEntity_args();
+      public getEntityTypes_args getEmptyArgsInstance() {
+        return new getEntityTypes_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.EntityType>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity>() { 
-          public void onComplete(org.apache.airavata.sharing.registry.models.Entity o) {
-            getEntity_result result = new getEntity_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.EntityType>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.EntityType> o) {
+            getEntityTypes_result result = new getEntityTypes_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -7425,7 +7947,7 @@ public void onComplete(org.apache.airavata.sharing.registry.models.Entity o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getEntity_result result = new getEntity_result();
+            getEntityTypes_result result = new getEntityTypes_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7457,25 +7979,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getEntity_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity> resultHandler) throws org.apache.thrift.TException {
-        iface.getEntity(args.domainId, args.entityId,resultHandler);
+      public void start(I iface, getEntityTypes_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.EntityType>> resultHandler) throws org.apache.thrift.TException {
+        iface.getEntityTypes(args.domainId, args.offset, args.limit,resultHandler);
       }
     }
 
-    public static class searchEntities<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, searchEntities_args, java.util.List<org.apache.airavata.sharing.registry.models.Entity>> {
-      public searchEntities() {
-        super("searchEntities");
+    public static class createEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createEntity_args, java.lang.String> {
+      public createEntity() {
+        super("createEntity");
       }
 
-      public searchEntities_args getEmptyArgsInstance() {
-        return new searchEntities_args();
+      public createEntity_args getEmptyArgsInstance() {
+        return new createEntity_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.Entity>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.Entity>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.Entity> o) {
-            searchEntities_result result = new searchEntities_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
+          public void onComplete(java.lang.String o) {
+            createEntity_result result = new createEntity_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -7490,7 +8012,7 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            searchEntities_result result = new searchEntities_result();
+            createEntity_result result = new createEntity_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7522,26 +8044,27 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, searchEntities_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.Entity>> resultHandler) throws org.apache.thrift.TException {
-        iface.searchEntities(args.domainId, args.userId, args.filters, args.offset, args.limit,resultHandler);
+      public void start(I iface, createEntity_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
+        iface.createEntity(args.entity,resultHandler);
       }
     }
 
-    public static class getListOfSharedUsers<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getListOfSharedUsers_args, java.util.List<org.apache.airavata.sharing.registry.models.User>> {
-      public getListOfSharedUsers() {
-        super("getListOfSharedUsers");
+    public static class updateEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateEntity_args, java.lang.Boolean> {
+      public updateEntity() {
+        super("updateEntity");
       }
 
-      public getListOfSharedUsers_args getEmptyArgsInstance() {
-        return new getListOfSharedUsers_args();
+      public updateEntity_args getEmptyArgsInstance() {
+        return new updateEntity_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.User> o) {
-            getListOfSharedUsers_result result = new getListOfSharedUsers_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            updateEntity_result result = new updateEntity_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7555,7 +8078,7 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getListOfSharedUsers_result result = new getListOfSharedUsers_result();
+            updateEntity_result result = new updateEntity_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7587,26 +8110,27 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getListOfSharedUsers_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws org.apache.thrift.TException {
-        iface.getListOfSharedUsers(args.domainId, args.entityId, args.permissionTypeId,resultHandler);
+      public void start(I iface, updateEntity_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.updateEntity(args.entity,resultHandler);
       }
     }
 
-    public static class getListOfSharedGroups<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getListOfSharedGroups_args, java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> {
-      public getListOfSharedGroups() {
-        super("getListOfSharedGroups");
+    public static class isEntityExists<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, isEntityExists_args, java.lang.Boolean> {
+      public isEntityExists() {
+        super("isEntityExists");
       }
 
-      public getListOfSharedGroups_args getEmptyArgsInstance() {
-        return new getListOfSharedGroups_args();
+      public isEntityExists_args getEmptyArgsInstance() {
+        return new isEntityExists_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> o) {
-            getListOfSharedGroups_result result = new getListOfSharedGroups_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            isEntityExists_result result = new isEntityExists_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7620,7 +8144,7 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getListOfSharedGroups_result result = new getListOfSharedGroups_result();
+            isEntityExists_result result = new isEntityExists_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7652,26 +8176,27 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getListOfSharedGroups_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException {
-        iface.getListOfSharedGroups(args.domainId, args.entityId, args.permissionTypeId,resultHandler);
+      public void start(I iface, isEntityExists_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.isEntityExists(args.domainId, args.entityId,resultHandler);
       }
     }
 
-    public static class createPermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createPermissionType_args, java.lang.String> {
-      public createPermissionType() {
-        super("createPermissionType");
+    public static class deleteEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, deleteEntity_args, java.lang.Boolean> {
+      public deleteEntity() {
+        super("deleteEntity");
       }
 
-      public createPermissionType_args getEmptyArgsInstance() {
-        return new createPermissionType_args();
+      public deleteEntity_args getEmptyArgsInstance() {
+        return new deleteEntity_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
-          public void onComplete(java.lang.String o) {
-            createPermissionType_result result = new createPermissionType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            deleteEntity_result result = new deleteEntity_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7685,15 +8210,11 @@ public void onComplete(java.lang.String o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            createPermissionType_result result = new createPermissionType_result();
+            deleteEntity_result result = new deleteEntity_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
               msg = result;
-            } else if (e instanceof org.apache.airavata.sharing.registry.models.DuplicateEntryException) {
-              result.dee = (org.apache.airavata.sharing.registry.models.DuplicateEntryException) e;
-              result.setDeeIsSet(true);
-              msg = result;
             } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
@@ -7721,27 +8242,26 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, createPermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
-        iface.createPermissionType(args.permissionType,resultHandler);
+      public void start(I iface, deleteEntity_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.deleteEntity(args.domainId, args.entityId,resultHandler);
       }
     }
 
-    public static class updatePermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updatePermissionType_args, java.lang.Boolean> {
-      public updatePermissionType() {
-        super("updatePermissionType");
+    public static class getEntity<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getEntity_args, org.apache.airavata.sharing.registry.models.Entity> {
+      public getEntity() {
+        super("getEntity");
       }
 
-      public updatePermissionType_args getEmptyArgsInstance() {
-        return new updatePermissionType_args();
+      public getEntity_args getEmptyArgsInstance() {
+        return new getEntity_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            updatePermissionType_result result = new updatePermissionType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity>() { 
+          public void onComplete(org.apache.airavata.sharing.registry.models.Entity o) {
+            getEntity_result result = new getEntity_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7755,7 +8275,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            updatePermissionType_result result = new updatePermissionType_result();
+            getEntity_result result = new getEntity_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7787,27 +8307,26 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, updatePermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.updatePermissionType(args.permissionType,resultHandler);
+      public void start(I iface, getEntity_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity> resultHandler) throws org.apache.thrift.TException {
+        iface.getEntity(args.domainId, args.entityId,resultHandler);
       }
     }
 
-    public static class isPermissionExists<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, isPermissionExists_args, java.lang.Boolean> {
-      public isPermissionExists() {
-        super("isPermissionExists");
+    public static class searchEntities<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, searchEntities_args, java.util.List<org.apache.airavata.sharing.registry.models.Entity>> {
+      public searchEntities() {
+        super("searchEntities");
       }
 
-      public isPermissionExists_args getEmptyArgsInstance() {
-        return new isPermissionExists_args();
+      public searchEntities_args getEmptyArgsInstance() {
+        return new searchEntities_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.Entity>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            isPermissionExists_result result = new isPermissionExists_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.Entity>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.Entity> o) {
+            searchEntities_result result = new searchEntities_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7821,7 +8340,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            isPermissionExists_result result = new isPermissionExists_result();
+            searchEntities_result result = new searchEntities_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7853,27 +8372,26 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, isPermissionExists_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.isPermissionExists(args.dimainId, args.permissionId,resultHandler);
+      public void start(I iface, searchEntities_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.Entity>> resultHandler) throws org.apache.thrift.TException {
+        iface.searchEntities(args.domainId, args.userId, args.filters, args.offset, args.limit,resultHandler);
       }
     }
 
-    public static class deletePermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, deletePermissionType_args, java.lang.Boolean> {
-      public deletePermissionType() {
-        super("deletePermissionType");
+    public static class getListOfSharedUsers<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getListOfSharedUsers_args, java.util.List<org.apache.airavata.sharing.registry.models.User>> {
+      public getListOfSharedUsers() {
+        super("getListOfSharedUsers");
       }
 
-      public deletePermissionType_args getEmptyArgsInstance() {
-        return new deletePermissionType_args();
+      public getListOfSharedUsers_args getEmptyArgsInstance() {
+        return new getListOfSharedUsers_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            deletePermissionType_result result = new deletePermissionType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.User> o) {
+            getListOfSharedUsers_result result = new getListOfSharedUsers_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -7887,7 +8405,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            deletePermissionType_result result = new deletePermissionType_result();
+            getListOfSharedUsers_result result = new getListOfSharedUsers_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7919,25 +8437,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, deletePermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.deletePermissionType(args.domainId, args.permissionTypeId,resultHandler);
+      public void start(I iface, getListOfSharedUsers_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws org.apache.thrift.TException {
+        iface.getListOfSharedUsers(args.domainId, args.entityId, args.permissionTypeId,resultHandler);
       }
     }
 
-    public static class getPermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getPermissionType_args, org.apache.airavata.sharing.registry.models.PermissionType> {
-      public getPermissionType() {
-        super("getPermissionType");
+    public static class getListOfSharedGroups<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getListOfSharedGroups_args, java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> {
+      public getListOfSharedGroups() {
+        super("getListOfSharedGroups");
       }
 
-      public getPermissionType_args getEmptyArgsInstance() {
-        return new getPermissionType_args();
+      public getListOfSharedGroups_args getEmptyArgsInstance() {
+        return new getListOfSharedGroups_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType>() { 
-          public void onComplete(org.apache.airavata.sharing.registry.models.PermissionType o) {
-            getPermissionType_result result = new getPermissionType_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> o) {
+            getListOfSharedGroups_result result = new getListOfSharedGroups_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -7952,7 +8470,7 @@ public void onComplete(org.apache.airavata.sharing.registry.models.PermissionTyp
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getPermissionType_result result = new getPermissionType_result();
+            getListOfSharedGroups_result result = new getListOfSharedGroups_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -7984,25 +8502,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getPermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType> resultHandler) throws org.apache.thrift.TException {
-        iface.getPermissionType(args.domainId, args.permissionTypeId,resultHandler);
+      public void start(I iface, getListOfSharedGroups_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws org.apache.thrift.TException {
+        iface.getListOfSharedGroups(args.domainId, args.entityId, args.permissionTypeId,resultHandler);
       }
     }
 
-    public static class getPermissionTypes<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getPermissionTypes_args, java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>> {
-      public getPermissionTypes() {
-        super("getPermissionTypes");
+    public static class createPermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createPermissionType_args, java.lang.String> {
+      public createPermissionType() {
+        super("createPermissionType");
       }
 
-      public getPermissionTypes_args getEmptyArgsInstance() {
-        return new getPermissionTypes_args();
+      public createPermissionType_args getEmptyArgsInstance() {
+        return new createPermissionType_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.String> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>>() { 
-          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.PermissionType> o) {
-            getPermissionTypes_result result = new getPermissionTypes_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.String>() { 
+          public void onComplete(java.lang.String o) {
+            createPermissionType_result result = new createPermissionType_result();
             result.success = o;
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -8017,11 +8535,15 @@ public void onComplete(java.util.List<org.apache.airavata.sharing.registry.model
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            getPermissionTypes_result result = new getPermissionTypes_result();
+            createPermissionType_result result = new createPermissionType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
               msg = result;
+            } else if (e instanceof org.apache.airavata.sharing.registry.models.DuplicateEntryException) {
+              result.dee = (org.apache.airavata.sharing.registry.models.DuplicateEntryException) e;
+              result.setDeeIsSet(true);
+              msg = result;
             } else if (e instanceof org.apache.thrift.transport.TTransportException) {
               _LOGGER.error("TTransportException inside handler", e);
               fb.close();
@@ -8049,25 +8571,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, getPermissionTypes_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>> resultHandler) throws org.apache.thrift.TException {
-        iface.getPermissionTypes(args.domainId, args.offset, args.limit,resultHandler);
+      public void start(I iface, createPermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException {
+        iface.createPermissionType(args.permissionType,resultHandler);
       }
     }
 
-    public static class shareEntityWithUsers<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, shareEntityWithUsers_args, java.lang.Boolean> {
-      public shareEntityWithUsers() {
-        super("shareEntityWithUsers");
+    public static class updatePermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updatePermissionType_args, java.lang.Boolean> {
+      public updatePermissionType() {
+        super("updatePermissionType");
       }
 
-      public shareEntityWithUsers_args getEmptyArgsInstance() {
-        return new shareEntityWithUsers_args();
+      public updatePermissionType_args getEmptyArgsInstance() {
+        return new updatePermissionType_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            shareEntityWithUsers_result result = new shareEntityWithUsers_result();
+            updatePermissionType_result result = new updatePermissionType_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -8083,7 +8605,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            shareEntityWithUsers_result result = new shareEntityWithUsers_result();
+            updatePermissionType_result result = new updatePermissionType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -8115,25 +8637,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, shareEntityWithUsers_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.shareEntityWithUsers(args.domainId, args.entityId, args.userList, args.perssionTypeId, args.cascadePermission,resultHandler);
+      public void start(I iface, updatePermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.updatePermissionType(args.permissionType,resultHandler);
       }
     }
 
-    public static class revokeEntitySharingFromUsers<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, revokeEntitySharingFromUsers_args, java.lang.Boolean> {
-      public revokeEntitySharingFromUsers() {
-        super("revokeEntitySharingFromUsers");
+    public static class isPermissionExists<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, isPermissionExists_args, java.lang.Boolean> {
+      public isPermissionExists() {
+        super("isPermissionExists");
       }
 
-      public revokeEntitySharingFromUsers_args getEmptyArgsInstance() {
-        return new revokeEntitySharingFromUsers_args();
+      public isPermissionExists_args getEmptyArgsInstance() {
+        return new isPermissionExists_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            revokeEntitySharingFromUsers_result result = new revokeEntitySharingFromUsers_result();
+            isPermissionExists_result result = new isPermissionExists_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -8149,7 +8671,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            revokeEntitySharingFromUsers_result result = new revokeEntitySharingFromUsers_result();
+            isPermissionExists_result result = new isPermissionExists_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -8181,25 +8703,25 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, revokeEntitySharingFromUsers_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.revokeEntitySharingFromUsers(args.domainId, args.entityId, args.userList, args.perssionTypeId,resultHandler);
+      public void start(I iface, isPermissionExists_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.isPermissionExists(args.dimainId, args.permissionId,resultHandler);
       }
     }
 
-    public static class shareEntityWithGroups<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, shareEntityWithGroups_args, java.lang.Boolean> {
-      public shareEntityWithGroups() {
-        super("shareEntityWithGroups");
+    public static class deletePermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, deletePermissionType_args, java.lang.Boolean> {
+      public deletePermissionType() {
+        super("deletePermissionType");
       }
 
-      public shareEntityWithGroups_args getEmptyArgsInstance() {
-        return new shareEntityWithGroups_args();
+      public deletePermissionType_args getEmptyArgsInstance() {
+        return new deletePermissionType_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            shareEntityWithGroups_result result = new shareEntityWithGroups_result();
+            deletePermissionType_result result = new deletePermissionType_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -8215,7 +8737,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            shareEntityWithGroups_result result = new shareEntityWithGroups_result();
+            deletePermissionType_result result = new deletePermissionType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -8247,27 +8769,26 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, shareEntityWithGroups_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.shareEntityWithGroups(args.domainId, args.entityId, args.groupList, args.perssionTypeId, args.cascadePermission,resultHandler);
+      public void start(I iface, deletePermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.deletePermissionType(args.domainId, args.permissionTypeId,resultHandler);
       }
     }
 
-    public static class revokeEntitySharingFromGroups<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, revokeEntitySharingFromGroups_args, java.lang.Boolean> {
-      public revokeEntitySharingFromGroups() {
-        super("revokeEntitySharingFromGroups");
+    public static class getPermissionType<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getPermissionType_args, org.apache.airavata.sharing.registry.models.PermissionType> {
+      public getPermissionType() {
+        super("getPermissionType");
       }
 
-      public revokeEntitySharingFromGroups_args getEmptyArgsInstance() {
-        return new revokeEntitySharingFromGroups_args();
+      public getPermissionType_args getEmptyArgsInstance() {
+        return new getPermissionType_args();
       }
 
-      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+      public org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
-          public void onComplete(java.lang.Boolean o) {
-            revokeEntitySharingFromGroups_result result = new revokeEntitySharingFromGroups_result();
+        return new org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType>() { 
+          public void onComplete(org.apache.airavata.sharing.registry.models.PermissionType o) {
+            getPermissionType_result result = new getPermissionType_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
             } catch (org.apache.thrift.transport.TTransportException e) {
@@ -8281,7 +8802,7 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            revokeEntitySharingFromGroups_result result = new revokeEntitySharingFromGroups_result();
+            getPermissionType_result result = new getPermissionType_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -8313,25 +8834,90 @@ protected boolean isOneway() {
         return false;
       }
 
-      public void start(I iface, revokeEntitySharingFromGroups_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
-        iface.revokeEntitySharingFromGroups(args.domainId, args.entityId, args.groupList, args.perssionTypeId,resultHandler);
+      public void start(I iface, getPermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType> resultHandler) throws org.apache.thrift.TException {
+        iface.getPermissionType(args.domainId, args.permissionTypeId,resultHandler);
       }
     }
 
-    public static class userHasAccess<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, userHasAccess_args, java.lang.Boolean> {
-      public userHasAccess() {
-        super("userHasAccess");
+    public static class getPermissionTypes<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getPermissionTypes_args, java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>> {
+      public getPermissionTypes() {
+        super("getPermissionTypes");
       }
 
-      public userHasAccess_args getEmptyArgsInstance() {
-        return new userHasAccess_args();
+      public getPermissionTypes_args getEmptyArgsInstance() {
+        return new getPermissionTypes_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>>() { 
+          public void onComplete(java.util.List<org.apache.airavata.sharing.registry.models.PermissionType> o) {
+            getPermissionTypes_result result = new getPermissionTypes_result();
+            result.success = o;
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            getPermissionTypes_result result = new getPermissionTypes_result();
+            if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
+              result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
+              result.setSreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, getPermissionTypes_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<org.apache.airavata.sharing.registry.models.PermissionType>> resultHandler) throws org.apache.thrift.TException {
+        iface.getPermissionTypes(args.domainId, args.offset, args.limit,resultHandler);
+      }
+    }
+
+    public static class shareEntityWithUsers<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, shareEntityWithUsers_args, java.lang.Boolean> {
+      public shareEntityWithUsers() {
+        super("shareEntityWithUsers");
+      }
+
+      public shareEntityWithUsers_args getEmptyArgsInstance() {
+        return new shareEntityWithUsers_args();
       }
 
       public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
           public void onComplete(java.lang.Boolean o) {
-            userHasAccess_result result = new userHasAccess_result();
+            shareEntityWithUsers_result result = new shareEntityWithUsers_result();
             result.success = o;
             result.setSuccessIsSet(true);
             try {
@@ -8347,7 +8933,271 @@ public void onComplete(java.lang.Boolean o) {
           public void onError(java.lang.Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TSerializable msg;
-            userHasAccess_result result = new userHasAccess_result();
+            shareEntityWithUsers_result result = new shareEntityWithUsers_result();
+            if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
+              result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
+              result.setSreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, shareEntityWithUsers_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.shareEntityWithUsers(args.domainId, args.entityId, args.userList, args.perssionTypeId, args.cascadePermission,resultHandler);
+      }
+    }
+
+    public static class revokeEntitySharingFromUsers<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, revokeEntitySharingFromUsers_args, java.lang.Boolean> {
+      public revokeEntitySharingFromUsers() {
+        super("revokeEntitySharingFromUsers");
+      }
+
+      public revokeEntitySharingFromUsers_args getEmptyArgsInstance() {
+        return new revokeEntitySharingFromUsers_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            revokeEntitySharingFromUsers_result result = new revokeEntitySharingFromUsers_result();
+            result.success = o;
+            result.setSuccessIsSet(true);
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            revokeEntitySharingFromUsers_result result = new revokeEntitySharingFromUsers_result();
+            if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
+              result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
+              result.setSreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, revokeEntitySharingFromUsers_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.revokeEntitySharingFromUsers(args.domainId, args.entityId, args.userList, args.perssionTypeId,resultHandler);
+      }
+    }
+
+    public static class shareEntityWithGroups<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, shareEntityWithGroups_args, java.lang.Boolean> {
+      public shareEntityWithGroups() {
+        super("shareEntityWithGroups");
+      }
+
+      public shareEntityWithGroups_args getEmptyArgsInstance() {
+        return new shareEntityWithGroups_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            shareEntityWithGroups_result result = new shareEntityWithGroups_result();
+            result.success = o;
+            result.setSuccessIsSet(true);
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            shareEntityWithGroups_result result = new shareEntityWithGroups_result();
+            if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
+              result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
+              result.setSreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, shareEntityWithGroups_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.shareEntityWithGroups(args.domainId, args.entityId, args.groupList, args.perssionTypeId, args.cascadePermission,resultHandler);
+      }
+    }
+
+    public static class revokeEntitySharingFromGroups<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, revokeEntitySharingFromGroups_args, java.lang.Boolean> {
+      public revokeEntitySharingFromGroups() {
+        super("revokeEntitySharingFromGroups");
+      }
+
+      public revokeEntitySharingFromGroups_args getEmptyArgsInstance() {
+        return new revokeEntitySharingFromGroups_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            revokeEntitySharingFromGroups_result result = new revokeEntitySharingFromGroups_result();
+            result.success = o;
+            result.setSuccessIsSet(true);
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            revokeEntitySharingFromGroups_result result = new revokeEntitySharingFromGroups_result();
+            if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
+              result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
+              result.setSreIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, revokeEntitySharingFromGroups_args args, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException {
+        iface.revokeEntitySharingFromGroups(args.domainId, args.entityId, args.groupList, args.perssionTypeId,resultHandler);
+      }
+    }
+
+    public static class userHasAccess<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, userHasAccess_args, java.lang.Boolean> {
+      public userHasAccess() {
+        super("userHasAccess");
+      }
+
+      public userHasAccess_args getEmptyArgsInstance() {
+        return new userHasAccess_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean>() { 
+          public void onComplete(java.lang.Boolean o) {
+            userHasAccess_result result = new userHasAccess_result();
+            result.success = o;
+            result.setSuccessIsSet(true);
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            userHasAccess_result result = new userHasAccess_result();
             if (e instanceof org.apache.airavata.sharing.registry.models.SharingRegistryException) {
               result.sre = (org.apache.airavata.sharing.registry.models.SharingRegistryException) e;
               result.setSreIsSet(true);
@@ -26705,28 +27555,25 @@ public void read(org.apache.thrift.protocol.TProtocol prot, removeUsersFromGroup
     }
   }
 
-  public static class getGroupMembersOfTypeUser_args implements org.apache.thrift.TBase<getGroupMembersOfTypeUser_args, getGroupMembersOfTypeUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeUser_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeUser_args");
+  public static class transferGroupOwnership_args implements org.apache.thrift.TBase<transferGroupOwnership_args, transferGroupOwnership_args._Fields>, java.io.Serializable, Cloneable, Comparable<transferGroupOwnership_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("transferGroupOwnership_args");
 
     private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
     private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
-    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)3);
-    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)4);
+    private static final org.apache.thrift.protocol.TField NEW_OWNER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("newOwnerId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeUser_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeUser_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new transferGroupOwnership_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new transferGroupOwnership_argsTupleSchemeFactory();
 
     public java.lang.String domainId; // required
     public java.lang.String groupId; // required
-    public int offset; // required
-    public int limit; // required
+    public java.lang.String newOwnerId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       DOMAIN_ID((short)1, "domainId"),
       GROUP_ID((short)2, "groupId"),
-      OFFSET((short)3, "offset"),
-      LIMIT((short)4, "limit");
+      NEW_OWNER_ID((short)3, "newOwnerId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -26745,10 +27592,8 @@ public static _Fields findByThriftId(int fieldId) {
             return DOMAIN_ID;
           case 2: // GROUP_ID
             return GROUP_ID;
-          case 3: // OFFSET
-            return OFFSET;
-          case 4: // LIMIT
-            return LIMIT;
+          case 3: // NEW_OWNER_ID
+            return NEW_OWNER_ID;
           default:
             return null;
         }
@@ -26789,76 +27634,64 @@ public short getThriftFieldId() {
     }
 
     // isset id assignments
-    private static final int __OFFSET_ISSET_ID = 0;
-    private static final int __LIMIT_ISSET_ID = 1;
-    private byte __isset_bitfield = 0;
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      tmpMap.put(_Fields.OFFSET, new org.apache.thrift.meta_data.FieldMetaData("offset", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
-      tmpMap.put(_Fields.LIMIT, new org.apache.thrift.meta_data.FieldMetaData("limit", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+      tmpMap.put(_Fields.NEW_OWNER_ID, new org.apache.thrift.meta_data.FieldMetaData("newOwnerId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeUser_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(transferGroupOwnership_args.class, metaDataMap);
     }
 
-    public getGroupMembersOfTypeUser_args() {
+    public transferGroupOwnership_args() {
     }
 
-    public getGroupMembersOfTypeUser_args(
+    public transferGroupOwnership_args(
       java.lang.String domainId,
       java.lang.String groupId,
-      int offset,
-      int limit)
+      java.lang.String newOwnerId)
     {
       this();
       this.domainId = domainId;
       this.groupId = groupId;
-      this.offset = offset;
-      setOffsetIsSet(true);
-      this.limit = limit;
-      setLimitIsSet(true);
+      this.newOwnerId = newOwnerId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getGroupMembersOfTypeUser_args(getGroupMembersOfTypeUser_args other) {
-      __isset_bitfield = other.__isset_bitfield;
+    public transferGroupOwnership_args(transferGroupOwnership_args other) {
       if (other.isSetDomainId()) {
         this.domainId = other.domainId;
       }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
-      this.offset = other.offset;
-      this.limit = other.limit;
+      if (other.isSetNewOwnerId()) {
+        this.newOwnerId = other.newOwnerId;
+      }
     }
 
-    public getGroupMembersOfTypeUser_args deepCopy() {
-      return new getGroupMembersOfTypeUser_args(this);
+    public transferGroupOwnership_args deepCopy() {
+      return new transferGroupOwnership_args(this);
     }
 
     @Override
     public void clear() {
       this.domainId = null;
       this.groupId = null;
-      setOffsetIsSet(false);
-      this.offset = 0;
-      setLimitIsSet(false);
-      this.limit = 0;
+      this.newOwnerId = null;
     }
 
     public java.lang.String getDomainId() {
       return this.domainId;
     }
 
-    public getGroupMembersOfTypeUser_args setDomainId(java.lang.String domainId) {
+    public transferGroupOwnership_args setDomainId(java.lang.String domainId) {
       this.domainId = domainId;
       return this;
     }
@@ -26882,7 +27715,7 @@ public void setDomainIdIsSet(boolean value) {
       return this.groupId;
     }
 
-    public getGroupMembersOfTypeUser_args setGroupId(java.lang.String groupId) {
+    public transferGroupOwnership_args setGroupId(java.lang.String groupId) {
       this.groupId = groupId;
       return this;
     }
@@ -26902,50 +27735,28 @@ public void setGroupIdIsSet(boolean value) {
       }
     }
 
-    public int getOffset() {
-      return this.offset;
+    public java.lang.String getNewOwnerId() {
+      return this.newOwnerId;
     }
 
-    public getGroupMembersOfTypeUser_args setOffset(int offset) {
-      this.offset = offset;
-      setOffsetIsSet(true);
+    public transferGroupOwnership_args setNewOwnerId(java.lang.String newOwnerId) {
+      this.newOwnerId = newOwnerId;
       return this;
     }
 
-    public void unsetOffset() {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    public void unsetNewOwnerId() {
+      this.newOwnerId = null;
     }
 
-    /** Returns true if field offset is set (has been assigned a value) and false otherwise */
-    public boolean isSetOffset() {
-      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __OFFSET_ISSET_ID);
-    }
-
-    public void setOffsetIsSet(boolean value) {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __OFFSET_ISSET_ID, value);
-    }
-
-    public int getLimit() {
-      return this.limit;
-    }
-
-    public getGroupMembersOfTypeUser_args setLimit(int limit) {
-      this.limit = limit;
-      setLimitIsSet(true);
-      return this;
+    /** Returns true if field newOwnerId is set (has been assigned a value) and false otherwise */
+    public boolean isSetNewOwnerId() {
+      return this.newOwnerId != null;
     }
 
-    public void unsetLimit() {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __LIMIT_ISSET_ID);
-    }
-
-    /** Returns true if field limit is set (has been assigned a value) and false otherwise */
-    public boolean isSetLimit() {
-      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __LIMIT_ISSET_ID);
-    }
-
-    public void setLimitIsSet(boolean value) {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __LIMIT_ISSET_ID, value);
+    public void setNewOwnerIdIsSet(boolean value) {
+      if (!value) {
+        this.newOwnerId = null;
+      }
     }
 
     public void setFieldValue(_Fields field, java.lang.Object value) {
@@ -26966,19 +27777,11 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         }
         break;
 
-      case OFFSET:
+      case NEW_OWNER_ID:
         if (value == null) {
-          unsetOffset();
+          unsetNewOwnerId();
         } else {
-          setOffset((java.lang.Integer)value);
-        }
-        break;
-
-      case LIMIT:
-        if (value == null) {
-          unsetLimit();
-        } else {
-          setLimit((java.lang.Integer)value);
+          setNewOwnerId((java.lang.String)value);
         }
         break;
 
@@ -26993,11 +27796,8 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
       case GROUP_ID:
         return getGroupId();
 
-      case OFFSET:
-        return getOffset();
-
-      case LIMIT:
-        return getLimit();
+      case NEW_OWNER_ID:
+        return getNewOwnerId();
 
       }
       throw new java.lang.IllegalStateException();
@@ -27014,10 +27814,8 @@ public boolean isSet(_Fields field) {
         return isSetDomainId();
       case GROUP_ID:
         return isSetGroupId();
-      case OFFSET:
-        return isSetOffset();
-      case LIMIT:
-        return isSetLimit();
+      case NEW_OWNER_ID:
+        return isSetNewOwnerId();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -27026,12 +27824,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getGroupMembersOfTypeUser_args)
-        return this.equals((getGroupMembersOfTypeUser_args)that);
+      if (that instanceof transferGroupOwnership_args)
+        return this.equals((transferGroupOwnership_args)that);
       return false;
     }
 
-    public boolean equals(getGroupMembersOfTypeUser_args that) {
+    public boolean equals(transferGroupOwnership_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -27055,21 +27853,12 @@ public boolean equals(getGroupMembersOfTypeUser_args that) {
           return false;
       }
 
-      boolean this_present_offset = true;
-      boolean that_present_offset = true;
-      if (this_present_offset || that_present_offset) {
-        if (!(this_present_offset && that_present_offset))
+      boolean this_present_newOwnerId = true && this.isSetNewOwnerId();
+      boolean that_present_newOwnerId = true && that.isSetNewOwnerId();
+      if (this_present_newOwnerId || that_present_newOwnerId) {
+        if (!(this_present_newOwnerId && that_present_newOwnerId))
           return false;
-        if (this.offset != that.offset)
-          return false;
-      }
-
-      boolean this_present_limit = true;
-      boolean that_present_limit = true;
-      if (this_present_limit || that_present_limit) {
-        if (!(this_present_limit && that_present_limit))
-          return false;
-        if (this.limit != that.limit)
+        if (!this.newOwnerId.equals(that.newOwnerId))
           return false;
       }
 
@@ -27088,15 +27877,15 @@ public int hashCode() {
       if (isSetGroupId())
         hashCode = hashCode * 8191 + groupId.hashCode();
 
-      hashCode = hashCode * 8191 + offset;
-
-      hashCode = hashCode * 8191 + limit;
+      hashCode = hashCode * 8191 + ((isSetNewOwnerId()) ? 131071 : 524287);
+      if (isSetNewOwnerId())
+        hashCode = hashCode * 8191 + newOwnerId.hashCode();
 
       return hashCode;
     }
 
     @Override
-    public int compareTo(getGroupMembersOfTypeUser_args other) {
+    public int compareTo(transferGroupOwnership_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -27123,22 +27912,12 @@ public int compareTo(getGroupMembersOfTypeUser_args other) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetOffset()).compareTo(other.isSetOffset());
+      lastComparison = java.lang.Boolean.valueOf(isSetNewOwnerId()).compareTo(other.isSetNewOwnerId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetOffset()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.offset, other.offset);
-        if (lastComparison != 0) {
-          return lastComparison;
-        }
-      }
-      lastComparison = java.lang.Boolean.valueOf(isSetLimit()).compareTo(other.isSetLimit());
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-      if (isSetLimit()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.limit, other.limit);
+      if (isSetNewOwnerId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.newOwnerId, other.newOwnerId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -27160,7 +27939,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeUser_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("transferGroupOwnership_args(");
       boolean first = true;
 
       sb.append("domainId:");
@@ -27179,12 +27958,12 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("offset:");
-      sb.append(this.offset);
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("limit:");
-      sb.append(this.limit);
+      sb.append("newOwnerId:");
+      if (this.newOwnerId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.newOwnerId);
+      }
       first = false;
       sb.append(")");
       return sb.toString();
@@ -27192,11 +27971,15 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
-      // alas, we cannot check 'offset' because it's a primitive and you chose the non-beans generator.
-      // alas, we cannot check 'limit' because it's a primitive and you chose the non-beans generator.
+      if (newOwnerId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'newOwnerId' was not present! Struct: " + toString());
+      }
       // check for sub-struct validity
     }
 
@@ -27210,23 +27993,21 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
       try {
-        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-        __isset_bitfield = 0;
         read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
       } catch (org.apache.thrift.TException te) {
         throw new java.io.IOException(te);
       }
     }
 
-    private static class getGroupMembersOfTypeUser_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeUser_argsStandardScheme getScheme() {
-        return new getGroupMembersOfTypeUser_argsStandardScheme();
+    private static class transferGroupOwnership_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public transferGroupOwnership_argsStandardScheme getScheme() {
+        return new transferGroupOwnership_argsStandardScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeUser_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeUser_args> {
+    private static class transferGroupOwnership_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<transferGroupOwnership_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, transferGroupOwnership_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -27252,18 +28033,10 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 3: // OFFSET
-              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-                struct.offset = iprot.readI32();
-                struct.setOffsetIsSet(true);
-              } else { 
-                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-              }
-              break;
-            case 4: // LIMIT
-              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-                struct.limit = iprot.readI32();
-                struct.setLimitIsSet(true);
+            case 3: // NEW_OWNER_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.newOwnerId = iprot.readString();
+                struct.setNewOwnerIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -27276,16 +28049,10 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
         iprot.readStructEnd();
 
         // check for required fields of primitive type, which can't be checked in the validate method
-        if (!struct.isSetOffset()) {
-          throw new org.apache.thrift.protocol.TProtocolException("Required field 'offset' was not found in serialized data! Struct: " + toString());
-        }
-        if (!struct.isSetLimit()) {
-          throw new org.apache.thrift.protocol.TProtocolException("Required field 'limit' was not found in serialized data! Struct: " + toString());
-        }
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, transferGroupOwnership_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -27299,56 +28066,42 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfT
           oprot.writeString(struct.groupId);
           oprot.writeFieldEnd();
         }
-        oprot.writeFieldBegin(OFFSET_FIELD_DESC);
-        oprot.writeI32(struct.offset);
-        oprot.writeFieldEnd();
-        oprot.writeFieldBegin(LIMIT_FIELD_DESC);
-        oprot.writeI32(struct.limit);
-        oprot.writeFieldEnd();
+        if (struct.newOwnerId != null) {
+          oprot.writeFieldBegin(NEW_OWNER_ID_FIELD_DESC);
+          oprot.writeString(struct.newOwnerId);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
 
     }
 
-    private static class getGroupMembersOfTypeUser_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeUser_argsTupleScheme getScheme() {
-        return new getGroupMembersOfTypeUser_argsTupleScheme();
+    private static class transferGroupOwnership_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public transferGroupOwnership_argsTupleScheme getScheme() {
+        return new transferGroupOwnership_argsTupleScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeUser_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeUser_args> {
+    private static class transferGroupOwnership_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<transferGroupOwnership_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, transferGroupOwnership_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.groupId);
-        oprot.writeI32(struct.offset);
-        oprot.writeI32(struct.limit);
-        java.util.BitSet optionals = new java.util.BitSet();
-        if (struct.isSetDomainId()) {
-          optionals.set(0);
-        }
-        oprot.writeBitSet(optionals, 1);
-        if (struct.isSetDomainId()) {
-          oprot.writeString(struct.domainId);
-        }
+        oprot.writeString(struct.newOwnerId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, transferGroupOwnership_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.groupId = iprot.readString();
         struct.setGroupIdIsSet(true);
-        struct.offset = iprot.readI32();
-        struct.setOffsetIsSet(true);
-        struct.limit = iprot.readI32();
-        struct.setLimitIsSet(true);
-        java.util.BitSet incoming = iprot.readBitSet(1);
-        if (incoming.get(0)) {
-          struct.domainId = iprot.readString();
-          struct.setDomainIdIsSet(true);
-        }
+        struct.newOwnerId = iprot.readString();
+        struct.setNewOwnerIdIsSet(true);
       }
     }
 
@@ -27357,16 +28110,16 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTyp
     }
   }
 
-  public static class getGroupMembersOfTypeUser_result implements org.apache.thrift.TBase<getGroupMembersOfTypeUser_result, getGroupMembersOfTypeUser_result._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeUser_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeUser_result");
+  public static class transferGroupOwnership_result implements org.apache.thrift.TBase<transferGroupOwnership_result, transferGroupOwnership_result._Fields>, java.io.Serializable, Cloneable, Comparable<transferGroupOwnership_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("transferGroupOwnership_result");
 
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
     private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeUser_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeUser_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new transferGroupOwnership_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new transferGroupOwnership_resultTupleSchemeFactory();
 
-    public java.util.List<org.apache.airavata.sharing.registry.models.User> success; // required
+    public boolean success; // required
     public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
@@ -27431,100 +28184,82 @@ public short getThriftFieldId() {
     }
 
     // isset id assignments
+    private static final int __SUCCESS_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.User.class))));
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
       tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeUser_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(transferGroupOwnership_result.class, metaDataMap);
     }
 
-    public getGroupMembersOfTypeUser_result() {
+    public transferGroupOwnership_result() {
     }
 
-    public getGroupMembersOfTypeUser_result(
-      java.util.List<org.apache.airavata.sharing.registry.models.User> success,
+    public transferGroupOwnership_result(
+      boolean success,
       org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
     {
       this();
       this.success = success;
+      setSuccessIsSet(true);
       this.sre = sre;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getGroupMembersOfTypeUser_result(getGroupMembersOfTypeUser_result other) {
-      if (other.isSetSuccess()) {
-        java.util.List<org.apache.airavata.sharing.registry.models.User> __this__success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(other.success.size());
-        for (org.apache.airavata.sharing.registry.models.User other_element : other.success) {
-          __this__success.add(new org.apache.airavata.sharing.registry.models.User(other_element));
-        }
-        this.success = __this__success;
-      }
+    public transferGroupOwnership_result(transferGroupOwnership_result other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.success = other.success;
       if (other.isSetSre()) {
         this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
       }
     }
 
-    public getGroupMembersOfTypeUser_result deepCopy() {
-      return new getGroupMembersOfTypeUser_result(this);
+    public transferGroupOwnership_result deepCopy() {
+      return new transferGroupOwnership_result(this);
     }
 
     @Override
     public void clear() {
-      this.success = null;
+      setSuccessIsSet(false);
+      this.success = false;
       this.sre = null;
     }
 
-    public int getSuccessSize() {
-      return (this.success == null) ? 0 : this.success.size();
-    }
-
-    public java.util.Iterator<org.apache.airavata.sharing.registry.models.User> getSuccessIterator() {
-      return (this.success == null) ? null : this.success.iterator();
-    }
-
-    public void addToSuccess(org.apache.airavata.sharing.registry.models.User elem) {
-      if (this.success == null) {
-        this.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>();
-      }
-      this.success.add(elem);
-    }
-
-    public java.util.List<org.apache.airavata.sharing.registry.models.User> getSuccess() {
+    public boolean isSuccess() {
       return this.success;
     }
 
-    public getGroupMembersOfTypeUser_result setSuccess(java.util.List<org.apache.airavata.sharing.registry.models.User> success) {
+    public transferGroupOwnership_result setSuccess(boolean success) {
       this.success = success;
+      setSuccessIsSet(true);
       return this;
     }
 
     public void unsetSuccess() {
-      this.success = null;
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
     }
 
     /** Returns true if field success is set (has been assigned a value) and false otherwise */
     public boolean isSetSuccess() {
-      return this.success != null;
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
     }
 
     public void setSuccessIsSet(boolean value) {
-      if (!value) {
-        this.success = null;
-      }
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
     }
 
     public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
       return this.sre;
     }
 
-    public getGroupMembersOfTypeUser_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+    public transferGroupOwnership_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
       this.sre = sre;
       return this;
     }
@@ -27550,7 +28285,7 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         if (value == null) {
           unsetSuccess();
         } else {
-          setSuccess((java.util.List<org.apache.airavata.sharing.registry.models.User>)value);
+          setSuccess((java.lang.Boolean)value);
         }
         break;
 
@@ -27568,7 +28303,7 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
       case SUCCESS:
-        return getSuccess();
+        return isSuccess();
 
       case SRE:
         return getSre();
@@ -27596,23 +28331,23 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getGroupMembersOfTypeUser_result)
-        return this.equals((getGroupMembersOfTypeUser_result)that);
+      if (that instanceof transferGroupOwnership_result)
+        return this.equals((transferGroupOwnership_result)that);
       return false;
     }
 
-    public boolean equals(getGroupMembersOfTypeUser_result that) {
+    public boolean equals(transferGroupOwnership_result that) {
       if (that == null)
         return false;
       if (this == that)
         return true;
 
-      boolean this_present_success = true && this.isSetSuccess();
-      boolean that_present_success = true && that.isSetSuccess();
+      boolean this_present_success = true;
+      boolean that_present_success = true;
       if (this_present_success || that_present_success) {
         if (!(this_present_success && that_present_success))
           return false;
-        if (!this.success.equals(that.success))
+        if (this.success != that.success)
           return false;
       }
 
@@ -27632,9 +28367,7 @@ public boolean equals(getGroupMembersOfTypeUser_result that) {
     public int hashCode() {
       int hashCode = 1;
 
-      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
-      if (isSetSuccess())
-        hashCode = hashCode * 8191 + success.hashCode();
+      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
 
       hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
       if (isSetSre())
@@ -27644,7 +28377,7 @@ public int hashCode() {
     }
 
     @Override
-    public int compareTo(getGroupMembersOfTypeUser_result other) {
+    public int compareTo(transferGroupOwnership_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -27688,15 +28421,11 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeUser_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("transferGroupOwnership_result(");
       boolean first = true;
 
       sb.append("success:");
-      if (this.success == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.success);
-      }
+      sb.append(this.success);
       first = false;
       if (!first) sb.append(", ");
       sb.append("sre:");
@@ -27725,21 +28454,23 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
       try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
         read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
       } catch (org.apache.thrift.TException te) {
         throw new java.io.IOException(te);
       }
     }
 
-    private static class getGroupMembersOfTypeUser_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeUser_resultStandardScheme getScheme() {
-        return new getGroupMembersOfTypeUser_resultStandardScheme();
+    private static class transferGroupOwnership_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public transferGroupOwnership_resultStandardScheme getScheme() {
+        return new transferGroupOwnership_resultStandardScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeUser_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeUser_result> {
+    private static class transferGroupOwnership_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<transferGroupOwnership_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, transferGroupOwnership_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -27750,19 +28481,8 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
           }
           switch (schemeField.id) {
             case 0: // SUCCESS
-              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
-                {
-                  org.apache.thrift.protocol.TList _list40 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list40.size);
-                  org.apache.airavata.sharing.registry.models.User _elem41;
-                  for (int _i42 = 0; _i42 < _list40.size; ++_i42)
-                  {
-                    _elem41 = new org.apache.airavata.sharing.registry.models.User();
-                    _elem41.read(iprot);
-                    struct.success.add(_elem41);
-                  }
-                  iprot.readListEnd();
-                }
+              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                struct.success = iprot.readBool();
                 struct.setSuccessIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
@@ -27788,20 +28508,13 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, transferGroupOwnership_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.success != null) {
+        if (struct.isSetSuccess()) {
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-          {
-            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.User _iter43 : struct.success)
-            {
-              _iter43.write(oprot);
-            }
-            oprot.writeListEnd();
-          }
+          oprot.writeBool(struct.success);
           oprot.writeFieldEnd();
         }
         if (struct.sre != null) {
@@ -27815,16 +28528,16 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfT
 
     }
 
-    private static class getGroupMembersOfTypeUser_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeUser_resultTupleScheme getScheme() {
-        return new getGroupMembersOfTypeUser_resultTupleScheme();
+    private static class transferGroupOwnership_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public transferGroupOwnership_resultTupleScheme getScheme() {
+        return new transferGroupOwnership_resultTupleScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeUser_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeUser_result> {
+    private static class transferGroupOwnership_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<transferGroupOwnership_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, transferGroupOwnership_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
         if (struct.isSetSuccess()) {
@@ -27835,13 +28548,7 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTy
         }
         oprot.writeBitSet(optionals, 2);
         if (struct.isSetSuccess()) {
-          {
-            oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.User _iter44 : struct.success)
-            {
-              _iter44.write(oprot);
-            }
-          }
+          oprot.writeBool(struct.success);
         }
         if (struct.isSetSre()) {
           struct.sre.write(oprot);
@@ -27849,21 +28556,11 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTy
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, transferGroupOwnership_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
-          {
-            org.apache.thrift.protocol.TList _list45 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list45.size);
-            org.apache.airavata.sharing.registry.models.User _elem46;
-            for (int _i47 = 0; _i47 < _list45.size; ++_i47)
-            {
-              _elem46 = new org.apache.airavata.sharing.registry.models.User();
-              _elem46.read(iprot);
-              struct.success.add(_elem46);
-            }
-          }
+          struct.success = iprot.readBool();
           struct.setSuccessIsSet(true);
         }
         if (incoming.get(1)) {
@@ -27879,28 +28576,25 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTyp
     }
   }
 
-  public static class getGroupMembersOfTypeGroup_args implements org.apache.thrift.TBase<getGroupMembersOfTypeGroup_args, getGroupMembersOfTypeGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeGroup_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeGroup_args");
+  public static class addGroupAdmins_args implements org.apache.thrift.TBase<addGroupAdmins_args, addGroupAdmins_args._Fields>, java.io.Serializable, Cloneable, Comparable<addGroupAdmins_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addGroupAdmins_args");
 
     private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
     private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
-    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)3);
-    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)4);
+    private static final org.apache.thrift.protocol.TField ADMIN_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("adminIds", org.apache.thrift.protocol.TType.LIST, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addGroupAdmins_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addGroupAdmins_argsTupleSchemeFactory();
 
     public java.lang.String domainId; // required
     public java.lang.String groupId; // required
-    public int offset; // required
-    public int limit; // required
+    public java.util.List<java.lang.String> adminIds; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       DOMAIN_ID((short)1, "domainId"),
       GROUP_ID((short)2, "groupId"),
-      OFFSET((short)3, "offset"),
-      LIMIT((short)4, "limit");
+      ADMIN_IDS((short)3, "adminIds");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -27919,10 +28613,8 @@ public static _Fields findByThriftId(int fieldId) {
             return DOMAIN_ID;
           case 2: // GROUP_ID
             return GROUP_ID;
-          case 3: // OFFSET
-            return OFFSET;
-          case 4: // LIMIT
-            return LIMIT;
+          case 3: // ADMIN_IDS
+            return ADMIN_IDS;
           default:
             return null;
         }
@@ -27963,9 +28655,6 @@ public short getThriftFieldId() {
     }
 
     // isset id assignments
-    private static final int __OFFSET_ISSET_ID = 0;
-    private static final int __LIMIT_ISSET_ID = 1;
-    private byte __isset_bitfield = 0;
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -27973,66 +28662,59 @@ public short getThriftFieldId() {
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      tmpMap.put(_Fields.OFFSET, new org.apache.thrift.meta_data.FieldMetaData("offset", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
-      tmpMap.put(_Fields.LIMIT, new org.apache.thrift.meta_data.FieldMetaData("limit", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+      tmpMap.put(_Fields.ADMIN_IDS, new org.apache.thrift.meta_data.FieldMetaData("adminIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeGroup_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addGroupAdmins_args.class, metaDataMap);
     }
 
-    public getGroupMembersOfTypeGroup_args() {
+    public addGroupAdmins_args() {
     }
 
-    public getGroupMembersOfTypeGroup_args(
+    public addGroupAdmins_args(
       java.lang.String domainId,
       java.lang.String groupId,
-      int offset,
-      int limit)
+      java.util.List<java.lang.String> adminIds)
     {
       this();
       this.domainId = domainId;
       this.groupId = groupId;
-      this.offset = offset;
-      setOffsetIsSet(true);
-      this.limit = limit;
-      setLimitIsSet(true);
+      this.adminIds = adminIds;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getGroupMembersOfTypeGroup_args(getGroupMembersOfTypeGroup_args other) {
-      __isset_bitfield = other.__isset_bitfield;
+    public addGroupAdmins_args(addGroupAdmins_args other) {
       if (other.isSetDomainId()) {
         this.domainId = other.domainId;
       }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
-      this.offset = other.offset;
-      this.limit = other.limit;
+      if (other.isSetAdminIds()) {
+        java.util.List<java.lang.String> __this__adminIds = new java.util.ArrayList<java.lang.String>(other.adminIds);
+        this.adminIds = __this__adminIds;
+      }
     }
 
-    public getGroupMembersOfTypeGroup_args deepCopy() {
-      return new getGroupMembersOfTypeGroup_args(this);
+    public addGroupAdmins_args deepCopy() {
+      return new addGroupAdmins_args(this);
     }
 
     @Override
     public void clear() {
       this.domainId = null;
       this.groupId = null;
-      setOffsetIsSet(false);
-      this.offset = 0;
-      setLimitIsSet(false);
-      this.limit = 0;
+      this.adminIds = null;
     }
 
     public java.lang.String getDomainId() {
       return this.domainId;
     }
 
-    public getGroupMembersOfTypeGroup_args setDomainId(java.lang.String domainId) {
+    public addGroupAdmins_args setDomainId(java.lang.String domainId) {
       this.domainId = domainId;
       return this;
     }
@@ -28056,7 +28738,7 @@ public void setDomainIdIsSet(boolean value) {
       return this.groupId;
     }
 
-    public getGroupMembersOfTypeGroup_args setGroupId(java.lang.String groupId) {
+    public addGroupAdmins_args setGroupId(java.lang.String groupId) {
       this.groupId = groupId;
       return this;
     }
@@ -28076,50 +28758,43 @@ public void setGroupIdIsSet(boolean value) {
       }
     }
 
-    public int getOffset() {
-      return this.offset;
-    }
-
-    public getGroupMembersOfTypeGroup_args setOffset(int offset) {
-      this.offset = offset;
-      setOffsetIsSet(true);
-      return this;
-    }
-
-    public void unsetOffset() {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    public int getAdminIdsSize() {
+      return (this.adminIds == null) ? 0 : this.adminIds.size();
     }
 
-    /** Returns true if field offset is set (has been assigned a value) and false otherwise */
-    public boolean isSetOffset() {
-      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    public java.util.Iterator<java.lang.String> getAdminIdsIterator() {
+      return (this.adminIds == null) ? null : this.adminIds.iterator();
     }
 
-    public void setOffsetIsSet(boolean value) {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __OFFSET_ISSET_ID, value);
+    public void addToAdminIds(java.lang.String elem) {
+      if (this.adminIds == null) {
+        this.adminIds = new java.util.ArrayList<java.lang.String>();
+      }
+      this.adminIds.add(elem);
     }
 
-    public int getLimit() {
-      return this.limit;
+    public java.util.List<java.lang.String> getAdminIds() {
+      return this.adminIds;
     }
 
-    public getGroupMembersOfTypeGroup_args setLimit(int limit) {
-      this.limit = limit;
-      setLimitIsSet(true);
+    public addGroupAdmins_args setAdminIds(java.util.List<java.lang.String> adminIds) {
+      this.adminIds = adminIds;
       return this;
     }
 
-    public void unsetLimit() {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __LIMIT_ISSET_ID);
+    public void unsetAdminIds() {
+      this.adminIds = null;
     }
 
-    /** Returns true if field limit is set (has been assigned a value) and false otherwise */
-    public boolean isSetLimit() {
-      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __LIMIT_ISSET_ID);
+    /** Returns true if field adminIds is set (has been assigned a value) and false otherwise */
+    public boolean isSetAdminIds() {
+      return this.adminIds != null;
     }
 
-    public void setLimitIsSet(boolean value) {
-      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __LIMIT_ISSET_ID, value);
+    public void setAdminIdsIsSet(boolean value) {
+      if (!value) {
+        this.adminIds = null;
+      }
     }
 
     public void setFieldValue(_Fields field, java.lang.Object value) {
@@ -28140,19 +28815,11 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         }
         break;
 
-      case OFFSET:
-        if (value == null) {
-          unsetOffset();
-        } else {
-          setOffset((java.lang.Integer)value);
-        }
-        break;
-
-      case LIMIT:
+      case ADMIN_IDS:
         if (value == null) {
-          unsetLimit();
+          unsetAdminIds();
         } else {
-          setLimit((java.lang.Integer)value);
+          setAdminIds((java.util.List<java.lang.String>)value);
         }
         break;
 
@@ -28167,11 +28834,8 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
       case GROUP_ID:
         return getGroupId();
 
-      case OFFSET:
-        return getOffset();
-
-      case LIMIT:
-        return getLimit();
+      case ADMIN_IDS:
+        return getAdminIds();
 
       }
       throw new java.lang.IllegalStateException();
@@ -28188,10 +28852,8 @@ public boolean isSet(_Fields field) {
         return isSetDomainId();
       case GROUP_ID:
         return isSetGroupId();
-      case OFFSET:
-        return isSetOffset();
-      case LIMIT:
-        return isSetLimit();
+      case ADMIN_IDS:
+        return isSetAdminIds();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -28200,12 +28862,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getGroupMembersOfTypeGroup_args)
-        return this.equals((getGroupMembersOfTypeGroup_args)that);
+      if (that instanceof addGroupAdmins_args)
+        return this.equals((addGroupAdmins_args)that);
       return false;
     }
 
-    public boolean equals(getGroupMembersOfTypeGroup_args that) {
+    public boolean equals(addGroupAdmins_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -28229,21 +28891,12 @@ public boolean equals(getGroupMembersOfTypeGroup_args that) {
           return false;
       }
 
-      boolean this_present_offset = true;
-      boolean that_present_offset = true;
-      if (this_present_offset || that_present_offset) {
-        if (!(this_present_offset && that_present_offset))
-          return false;
-        if (this.offset != that.offset)
-          return false;
-      }
-
-      boolean this_present_limit = true;
-      boolean that_present_limit = true;
-      if (this_present_limit || that_present_limit) {
-        if (!(this_present_limit && that_present_limit))
+      boolean this_present_adminIds = true && this.isSetAdminIds();
+      boolean that_present_adminIds = true && that.isSetAdminIds();
+      if (this_present_adminIds || that_present_adminIds) {
+        if (!(this_present_adminIds && that_present_adminIds))
           return false;
-        if (this.limit != that.limit)
+        if (!this.adminIds.equals(that.adminIds))
           return false;
       }
 
@@ -28262,15 +28915,15 @@ public int hashCode() {
       if (isSetGroupId())
         hashCode = hashCode * 8191 + groupId.hashCode();
 
-      hashCode = hashCode * 8191 + offset;
-
-      hashCode = hashCode * 8191 + limit;
+      hashCode = hashCode * 8191 + ((isSetAdminIds()) ? 131071 : 524287);
+      if (isSetAdminIds())
+        hashCode = hashCode * 8191 + adminIds.hashCode();
 
       return hashCode;
     }
 
     @Override
-    public int compareTo(getGroupMembersOfTypeGroup_args other) {
+    public int compareTo(addGroupAdmins_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -28297,22 +28950,12 @@ public int compareTo(getGroupMembersOfTypeGroup_args other) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetOffset()).compareTo(other.isSetOffset());
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-      if (isSetOffset()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.offset, other.offset);
-        if (lastComparison != 0) {
-          return lastComparison;
-        }
-      }
-      lastComparison = java.lang.Boolean.valueOf(isSetLimit()).compareTo(other.isSetLimit());
+      lastComparison = java.lang.Boolean.valueOf(isSetAdminIds()).compareTo(other.isSetAdminIds());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetLimit()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.limit, other.limit);
+      if (isSetAdminIds()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.adminIds, other.adminIds);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -28334,7 +28977,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeGroup_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("addGroupAdmins_args(");
       boolean first = true;
 
       sb.append("domainId:");
@@ -28353,12 +28996,12 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("offset:");
-      sb.append(this.offset);
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("limit:");
-      sb.append(this.limit);
+      sb.append("adminIds:");
+      if (this.adminIds == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.adminIds);
+      }
       first = false;
       sb.append(")");
       return sb.toString();
@@ -28372,8 +29015,9 @@ public void validate() throws org.apache.thrift.TException {
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
-      // alas, we cannot check 'offset' because it's a primitive and you chose the non-beans generator.
-      // alas, we cannot check 'limit' because it's a primitive and you chose the non-beans generator.
+      if (adminIds == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'adminIds' was not present! Struct: " + toString());
+      }
       // check for sub-struct validity
     }
 
@@ -28387,23 +29031,21 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
       try {
-        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
-        __isset_bitfield = 0;
         read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
       } catch (org.apache.thrift.TException te) {
         throw new java.io.IOException(te);
       }
     }
 
-    private static class getGroupMembersOfTypeGroup_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeGroup_argsStandardScheme getScheme() {
-        return new getGroupMembersOfTypeGroup_argsStandardScheme();
+    private static class addGroupAdmins_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addGroupAdmins_argsStandardScheme getScheme() {
+        return new addGroupAdmins_argsStandardScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeGroup_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeGroup_args> {
+    private static class addGroupAdmins_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<addGroupAdmins_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, addGroupAdmins_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -28429,18 +29071,20 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 3: // OFFSET
-              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-                struct.offset = iprot.readI32();
-                struct.setOffsetIsSet(true);
-              } else { 
-                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-              }
-              break;
-            case 4: // LIMIT
-              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-                struct.limit = iprot.readI32();
-                struct.setLimitIsSet(true);
+            case 3: // ADMIN_IDS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list40 = iprot.readListBegin();
+                  struct.adminIds = new java.util.ArrayList<java.lang.String>(_list40.size);
+                  java.lang.String _elem41;
+                  for (int _i42 = 0; _i42 < _list40.size; ++_i42)
+                  {
+                    _elem41 = iprot.readString();
+                    struct.adminIds.add(_elem41);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setAdminIdsIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -28453,16 +29097,10 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
         iprot.readStructEnd();
 
         // check for required fields of primitive type, which can't be checked in the validate method
-        if (!struct.isSetOffset()) {
-          throw new org.apache.thrift.protocol.TProtocolException("Required field 'offset' was not found in serialized data! Struct: " + toString());
-        }
-        if (!struct.isSetLimit()) {
-          throw new org.apache.thrift.protocol.TProtocolException("Required field 'limit' was not found in serialized data! Struct: " + toString());
-        }
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, addGroupAdmins_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -28476,46 +29114,64 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfT
           oprot.writeString(struct.groupId);
           oprot.writeFieldEnd();
         }
-        oprot.writeFieldBegin(OFFSET_FIELD_DESC);
-        oprot.writeI32(struct.offset);
-        oprot.writeFieldEnd();
-        oprot.writeFieldBegin(LIMIT_FIELD_DESC);
-        oprot.writeI32(struct.limit);
-        oprot.writeFieldEnd();
+        if (struct.adminIds != null) {
+          oprot.writeFieldBegin(ADMIN_IDS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.adminIds.size()));
+            for (java.lang.String _iter43 : struct.adminIds)
+            {
+              oprot.writeString(_iter43);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
 
     }
 
-    private static class getGroupMembersOfTypeGroup_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeGroup_argsTupleScheme getScheme() {
-        return new getGroupMembersOfTypeGroup_argsTupleScheme();
+    private static class addGroupAdmins_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addGroupAdmins_argsTupleScheme getScheme() {
+        return new addGroupAdmins_argsTupleScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeGroup_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeGroup_args> {
+    private static class addGroupAdmins_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<addGroupAdmins_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, addGroupAdmins_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         oprot.writeString(struct.domainId);
         oprot.writeString(struct.groupId);
-        oprot.writeI32(struct.offset);
-        oprot.writeI32(struct.limit);
+        {
+          oprot.writeI32(struct.adminIds.size());
+          for (java.lang.String _iter44 : struct.adminIds)
+          {
+            oprot.writeString(_iter44);
+          }
+        }
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, addGroupAdmins_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.domainId = iprot.readString();
         struct.setDomainIdIsSet(true);
         struct.groupId = iprot.readString();
         struct.setGroupIdIsSet(true);
-        struct.offset = iprot.readI32();
-        struct.setOffsetIsSet(true);
-        struct.limit = iprot.readI32();
-        struct.setLimitIsSet(true);
+        {
+          org.apache.thrift.protocol.TList _list45 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.adminIds = new java.util.ArrayList<java.lang.String>(_list45.size);
+          java.lang.String _elem46;
+          for (int _i47 = 0; _i47 < _list45.size; ++_i47)
+          {
+            _elem46 = iprot.readString();
+            struct.adminIds.add(_elem46);
+          }
+        }
+        struct.setAdminIdsIsSet(true);
       }
     }
 
@@ -28524,16 +29180,16 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTyp
     }
   }
 
-  public static class getGroupMembersOfTypeGroup_result implements org.apache.thrift.TBase<getGroupMembersOfTypeGroup_result, getGroupMembersOfTypeGroup_result._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeGroup_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeGroup_result");
+  public static class addGroupAdmins_result implements org.apache.thrift.TBase<addGroupAdmins_result, addGroupAdmins_result._Fields>, java.io.Serializable, Cloneable, Comparable<addGroupAdmins_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addGroupAdmins_result");
 
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
     private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addGroupAdmins_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addGroupAdmins_resultTupleSchemeFactory();
 
-    public java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success; // required
+    public boolean success; // required
     public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
@@ -28598,100 +29254,82 @@ public short getThriftFieldId() {
     }
 
     // isset id assignments
+    private static final int __SUCCESS_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
     public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.UserGroup.class))));
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
       tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeGroup_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addGroupAdmins_result.class, metaDataMap);
     }
 
-    public getGroupMembersOfTypeGroup_result() {
+    public addGroupAdmins_result() {
     }
 
-    public getGroupMembersOfTypeGroup_result(
-      java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success,
+    public addGroupAdmins_result(
+      boolean success,
       org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
     {
       this();
       this.success = success;
+      setSuccessIsSet(true);
       this.sre = sre;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getGroupMembersOfTypeGroup_result(getGroupMembersOfTypeGroup_result other) {
-      if (other.isSetSuccess()) {
-        java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> __this__success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(other.success.size());
-        for (org.apache.airavata.sharing.registry.models.UserGroup other_element : other.success) {
-          __this__success.add(new org.apache.airavata.sharing.registry.models.UserGroup(other_element));
-        }
-        this.success = __this__success;
-      }
+    public addGroupAdmins_result(addGroupAdmins_result other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.success = other.success;
       if (other.isSetSre()) {
         this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
       }
     }
 
-    public getGroupMembersOfTypeGroup_result deepCopy() {
-      return new getGroupMembersOfTypeGroup_result(this);
+    public addGroupAdmins_result deepCopy() {
+      return new addGroupAdmins_result(this);
     }
 
     @Override
     public void clear() {
-      this.success = null;
+      setSuccessIsSet(false);
+      this.success = false;
       this.sre = null;
     }
 
-    public int getSuccessSize() {
-      return (this.success == null) ? 0 : this.success.size();
-    }
-
-    public java.util.Iterator<org.apache.airavata.sharing.registry.models.UserGroup> getSuccessIterator() {
-      return (this.success == null) ? null : this.success.iterator();
-    }
-
-    public void addToSuccess(org.apache.airavata.sharing.registry.models.UserGroup elem) {
-      if (this.success == null) {
-        this.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>();
-      }
-      this.success.add(elem);
-    }
-
-    public java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> getSuccess() {
+    public boolean isSuccess() {
       return this.success;
     }
 
-    public getGroupMembersOfTypeGroup_result setSuccess(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success) {
+    public addGroupAdmins_result setSuccess(boolean success) {
       this.success = success;
+      setSuccessIsSet(true);
       return this;
     }
 
     public void unsetSuccess() {
-      this.success = null;
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
     }
 
     /** Returns true if field success is set (has been assigned a value) and false otherwise */
     public boolean isSetSuccess() {
-      return this.success != null;
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
     }
 
     public void setSuccessIsSet(boolean value) {
-      if (!value) {
-        this.success = null;
-      }
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
     }
 
     public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
       return this.sre;
     }
 
-    public getGroupMembersOfTypeGroup_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+    public addGroupAdmins_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
       this.sre = sre;
       return this;
     }
@@ -28717,7 +29355,7 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         if (value == null) {
           unsetSuccess();
         } else {
-          setSuccess((java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>)value);
+          setSuccess((java.lang.Boolean)value);
         }
         break;
 
@@ -28735,7 +29373,7 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
     public java.lang.Object getFieldValue(_Fields field) {
       switch (field) {
       case SUCCESS:
-        return getSuccess();
+        return isSuccess();
 
       case SRE:
         return getSre();
@@ -28763,23 +29401,23 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getGroupMembersOfTypeGroup_result)
-        return this.equals((getGroupMembersOfTypeGroup_result)that);
+      if (that instanceof addGroupAdmins_result)
+        return this.equals((addGroupAdmins_result)that);
       return false;
     }
 
-    public boolean equals(getGroupMembersOfTypeGroup_result that) {
+    public boolean equals(addGroupAdmins_result that) {
       if (that == null)
         return false;
       if (this == that)
         return true;
 
-      boolean this_present_success = true && this.isSetSuccess();
-      boolean that_present_success = true && that.isSetSuccess();
+      boolean this_present_success = true;
+      boolean that_present_success = true;
       if (this_present_success || that_present_success) {
         if (!(this_present_success && that_present_success))
           return false;
-        if (!this.success.equals(that.success))
+        if (this.success != that.success)
           return false;
       }
 
@@ -28799,9 +29437,7 @@ public boolean equals(getGroupMembersOfTypeGroup_result that) {
     public int hashCode() {
       int hashCode = 1;
 
-      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
-      if (isSetSuccess())
-        hashCode = hashCode * 8191 + success.hashCode();
+      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
 
       hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
       if (isSetSre())
@@ -28811,7 +29447,7 @@ public int hashCode() {
     }
 
     @Override
-    public int compareTo(getGroupMembersOfTypeGroup_result other) {
+    public int compareTo(addGroupAdmins_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -28855,15 +29491,11 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeGroup_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("addGroupAdmins_result(");
       boolean first = true;
 
       sb.append("success:");
-      if (this.success == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.success);
-      }
+      sb.append(this.success);
       first = false;
       if (!first) sb.append(", ");
       sb.append("sre:");
@@ -28892,21 +29524,23 @@ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOExcept
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
       try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
         read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
       } catch (org.apache.thrift.TException te) {
         throw new java.io.IOException(te);
       }
     }
 
-    private static class getGroupMembersOfTypeGroup_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeGroup_resultStandardScheme getScheme() {
-        return new getGroupMembersOfTypeGroup_resultStandardScheme();
+    private static class addGroupAdmins_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addGroupAdmins_resultStandardScheme getScheme() {
+        return new addGroupAdmins_resultStandardScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeGroup_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeGroup_result> {
+    private static class addGroupAdmins_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<addGroupAdmins_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, addGroupAdmins_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -28917,19 +29551,8 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
           }
           switch (schemeField.id) {
             case 0: // SUCCESS
-              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
-                {
-                  org.apache.thrift.protocol.TList _list48 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list48.size);
-                  org.apache.airavata.sharing.registry.models.UserGroup _elem49;
-                  for (int _i50 = 0; _i50 < _list48.size; ++_i50)
-                  {
-                    _elem49 = new org.apache.airavata.sharing.registry.models.UserGroup();
-                    _elem49.read(iprot);
-                    struct.success.add(_elem49);
-                  }
-                  iprot.readListEnd();
-                }
+              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                struct.success = iprot.readBool();
                 struct.setSuccessIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
@@ -28955,20 +29578,13 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTy
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, addGroupAdmins_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.success != null) {
+        if (struct.isSetSuccess()) {
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-          {
-            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.UserGroup _iter51 : struct.success)
-            {
-              _iter51.write(oprot);
-            }
-            oprot.writeListEnd();
-          }
+          oprot.writeBool(struct.success);
           oprot.writeFieldEnd();
         }
         if (struct.sre != null) {
@@ -28982,16 +29598,16 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfT
 
     }
 
-    private static class getGroupMembersOfTypeGroup_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getGroupMembersOfTypeGroup_resultTupleScheme getScheme() {
-        return new getGroupMembersOfTypeGroup_resultTupleScheme();
+    private static class addGroupAdmins_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addGroupAdmins_resultTupleScheme getScheme() {
+        return new addGroupAdmins_resultTupleScheme();
       }
     }
 
-    private static class getGroupMembersOfTypeGroup_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeGroup_result> {
+    private static class addGroupAdmins_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<addGroupAdmins_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, addGroupAdmins_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
         if (struct.isSetSuccess()) {
@@ -29002,13 +29618,7 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTy
         }
         oprot.writeBitSet(optionals, 2);
         if (struct.isSetSuccess()) {
-          {
-            oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.UserGroup _iter52 : struct.success)
-            {
-              _iter52.write(oprot);
-            }
-          }
+          oprot.writeBool(struct.success);
         }
         if (struct.isSetSre()) {
           struct.sre.write(oprot);
@@ -29016,21 +29626,11 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTy
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, addGroupAdmins_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
-          {
-            org.apache.thrift.protocol.TList _list53 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list53.size);
-            org.apache.airavata.sharing.registry.models.UserGroup _elem54;
-            for (int _i55 = 0; _i55 < _list53.size; ++_i55)
-            {
-              _elem54 = new org.apache.airavata.sharing.registry.models.UserGroup();
-              _elem54.read(iprot);
-              struct.success.add(_elem54);
-            }
-          }
+          struct.success = iprot.readBool();
           struct.setSuccessIsSet(true);
         }
         if (incoming.get(1)) {
@@ -29046,25 +29646,25 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTyp
     }
   }
 
-  public static class addChildGroupsToParentGroup_args implements org.apache.thrift.TBase<addChildGroupsToParentGroup_args, addChildGroupsToParentGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<addChildGroupsToParentGroup_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addChildGroupsToParentGroup_args");
+  public static class removeGroupAdmins_args implements org.apache.thrift.TBase<removeGroupAdmins_args, removeGroupAdmins_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeGroupAdmins_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeGroupAdmins_args");
 
     private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField CHILD_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("childIds", org.apache.thrift.protocol.TType.LIST, (short)2);
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField ADMIN_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("adminIds", org.apache.thrift.protocol.TType.LIST, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addChildGroupsToParentGroup_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addChildGroupsToParentGroup_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeGroupAdmins_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeGroupAdmins_argsTupleSchemeFactory();
 
     public java.lang.String domainId; // required
-    public java.util.List<java.lang.String> childIds; // required
     public java.lang.String groupId; // required
+    public java.util.List<java.lang.String> adminIds; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       DOMAIN_ID((short)1, "domainId"),
-      CHILD_IDS((short)2, "childIds"),
-      GROUP_ID((short)3, "groupId");
+      GROUP_ID((short)2, "groupId"),
+      ADMIN_IDS((short)3, "adminIds");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -29081,10 +29681,10 @@ public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
           case 1: // DOMAIN_ID
             return DOMAIN_ID;
-          case 2: // CHILD_IDS
-            return CHILD_IDS;
-          case 3: // GROUP_ID
+          case 2: // GROUP_ID
             return GROUP_ID;
+          case 3: // ADMIN_IDS
+            return ADMIN_IDS;
           default:
             return null;
         }
@@ -29130,61 +29730,61 @@ public short getThriftFieldId() {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      tmpMap.put(_Fields.CHILD_IDS, new org.apache.thrift.meta_data.FieldMetaData("childIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.ADMIN_IDS, new org.apache.thrift.meta_data.FieldMetaData("adminIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addChildGroupsToParentGroup_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeGroupAdmins_args.class, metaDataMap);
     }
 
-    public addChildGroupsToParentGroup_args() {
+    public removeGroupAdmins_args() {
     }
 
-    public addChildGroupsToParentGroup_args(
+    public removeGroupAdmins_args(
       java.lang.String domainId,
-      java.util.List<java.lang.String> childIds,
-      java.lang.String groupId)
+      java.lang.String groupId,
+      java.util.List<java.lang.String> adminIds)
     {
       this();
       this.domainId = domainId;
-      this.childIds = childIds;
       this.groupId = groupId;
+      this.adminIds = adminIds;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public addChildGroupsToParentGroup_args(addChildGroupsToParentGroup_args other) {
+    public removeGroupAdmins_args(removeGroupAdmins_args other) {
       if (other.isSetDomainId()) {
         this.domainId = other.domainId;
       }
-      if (other.isSetChildIds()) {
-        java.util.List<java.lang.String> __this__childIds = new java.util.ArrayList<java.lang.String>(other.childIds);
-        this.childIds = __this__childIds;
-      }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
+      if (other.isSetAdminIds()) {
+        java.util.List<java.lang.String> __this__adminIds = new java.util.ArrayList<java.lang.String>(other.adminIds);
+        this.adminIds = __this__adminIds;
+      }
     }
 
-    public addChildGroupsToParentGroup_args deepCopy() {
-      return new addChildGroupsToParentGroup_args(this);
+    public removeGroupAdmins_args deepCopy() {
+      return new removeGroupAdmins_args(this);
     }
 
     @Override
     public void clear() {
       this.domainId = null;
-      this.childIds = null;
       this.groupId = null;
+      this.adminIds = null;
     }
 
     public java.lang.String getDomainId() {
       return this.domainId;
     }
 
-    public addChildGroupsToParentGroup_args setDomainId(java.lang.String domainId) {
+    public removeGroupAdmins_args setDomainId(java.lang.String domainId) {
       this.domainId = domainId;
       return this;
     }
@@ -29204,66 +29804,66 @@ public void setDomainIdIsSet(boolean value) {
       }
     }
 
-    public int getChildIdsSize() {
-      return (this.childIds == null) ? 0 : this.childIds.size();
+    public java.lang.String getGroupId() {
+      return this.groupId;
     }
 
-    public java.util.Iterator<java.lang.String> getChildIdsIterator() {
-      return (this.childIds == null) ? null : this.childIds.iterator();
+    public removeGroupAdmins_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
+      return this;
     }
 
-    public void addToChildIds(java.lang.String elem) {
-      if (this.childIds == null) {
-        this.childIds = new java.util.ArrayList<java.lang.String>();
-      }
-      this.childIds.add(elem);
+    public void unsetGroupId() {
+      this.groupId = null;
     }
 
-    public java.util.List<java.lang.String> getChildIds() {
-      return this.childIds;
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
     }
 
-    public addChildGroupsToParentGroup_args setChildIds(java.util.List<java.lang.String> childIds) {
-      this.childIds = childIds;
-      return this;
+    public void setGroupIdIsSet(boolean value) {
+      if (!value) {
+        this.groupId = null;
+      }
     }
 
-    public void unsetChildIds() {
-      this.childIds = null;
+    public int getAdminIdsSize() {
+      return (this.adminIds == null) ? 0 : this.adminIds.size();
     }
 
-    /** Returns true if field childIds is set (has been assigned a value) and false otherwise */
-    public boolean isSetChildIds() {
-      return this.childIds != null;
+    public java.util.Iterator<java.lang.String> getAdminIdsIterator() {
+      return (this.adminIds == null) ? null : this.adminIds.iterator();
     }
 
-    public void setChildIdsIsSet(boolean value) {
-      if (!value) {
-        this.childIds = null;
+    public void addToAdminIds(java.lang.String elem) {
+      if (this.adminIds == null) {
+        this.adminIds = new java.util.ArrayList<java.lang.String>();
       }
+      this.adminIds.add(elem);
     }
 
-    public java.lang.String getGroupId() {
-      return this.groupId;
+    public java.util.List<java.lang.String> getAdminIds() {
+      return this.adminIds;
     }
 
-    public addChildGroupsToParentGroup_args setGroupId(java.lang.String groupId) {
-      this.groupId = groupId;
+    public removeGroupAdmins_args setAdminIds(java.util.List<java.lang.String> adminIds) {
+      this.adminIds = adminIds;
       return this;
     }
 
-    public void unsetGroupId() {
-      this.groupId = null;
+    public void unsetAdminIds() {
+      this.adminIds = null;
     }
 
-    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
-    public boolean isSetGroupId() {
-      return this.groupId != null;
+    /** Returns true if field adminIds is set (has been assigned a value) and false otherwise */
+    public boolean isSetAdminIds() {
+      return this.adminIds != null;
     }
 
-    public void setGroupIdIsSet(boolean value) {
+    public void setAdminIdsIsSet(boolean value) {
       if (!value) {
-        this.groupId = null;
+        this.adminIds = null;
       }
     }
 
@@ -29277,19 +29877,19 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         }
         break;
 
-      case CHILD_IDS:
+      case GROUP_ID:
         if (value == null) {
-          unsetChildIds();
+          unsetGroupId();
         } else {
-          setChildIds((java.util.List<java.lang.String>)value);
+          setGroupId((java.lang.String)value);
         }
         break;
 
-      case GROUP_ID:
+      case ADMIN_IDS:
         if (value == null) {
-          unsetGroupId();
+          unsetAdminIds();
         } else {
-          setGroupId((java.lang.String)value);
+          setAdminIds((java.util.List<java.lang.String>)value);
         }
         break;
 
@@ -29301,12 +29901,12 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
       case DOMAIN_ID:
         return getDomainId();
 
-      case CHILD_IDS:
-        return getChildIds();
-
       case GROUP_ID:
         return getGroupId();
 
+      case ADMIN_IDS:
+        return getAdminIds();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -29320,10 +29920,10 @@ public boolean isSet(_Fields field) {
       switch (field) {
       case DOMAIN_ID:
         return isSetDomainId();
-      case CHILD_IDS:
-        return isSetChildIds();
       case GROUP_ID:
         return isSetGroupId();
+      case ADMIN_IDS:
+        return isSetAdminIds();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -29332,12 +29932,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof addChildGroupsToParentGroup_args)
-        return this.equals((addChildGroupsToParentGroup_args)that);
+      if (that instanceof removeGroupAdmins_args)
+        return this.equals((removeGroupAdmins_args)that);
       return false;
     }
 
-    public boolean equals(addChildGroupsToParentGroup_args that) {
+    public boolean equals(removeGroupAdmins_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -29352,15 +29952,6 @@ public boolean equals(addChildGroupsToParentGroup_args that) {
           return false;
       }
 
-      boolean this_present_childIds = true && this.isSetChildIds();
-      boolean that_present_childIds = true && that.isSetChildIds();
-      if (this_present_childIds || that_present_childIds) {
-        if (!(this_present_childIds && that_present_childIds))
-          return false;
-        if (!this.childIds.equals(that.childIds))
-          return false;
-      }
-
       boolean this_present_groupId = true && this.isSetGroupId();
       boolean that_present_groupId = true && that.isSetGroupId();
       if (this_present_groupId || that_present_groupId) {
@@ -29370,6 +29961,15 @@ public boolean equals(addChildGroupsToParentGroup_args that) {
           return false;
       }
 
+      boolean this_present_adminIds = true && this.isSetAdminIds();
+      boolean that_present_adminIds = true && that.isSetAdminIds();
+      if (this_present_adminIds || that_present_adminIds) {
+        if (!(this_present_adminIds && that_present_adminIds))
+          return false;
+        if (!this.adminIds.equals(that.adminIds))
+          return false;
+      }
+
       return true;
     }
 
@@ -29381,19 +29981,19 @@ public int hashCode() {
       if (isSetDomainId())
         hashCode = hashCode * 8191 + domainId.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetChildIds()) ? 131071 : 524287);
-      if (isSetChildIds())
-        hashCode = hashCode * 8191 + childIds.hashCode();
-
       hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
       if (isSetGroupId())
         hashCode = hashCode * 8191 + groupId.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetAdminIds()) ? 131071 : 524287);
+      if (isSetAdminIds())
+        hashCode = hashCode * 8191 + adminIds.hashCode();
+
       return hashCode;
     }
 
     @Override
-    public int compareTo(addChildGroupsToParentGroup_args other) {
+    public int compareTo(removeGroupAdmins_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -29410,22 +30010,22 @@ public int compareTo(addChildGroupsToParentGroup_args other) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetChildIds()).compareTo(other.isSetChildIds());
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetChildIds()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.childIds, other.childIds);
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
         if (lastComparison != 0) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+      lastComparison = java.lang.Boolean.valueOf(isSetAdminIds()).compareTo(other.isSetAdminIds());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetGroupId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+      if (isSetAdminIds()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.adminIds, other.adminIds);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -29447,7 +30047,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("addChildGroupsToParentGroup_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeGroupAdmins_args(");
       boolean first = true;
 
       sb.append("domainId:");
@@ -29458,19 +30058,19 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("childIds:");
-      if (this.childIds == null) {
+      sb.append("groupId:");
+      if (this.groupId == null) {
         sb.append("null");
       } else {
-        sb.append(this.childIds);
+        sb.append(this.groupId);
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("groupId:");
-      if (this.groupId == null) {
+      sb.append("adminIds:");
+      if (this.adminIds == null) {
         sb.append("null");
       } else {
-        sb.append(this.groupId);
+        sb.append(this.adminIds);
       }
       first = false;
       sb.append(")");
@@ -29482,12 +30082,12 @@ public void validate() throws org.apache.thrift.TException {
       if (domainId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
       }
-      if (childIds == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'childIds' was not present! Struct: " + toString());
-      }
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
+      if (adminIds == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'adminIds' was not present! Struct: " + toString());
+      }
       // check for sub-struct validity
     }
 
@@ -29507,15 +30107,15 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
       }
     }
 
-    private static class addChildGroupsToParentGroup_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public addChildGroupsToParentGroup_argsStandardScheme getScheme() {
-        return new addChildGroupsToParentGroup_argsStandardScheme();
+    private static class removeGroupAdmins_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeGroupAdmins_argsStandardScheme getScheme() {
+        return new removeGroupAdmins_argsStandardScheme();
       }
     }
 
-    private static class addChildGroupsToParentGroup_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<addChildGroupsToParentGroup_args> {
+    private static class removeGroupAdmins_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeGroupAdmins_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, removeGroupAdmins_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -29533,28 +30133,28 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToPar
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // CHILD_IDS
+            case 2: // GROUP_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // ADMIN_IDS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list56 = iprot.readListBegin();
-                  struct.childIds = new java.util.ArrayList<java.lang.String>(_list56.size);
-                  java.lang.String _elem57;
-                  for (int _i58 = 0; _i58 < _list56.size; ++_i58)
+                  org.apache.thrift.protocol.TList _list48 = iprot.readListBegin();
+                  struct.adminIds = new java.util.ArrayList<java.lang.String>(_list48.size);
+                  java.lang.String _elem49;
+                  for (int _i50 = 0; _i50 < _list48.size; ++_i50)
                   {
-                    _elem57 = iprot.readString();
-                    struct.childIds.add(_elem57);
+                    _elem49 = iprot.readString();
+                    struct.adminIds.add(_elem49);
                   }
                   iprot.readListEnd();
                 }
-                struct.setChildIdsIsSet(true);
-              } else { 
-                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-              }
-              break;
-            case 3: // GROUP_ID
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.groupId = iprot.readString();
-                struct.setGroupIdIsSet(true);
+                struct.setAdminIdsIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -29570,7 +30170,7 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToPar
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, removeGroupAdmins_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -29579,69 +30179,69 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, addChildGroupsToPa
           oprot.writeString(struct.domainId);
           oprot.writeFieldEnd();
         }
-        if (struct.childIds != null) {
-          oprot.writeFieldBegin(CHILD_IDS_FIELD_DESC);
+        if (struct.groupId != null) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.adminIds != null) {
+          oprot.writeFieldBegin(ADMIN_IDS_FIELD_DESC);
           {
-            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.childIds.size()));
-            for (java.lang.String _iter59 : struct.childIds)
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.adminIds.size()));
+            for (java.lang.String _iter51 : struct.adminIds)
             {
-              oprot.writeString(_iter59);
+              oprot.writeString(_iter51);
             }
             oprot.writeListEnd();
           }
           oprot.writeFieldEnd();
         }
-        if (struct.groupId != null) {
-          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
-          oprot.writeString(struct.groupId);
-          oprot.writeFieldEnd();
-        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
 
     }
 
-    private static class addChildGroupsToParentGroup_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public addChildGroupsToParentGroup_argsTupleScheme getScheme() {
-        return new addChildGroupsToParentGroup_argsTupleScheme();
+    private static class removeGroupAdmins_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeGroupAdmins_argsTupleScheme getScheme() {
+        return new removeGroupAdmins_argsTupleScheme();
       }
     }
 
-    private static class addChildGroupsToParentGroup_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<addChildGroupsToParentGroup_args> {
+    private static class removeGroupAdmins_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeGroupAdmins_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, removeGroupAdmins_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         oprot.writeString(struct.domainId);
+        oprot.writeString(struct.groupId);
         {
-          oprot.writeI32(struct.childIds.size());
-          for (java.lang.String _iter60 : struct.childIds)
+          oprot.writeI32(struct.adminIds.size());
+          for (java.lang.String _iter52 : struct.adminIds)
           {
-            oprot.writeString(_iter60);
+            oprot.writeString(_iter52);
           }
         }
-        oprot.writeString(struct.groupId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, removeGroupAdmins_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.domainId = iprot.readString();
         struct.setDomainIdIsSet(true);
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
         {
-          org.apache.thrift.protocol.TList _list61 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.childIds = new java.util.ArrayList<java.lang.String>(_list61.size);
-          java.lang.String _elem62;
-          for (int _i63 = 0; _i63 < _list61.size; ++_i63)
+          org.apache.thrift.protocol.TList _list53 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.adminIds = new java.util.ArrayList<java.lang.String>(_list53.size);
+          java.lang.String _elem54;
+          for (int _i55 = 0; _i55 < _list53.size; ++_i55)
           {
-            _elem62 = iprot.readString();
-            struct.childIds.add(_elem62);
+            _elem54 = iprot.readString();
+            struct.adminIds.add(_elem54);
           }
         }
-        struct.setChildIdsIsSet(true);
-        struct.groupId = iprot.readString();
-        struct.setGroupIdIsSet(true);
+        struct.setAdminIdsIsSet(true);
       }
     }
 
@@ -29650,14 +30250,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToPare
     }
   }
 
-  public static class addChildGroupsToParentGroup_result implements org.apache.thrift.TBase<addChildGroupsToParentGroup_result, addChildGroupsToParentGroup_result._Fields>, java.io.Serializable, Cloneable, Comparable<addChildGroupsToParentGroup_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addChildGroupsToParentGroup_result");
+  public static class removeGroupAdmins_result implements org.apache.thrift.TBase<removeGroupAdmins_result, removeGroupAdmins_result._Fields>, java.io.Serializable, Cloneable, Comparable<removeGroupAdmins_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeGroupAdmins_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
     private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addChildGroupsToParentGroup_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addChildGroupsToParentGroup_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeGroupAdmins_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeGroupAdmins_resultTupleSchemeFactory();
 
     public boolean success; // required
     public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
@@ -29734,13 +30334,13 @@ public short getThriftFieldId() {
       tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addChildGroupsToParentGroup_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeGroupAdmins_result.class, metaDataMap);
     }
 
-    public addChildGroupsToParentGroup_result() {
+    public removeGroupAdmins_result() {
     }
 
-    public addChildGroupsToParentGroup_result(
+    public removeGroupAdmins_result(
       boolean success,
       org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
     {
@@ -29753,7 +30353,7 @@ public addChildGroupsToParentGroup_result(
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public addChildGroupsToParentGroup_result(addChildGroupsToParentGroup_result other) {
+    public removeGroupAdmins_result(removeGroupAdmins_result other) {
       __isset_bitfield = other.__isset_bitfield;
       this.success = other.success;
       if (other.isSetSre()) {
@@ -29761,8 +30361,8 @@ public addChildGroupsToParentGroup_result(addChildGroupsToParentGroup_result oth
       }
     }
 
-    public addChildGroupsToParentGroup_result deepCopy() {
-      return new addChildGroupsToParentGroup_result(this);
+    public removeGroupAdmins_result deepCopy() {
+      return new removeGroupAdmins_result(this);
     }
 
     @Override
@@ -29776,7 +30376,7 @@ public boolean isSuccess() {
       return this.success;
     }
 
-    public addChildGroupsToParentGroup_result setSuccess(boolean success) {
+    public removeGroupAdmins_result setSuccess(boolean success) {
       this.success = success;
       setSuccessIsSet(true);
       return this;
@@ -29799,7 +30399,7 @@ public void setSuccessIsSet(boolean value) {
       return this.sre;
     }
 
-    public addChildGroupsToParentGroup_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+    public removeGroupAdmins_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
       this.sre = sre;
       return this;
     }
@@ -29871,12 +30471,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof addChildGroupsToParentGroup_result)
-        return this.equals((addChildGroupsToParentGroup_result)that);
+      if (that instanceof removeGroupAdmins_result)
+        return this.equals((removeGroupAdmins_result)that);
       return false;
     }
 
-    public boolean equals(addChildGroupsToParentGroup_result that) {
+    public boolean equals(removeGroupAdmins_result that) {
       if (that == null)
         return false;
       if (this == that)
@@ -29917,7 +30517,7 @@ public int hashCode() {
     }
 
     @Override
-    public int compareTo(addChildGroupsToParentGroup_result other) {
+    public int compareTo(removeGroupAdmins_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -29961,7 +30561,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("addChildGroupsToParentGroup_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeGroupAdmins_result(");
       boolean first = true;
 
       sb.append("success:");
@@ -30002,15 +30602,15 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
       }
     }
 
-    private static class addChildGroupsToParentGroup_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public addChildGroupsToParentGroup_resultStandardScheme getScheme() {
-        return new addChildGroupsToParentGroup_resultStandardScheme();
+    private static class removeGroupAdmins_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeGroupAdmins_resultStandardScheme getScheme() {
+        return new removeGroupAdmins_resultStandardScheme();
       }
     }
 
-    private static class addChildGroupsToParentGroup_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<addChildGroupsToParentGroup_result> {
+    private static class removeGroupAdmins_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeGroupAdmins_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, removeGroupAdmins_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -30048,7 +30648,7 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToPar
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, removeGroupAdmins_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -30068,16 +30668,16 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, addChildGroupsToPa
 
     }
 
-    private static class addChildGroupsToParentGroup_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public addChildGroupsToParentGroup_resultTupleScheme getScheme() {
-        return new addChildGroupsToParentGroup_resultTupleScheme();
+    private static class removeGroupAdmins_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeGroupAdmins_resultTupleScheme getScheme() {
+        return new removeGroupAdmins_resultTupleScheme();
       }
     }
 
-    private static class addChildGroupsToParentGroup_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<addChildGroupsToParentGroup_result> {
+    private static class removeGroupAdmins_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeGroupAdmins_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, removeGroupAdmins_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
         if (struct.isSetSuccess()) {
@@ -30096,7 +30696,7 @@ public void write(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToPar
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, removeGroupAdmins_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
@@ -30116,25 +30716,25 @@ public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToPare
     }
   }
 
-  public static class removeChildGroupFromParentGroup_args implements org.apache.thrift.TBase<removeChildGroupFromParentGroup_args, removeChildGroupFromParentGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeChildGroupFromParentGroup_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeChildGroupFromParentGroup_args");
+  public static class hasAdminAccess_args implements org.apache.thrift.TBase<hasAdminAccess_args, hasAdminAccess_args._Fields>, java.io.Serializable, Cloneable, Comparable<hasAdminAccess_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("hasAdminAccess_args");
 
     private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField CHILD_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("childId", org.apache.thrift.protocol.TType.STRING, (short)2);
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField ADMIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("adminId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeChildGroupFromParentGroup_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeChildGroupFromParentGroup_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new hasAdminAccess_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new hasAdminAccess_argsTupleSchemeFactory();
 
     public java.lang.String domainId; // required
-    public java.lang.String childId; // required
     public java.lang.String groupId; // required
+    public java.lang.String adminId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       DOMAIN_ID((short)1, "domainId"),
-      CHILD_ID((short)2, "childId"),
-      GROUP_ID((short)3, "groupId");
+      GROUP_ID((short)2, "groupId"),
+      ADMIN_ID((short)3, "adminId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -30151,10 +30751,10 @@ public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
           case 1: // DOMAIN_ID
             return DOMAIN_ID;
-          case 2: // CHILD_ID
-            return CHILD_ID;
-          case 3: // GROUP_ID
+          case 2: // GROUP_ID
             return GROUP_ID;
+          case 3: // ADMIN_ID
+            return ADMIN_ID;
           default:
             return null;
         }
@@ -30200,59 +30800,59 @@ public short getThriftFieldId() {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      tmpMap.put(_Fields.CHILD_ID, new org.apache.thrift.meta_data.FieldMetaData("childId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.ADMIN_ID, new org.apache.thrift.meta_data.FieldMetaData("adminId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeChildGroupFromParentGroup_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(hasAdminAccess_args.class, metaDataMap);
     }
 
-    public removeChildGroupFromParentGroup_args() {
+    public hasAdminAccess_args() {
     }
 
-    public removeChildGroupFromParentGroup_args(
+    public hasAdminAccess_args(
       java.lang.String domainId,
-      java.lang.String childId,
-      java.lang.String groupId)
+      java.lang.String groupId,
+      java.lang.String adminId)
     {
       this();
       this.domainId = domainId;
-      this.childId = childId;
       this.groupId = groupId;
+      this.adminId = adminId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public removeChildGroupFromParentGroup_args(removeChildGroupFromParentGroup_args other) {
+    public hasAdminAccess_args(hasAdminAccess_args other) {
       if (other.isSetDomainId()) {
         this.domainId = other.domainId;
       }
-      if (other.isSetChildId()) {
-        this.childId = other.childId;
-      }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
+      if (other.isSetAdminId()) {
+        this.adminId = other.adminId;
+      }
     }
 
-    public removeChildGroupFromParentGroup_args deepCopy() {
-      return new removeChildGroupFromParentGroup_args(this);
+    public hasAdminAccess_args deepCopy() {
+      return new hasAdminAccess_args(this);
     }
 
     @Override
     public void clear() {
       this.domainId = null;
-      this.childId = null;
       this.groupId = null;
+      this.adminId = null;
     }
 
     public java.lang.String getDomainId() {
       return this.domainId;
     }
 
-    public removeChildGroupFromParentGroup_args setDomainId(java.lang.String domainId) {
+    public hasAdminAccess_args setDomainId(java.lang.String domainId) {
       this.domainId = domainId;
       return this;
     }
@@ -30272,51 +30872,51 @@ public void setDomainIdIsSet(boolean value) {
       }
     }
 
-    public java.lang.String getChildId() {
-      return this.childId;
+    public java.lang.String getGroupId() {
+      return this.groupId;
     }
 
-    public removeChildGroupFromParentGroup_args setChildId(java.lang.String childId) {
-      this.childId = childId;
+    public hasAdminAccess_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
       return this;
     }
 
-    public void unsetChildId() {
-      this.childId = null;
+    public void unsetGroupId() {
+      this.groupId = null;
     }
 
-    /** Returns true if field childId is set (has been assigned a value) and false otherwise */
-    public boolean isSetChildId() {
-      return this.childId != null;
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
     }
 
-    public void setChildIdIsSet(boolean value) {
+    public void setGroupIdIsSet(boolean value) {
       if (!value) {
-        this.childId = null;
+        this.groupId = null;
       }
     }
 
-    public java.lang.String getGroupId() {
-      return this.groupId;
+    public java.lang.String getAdminId() {
+      return this.adminId;
     }
 
-    public removeChildGroupFromParentGroup_args setGroupId(java.lang.String groupId) {
-      this.groupId = groupId;
+    public hasAdminAccess_args setAdminId(java.lang.String adminId) {
+      this.adminId = adminId;
       return this;
     }
 
-    public void unsetGroupId() {
-      this.groupId = null;
+    public void unsetAdminId() {
+      this.adminId = null;
     }
 
-    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
-    public boolean isSetGroupId() {
-      return this.groupId != null;
+    /** Returns true if field adminId is set (has been assigned a value) and false otherwise */
+    public boolean isSetAdminId() {
+      return this.adminId != null;
     }
 
-    public void setGroupIdIsSet(boolean value) {
+    public void setAdminIdIsSet(boolean value) {
       if (!value) {
-        this.groupId = null;
+        this.adminId = null;
       }
     }
 
@@ -30330,19 +30930,19 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         }
         break;
 
-      case CHILD_ID:
+      case GROUP_ID:
         if (value == null) {
-          unsetChildId();
+          unsetGroupId();
         } else {
-          setChildId((java.lang.String)value);
+          setGroupId((java.lang.String)value);
         }
         break;
 
-      case GROUP_ID:
+      case ADMIN_ID:
         if (value == null) {
-          unsetGroupId();
+          unsetAdminId();
         } else {
-          setGroupId((java.lang.String)value);
+          setAdminId((java.lang.String)value);
         }
         break;
 
@@ -30354,12 +30954,12 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
       case DOMAIN_ID:
         return getDomainId();
 
-      case CHILD_ID:
-        return getChildId();
-
       case GROUP_ID:
         return getGroupId();
 
+      case ADMIN_ID:
+        return getAdminId();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -30373,10 +30973,10 @@ public boolean isSet(_Fields field) {
       switch (field) {
       case DOMAIN_ID:
         return isSetDomainId();
-      case CHILD_ID:
-        return isSetChildId();
       case GROUP_ID:
         return isSetGroupId();
+      case ADMIN_ID:
+        return isSetAdminId();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -30385,12 +30985,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof removeChildGroupFromParentGroup_args)
-        return this.equals((removeChildGroupFromParentGroup_args)that);
+      if (that instanceof hasAdminAccess_args)
+        return this.equals((hasAdminAccess_args)that);
       return false;
     }
 
-    public boolean equals(removeChildGroupFromParentGroup_args that) {
+    public boolean equals(hasAdminAccess_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -30405,15 +31005,6 @@ public boolean equals(removeChildGroupFromParentGroup_args that) {
           return false;
       }
 
-      boolean this_present_childId = true && this.isSetChildId();
-      boolean that_present_childId = true && that.isSetChildId();
-      if (this_present_childId || that_present_childId) {
-        if (!(this_present_childId && that_present_childId))
-          return false;
-        if (!this.childId.equals(that.childId))
-          return false;
-      }
-
       boolean this_present_groupId = true && this.isSetGroupId();
       boolean that_present_groupId = true && that.isSetGroupId();
       if (this_present_groupId || that_present_groupId) {
@@ -30423,6 +31014,15 @@ public boolean equals(removeChildGroupFromParentGroup_args that) {
           return false;
       }
 
+      boolean this_present_adminId = true && this.isSetAdminId();
+      boolean that_present_adminId = true && that.isSetAdminId();
+      if (this_present_adminId || that_present_adminId) {
+        if (!(this_present_adminId && that_present_adminId))
+          return false;
+        if (!this.adminId.equals(that.adminId))
+          return false;
+      }
+
       return true;
     }
 
@@ -30434,19 +31034,19 @@ public int hashCode() {
       if (isSetDomainId())
         hashCode = hashCode * 8191 + domainId.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetChildId()) ? 131071 : 524287);
-      if (isSetChildId())
-        hashCode = hashCode * 8191 + childId.hashCode();
-
       hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
       if (isSetGroupId())
         hashCode = hashCode * 8191 + groupId.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetAdminId()) ? 131071 : 524287);
+      if (isSetAdminId())
+        hashCode = hashCode * 8191 + adminId.hashCode();
+
       return hashCode;
     }
 
     @Override
-    public int compareTo(removeChildGroupFromParentGroup_args other) {
+    public int compareTo(hasAdminAccess_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -30463,22 +31063,22 @@ public int compareTo(removeChildGroupFromParentGroup_args other) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetChildId()).compareTo(other.isSetChildId());
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetChildId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.childId, other.childId);
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
         if (lastComparison != 0) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+      lastComparison = java.lang.Boolean.valueOf(isSetAdminId()).compareTo(other.isSetAdminId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetGroupId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+      if (isSetAdminId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.adminId, other.adminId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -30500,7 +31100,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeChildGroupFromParentGroup_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("hasAdminAccess_args(");
       boolean first = true;
 
       sb.append("domainId:");
@@ -30511,19 +31111,19 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("childId:");
-      if (this.childId == null) {
+      sb.append("groupId:");
+      if (this.groupId == null) {
         sb.append("null");
       } else {
-        sb.append(this.childId);
+        sb.append(this.groupId);
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("groupId:");
-      if (this.groupId == null) {
+      sb.append("adminId:");
+      if (this.adminId == null) {
         sb.append("null");
       } else {
-        sb.append(this.groupId);
+        sb.append(this.adminId);
       }
       first = false;
       sb.append(")");
@@ -30535,12 +31135,12 @@ public void validate() throws org.apache.thrift.TException {
       if (domainId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
       }
-      if (childId == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'childId' was not present! Struct: " + toString());
-      }
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
+      if (adminId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'adminId' was not present! Struct: " + toString());
+      }
       // check for sub-struct validity
     }
 
@@ -30560,15 +31160,15 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
       }
     }
 
-    private static class removeChildGroupFromParentGroup_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeChildGroupFromParentGroup_argsStandardScheme getScheme() {
-        return new removeChildGroupFromParentGroup_argsStandardScheme();
+    private static class hasAdminAccess_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasAdminAccess_argsStandardScheme getScheme() {
+        return new hasAdminAccess_argsStandardScheme();
       }
     }
 
-    private static class removeChildGroupFromParentGroup_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeChildGroupFromParentGroup_args> {
+    private static class hasAdminAccess_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<hasAdminAccess_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, hasAdminAccess_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -30586,18 +31186,18 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFro
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // CHILD_ID
+            case 2: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.childId = iprot.readString();
-                struct.setChildIdIsSet(true);
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 3: // GROUP_ID
+            case 3: // ADMIN_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.groupId = iprot.readString();
-                struct.setGroupIdIsSet(true);
+                struct.adminId = iprot.readString();
+                struct.setAdminIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -30613,7 +31213,7 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFro
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, hasAdminAccess_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -30622,47 +31222,47 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, removeChildGroupFr
           oprot.writeString(struct.domainId);
           oprot.writeFieldEnd();
         }
-        if (struct.childId != null) {
-          oprot.writeFieldBegin(CHILD_ID_FIELD_DESC);
-          oprot.writeString(struct.childId);
-          oprot.writeFieldEnd();
-        }
         if (struct.groupId != null) {
           oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
           oprot.writeString(struct.groupId);
           oprot.writeFieldEnd();
         }
+        if (struct.adminId != null) {
+          oprot.writeFieldBegin(ADMIN_ID_FIELD_DESC);
+          oprot.writeString(struct.adminId);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
 
     }
 
-    private static class removeChildGroupFromParentGroup_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeChildGroupFromParentGroup_argsTupleScheme getScheme() {
-        return new removeChildGroupFromParentGroup_argsTupleScheme();
+    private static class hasAdminAccess_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasAdminAccess_argsTupleScheme getScheme() {
+        return new hasAdminAccess_argsTupleScheme();
       }
     }
 
-    private static class removeChildGroupFromParentGroup_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeChildGroupFromParentGroup_args> {
+    private static class hasAdminAccess_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<hasAdminAccess_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, hasAdminAccess_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         oprot.writeString(struct.domainId);
-        oprot.writeString(struct.childId);
         oprot.writeString(struct.groupId);
+        oprot.writeString(struct.adminId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, hasAdminAccess_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.domainId = iprot.readString();
         struct.setDomainIdIsSet(true);
-        struct.childId = iprot.readString();
-        struct.setChildIdIsSet(true);
         struct.groupId = iprot.readString();
         struct.setGroupIdIsSet(true);
+        struct.adminId = iprot.readString();
+        struct.setAdminIdIsSet(true);
       }
     }
 
@@ -30671,14 +31271,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFrom
     }
   }
 
-  public static class removeChildGroupFromParentGroup_result implements org.apache.thrift.TBase<removeChildGroupFromParentGroup_result, removeChildGroupFromParentGroup_result._Fields>, java.io.Serializable, Cloneable, Comparable<removeChildGroupFromParentGroup_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeChildGroupFromParentGroup_result");
+  public static class hasAdminAccess_result implements org.apache.thrift.TBase<hasAdminAccess_result, hasAdminAccess_result._Fields>, java.io.Serializable, Cloneable, Comparable<hasAdminAccess_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("hasAdminAccess_result");
 
     private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
     private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeChildGroupFromParentGroup_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeChildGroupFromParentGroup_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new hasAdminAccess_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new hasAdminAccess_resultTupleSchemeFactory();
 
     public boolean success; // required
     public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
@@ -30755,13 +31355,13 @@ public short getThriftFieldId() {
       tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeChildGroupFromParentGroup_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(hasAdminAccess_result.class, metaDataMap);
     }
 
-    public removeChildGroupFromParentGroup_result() {
+    public hasAdminAccess_result() {
     }
 
-    public removeChildGroupFromParentGroup_result(
+    public hasAdminAccess_result(
       boolean success,
       org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
     {
@@ -30774,7 +31374,7 @@ public removeChildGroupFromParentGroup_result(
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public removeChildGroupFromParentGroup_result(removeChildGroupFromParentGroup_result other) {
+    public hasAdminAccess_result(hasAdminAccess_result other) {
       __isset_bitfield = other.__isset_bitfield;
       this.success = other.success;
       if (other.isSetSre()) {
@@ -30782,8 +31382,8 @@ public removeChildGroupFromParentGroup_result(removeChildGroupFromParentGroup_re
       }
     }
 
-    public removeChildGroupFromParentGroup_result deepCopy() {
-      return new removeChildGroupFromParentGroup_result(this);
+    public hasAdminAccess_result deepCopy() {
+      return new hasAdminAccess_result(this);
     }
 
     @Override
@@ -30797,7 +31397,7 @@ public boolean isSuccess() {
       return this.success;
     }
 
-    public removeChildGroupFromParentGroup_result setSuccess(boolean success) {
+    public hasAdminAccess_result setSuccess(boolean success) {
       this.success = success;
       setSuccessIsSet(true);
       return this;
@@ -30820,7 +31420,7 @@ public void setSuccessIsSet(boolean value) {
       return this.sre;
     }
 
-    public removeChildGroupFromParentGroup_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+    public hasAdminAccess_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
       this.sre = sre;
       return this;
     }
@@ -30892,12 +31492,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof removeChildGroupFromParentGroup_result)
-        return this.equals((removeChildGroupFromParentGroup_result)that);
+      if (that instanceof hasAdminAccess_result)
+        return this.equals((hasAdminAccess_result)that);
       return false;
     }
 
-    public boolean equals(removeChildGroupFromParentGroup_result that) {
+    public boolean equals(hasAdminAccess_result that) {
       if (that == null)
         return false;
       if (this == that)
@@ -30938,7 +31538,7 @@ public int hashCode() {
     }
 
     @Override
-    public int compareTo(removeChildGroupFromParentGroup_result other) {
+    public int compareTo(hasAdminAccess_result other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -30982,7 +31582,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeChildGroupFromParentGroup_result(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("hasAdminAccess_result(");
       boolean first = true;
 
       sb.append("success:");
@@ -31023,15 +31623,15 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
       }
     }
 
-    private static class removeChildGroupFromParentGroup_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeChildGroupFromParentGroup_resultStandardScheme getScheme() {
-        return new removeChildGroupFromParentGroup_resultStandardScheme();
+    private static class hasAdminAccess_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasAdminAccess_resultStandardScheme getScheme() {
+        return new hasAdminAccess_resultStandardScheme();
       }
     }
 
-    private static class removeChildGroupFromParentGroup_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeChildGroupFromParentGroup_result> {
+    private static class hasAdminAccess_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<hasAdminAccess_result> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, hasAdminAccess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -31069,7 +31669,7 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFro
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, hasAdminAccess_result struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -31089,16 +31689,16 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, removeChildGroupFr
 
     }
 
-    private static class removeChildGroupFromParentGroup_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public removeChildGroupFromParentGroup_resultTupleScheme getScheme() {
-        return new removeChildGroupFromParentGroup_resultTupleScheme();
+    private static class hasAdminAccess_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasAdminAccess_resultTupleScheme getScheme() {
+        return new hasAdminAccess_resultTupleScheme();
       }
     }
 
-    private static class removeChildGroupFromParentGroup_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeChildGroupFromParentGroup_result> {
+    private static class hasAdminAccess_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<hasAdminAccess_result> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, hasAdminAccess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet optionals = new java.util.BitSet();
         if (struct.isSetSuccess()) {
@@ -31117,7 +31717,7 @@ public void write(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFro
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, hasAdminAccess_result struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
@@ -31137,22 +31737,25 @@ public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFrom
     }
   }
 
-  public static class getAllMemberGroupsForUser_args implements org.apache.thrift.TBase<getAllMemberGroupsForUser_args, getAllMemberGroupsForUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<getAllMemberGroupsForUser_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getAllMemberGroupsForUser_args");
+  public static class hasOwnerAccess_args implements org.apache.thrift.TBase<hasOwnerAccess_args, hasOwnerAccess_args._Fields>, java.io.Serializable, Cloneable, Comparable<hasOwnerAccess_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("hasOwnerAccess_args");
 
     private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField OWNER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("ownerId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAllMemberGroupsForUser_argsStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAllMemberGroupsForUser_argsTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new hasOwnerAccess_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new hasOwnerAccess_argsTupleSchemeFactory();
 
     public java.lang.String domainId; // required
-    public java.lang.String userId; // required
+    public java.lang.String groupId; // required
+    public java.lang.String ownerId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       DOMAIN_ID((short)1, "domainId"),
-      USER_ID((short)2, "userId");
+      GROUP_ID((short)2, "groupId"),
+      OWNER_ID((short)3, "ownerId");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -31169,8 +31772,10 @@ public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
           case 1: // DOMAIN_ID
             return DOMAIN_ID;
-          case 2: // USER_ID
-            return USER_ID;
+          case 2: // GROUP_ID
+            return GROUP_ID;
+          case 3: // OWNER_ID
+            return OWNER_ID;
           default:
             return null;
         }
@@ -31216,51 +31821,59 @@ public short getThriftFieldId() {
       java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      tmpMap.put(_Fields.USER_ID, new org.apache.thrift.meta_data.FieldMetaData("userId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+      tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.OWNER_ID, new org.apache.thrift.meta_data.FieldMetaData("ownerId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getAllMemberGroupsForUser_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(hasOwnerAccess_args.class, metaDataMap);
     }
 
-    public getAllMemberGroupsForUser_args() {
+    public hasOwnerAccess_args() {
     }
 
-    public getAllMemberGroupsForUser_args(
+    public hasOwnerAccess_args(
       java.lang.String domainId,
-      java.lang.String userId)
+      java.lang.String groupId,
+      java.lang.String ownerId)
     {
       this();
       this.domainId = domainId;
-      this.userId = userId;
+      this.groupId = groupId;
+      this.ownerId = ownerId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public getAllMemberGroupsForUser_args(getAllMemberGroupsForUser_args other) {
+    public hasOwnerAccess_args(hasOwnerAccess_args other) {
       if (other.isSetDomainId()) {
         this.domainId = other.domainId;
       }
-      if (other.isSetUserId()) {
-        this.userId = other.userId;
+      if (other.isSetGroupId()) {
+        this.groupId = other.groupId;
+      }
+      if (other.isSetOwnerId()) {
+        this.ownerId = other.ownerId;
       }
     }
 
-    public getAllMemberGroupsForUser_args deepCopy() {
-      return new getAllMemberGroupsForUser_args(this);
+    public hasOwnerAccess_args deepCopy() {
+      return new hasOwnerAccess_args(this);
     }
 
     @Override
     public void clear() {
       this.domainId = null;
-      this.userId = null;
+      this.groupId = null;
+      this.ownerId = null;
     }
 
     public java.lang.String getDomainId() {
       return this.domainId;
     }
 
-    public getAllMemberGroupsForUser_args setDomainId(java.lang.String domainId) {
+    public hasOwnerAccess_args setDomainId(java.lang.String domainId) {
       this.domainId = domainId;
       return this;
     }
@@ -31280,27 +31893,51 @@ public void setDomainIdIsSet(boolean value) {
       }
     }
 
-    public java.lang.String getUserId() {
-      return this.userId;
+    public java.lang.String getGroupId() {
+      return this.groupId;
     }
 
-    public getAllMemberGroupsForUser_args setUserId(java.lang.String userId) {
-      this.userId = userId;
+    public hasOwnerAccess_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
       return this;
     }
 
-    public void unsetUserId() {
-      this.userId = null;
+    public void unsetGroupId() {
+      this.groupId = null;
     }
 
-    /** Returns true if field userId is set (has been assigned a value) and false otherwise */
-    public boolean isSetUserId() {
-      return this.userId != null;
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
     }
 
-    public void setUserIdIsSet(boolean value) {
+    public void setGroupIdIsSet(boolean value) {
       if (!value) {
-        this.userId = null;
+        this.groupId = null;
+      }
+    }
+
+    public java.lang.String getOwnerId() {
+      return this.ownerId;
+    }
+
+    public hasOwnerAccess_args setOwnerId(java.lang.String ownerId) {
+      this.ownerId = ownerId;
+      return this;
+    }
+
+    public void unsetOwnerId() {
+      this.ownerId = null;
+    }
+
+    /** Returns true if field ownerId is set (has been assigned a value) and false otherwise */
+    public boolean isSetOwnerId() {
+      return this.ownerId != null;
+    }
+
+    public void setOwnerIdIsSet(boolean value) {
+      if (!value) {
+        this.ownerId = null;
       }
     }
 
@@ -31314,11 +31951,19 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
         }
         break;
 
-      case USER_ID:
+      case GROUP_ID:
         if (value == null) {
-          unsetUserId();
+          unsetGroupId();
         } else {
-          setUserId((java.lang.String)value);
+          setGroupId((java.lang.String)value);
+        }
+        break;
+
+      case OWNER_ID:
+        if (value == null) {
+          unsetOwnerId();
+        } else {
+          setOwnerId((java.lang.String)value);
         }
         break;
 
@@ -31330,8 +31975,11 @@ public void setFieldValue(_Fields field, java.lang.Object value) {
       case DOMAIN_ID:
         return getDomainId();
 
-      case USER_ID:
-        return getUserId();
+      case GROUP_ID:
+        return getGroupId();
+
+      case OWNER_ID:
+        return getOwnerId();
 
       }
       throw new java.lang.IllegalStateException();
@@ -31346,8 +31994,10 @@ public boolean isSet(_Fields field) {
       switch (field) {
       case DOMAIN_ID:
         return isSetDomainId();
-      case USER_ID:
-        return isSetUserId();
+      case GROUP_ID:
+        return isSetGroupId();
+      case OWNER_ID:
+        return isSetOwnerId();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -31356,12 +32006,12 @@ public boolean isSet(_Fields field) {
     public boolean equals(java.lang.Object that) {
       if (that == null)
         return false;
-      if (that instanceof getAllMemberGroupsForUser_args)
-        return this.equals((getAllMemberGroupsForUser_args)that);
+      if (that instanceof hasOwnerAccess_args)
+        return this.equals((hasOwnerAccess_args)that);
       return false;
     }
 
-    public boolean equals(getAllMemberGroupsForUser_args that) {
+    public boolean equals(hasOwnerAccess_args that) {
       if (that == null)
         return false;
       if (this == that)
@@ -31376,12 +32026,21 @@ public boolean equals(getAllMemberGroupsForUser_args that) {
           return false;
       }
 
-      boolean this_present_userId = true && this.isSetUserId();
-      boolean that_present_userId = true && that.isSetUserId();
-      if (this_present_userId || that_present_userId) {
-        if (!(this_present_userId && that_present_userId))
+      boolean this_present_groupId = true && this.isSetGroupId();
+      boolean that_present_groupId = true && that.isSetGroupId();
+      if (this_present_groupId || that_present_groupId) {
+        if (!(this_present_groupId && that_present_groupId))
           return false;
-        if (!this.userId.equals(that.userId))
+        if (!this.groupId.equals(that.groupId))
+          return false;
+      }
+
+      boolean this_present_ownerId = true && this.isSetOwnerId();
+      boolean that_present_ownerId = true && that.isSetOwnerId();
+      if (this_present_ownerId || that_present_ownerId) {
+        if (!(this_present_ownerId && that_present_ownerId))
+          return false;
+        if (!this.ownerId.equals(that.ownerId))
           return false;
       }
 
@@ -31396,15 +32055,19 @@ public int hashCode() {
       if (isSetDomainId())
         hashCode = hashCode * 8191 + domainId.hashCode();
 
-      hashCode = hashCode * 8191 + ((isSetUserId()) ? 131071 : 524287);
-      if (isSetUserId())
-        hashCode = hashCode * 8191 + userId.hashCode();
+      hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+      if (isSetGroupId())
+        hashCode = hashCode * 8191 + groupId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetOwnerId()) ? 131071 : 524287);
+      if (isSetOwnerId())
+        hashCode = hashCode * 8191 + ownerId.hashCode();
 
       return hashCode;
     }
 
     @Override
-    public int compareTo(getAllMemberGroupsForUser_args other) {
+    public int compareTo(hasOwnerAccess_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
@@ -31421,12 +32084,22 @@ public int compareTo(getAllMemberGroupsForUser_args other) {
           return lastComparison;
         }
       }
-      lastComparison = java.lang.Boolean.valueOf(isSetUserId()).compareTo(other.isSetUserId());
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetUserId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userId, other.userId);
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetOwnerId()).compareTo(other.isSetOwnerId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetOwnerId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.ownerId, other.ownerId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -31448,7 +32121,7 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
 
     @Override
     public java.lang.String toString() {
-      java.lang.StringBuilder sb = new java.lang.StringBuilder("getAllMemberGroupsForUser_args(");
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("hasOwnerAccess_args(");
       boolean first = true;
 
       sb.append("domainId:");
@@ -31459,11 +32132,19 @@ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("userId:");
-      if (this.userId == null) {
+      sb.append("groupId:");
+      if (this.groupId == null) {
         sb.append("null");
       } else {
-        sb.append(this.userId);
+        sb.append(this.groupId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("ownerId:");
+      if (this.ownerId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.ownerId);
       }
       first = false;
       sb.append(")");
@@ -31475,8 +32156,11 @@ public void validate() throws org.apache.thrift.TException {
       if (domainId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
       }
-      if (userId == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'userId' was not present! Struct: " + toString());
+      if (groupId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
+      }
+      if (ownerId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'ownerId' was not present! Struct: " + toString());
       }
       // check for sub-struct validity
     }
@@ -31497,15 +32181,15 @@ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException
       }
     }
 
-    private static class getAllMemberGroupsForUser_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getAllMemberGroupsForUser_argsStandardScheme getScheme() {
-        return new getAllMemberGroupsForUser_argsStandardScheme();
+    private static class hasOwnerAccess_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasOwnerAccess_argsStandardScheme getScheme() {
+        return new hasOwnerAccess_argsStandardScheme();
       }
     }
 
-    private static class getAllMemberGroupsForUser_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getAllMemberGroupsForUser_args> {
+    private static class hasOwnerAccess_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<hasOwnerAccess_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, hasOwnerAccess_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -31523,10 +32207,18 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getAllMemberGroupsF
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // USER_ID
+            case 2: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.userId = iprot.readString();
-                struct.setUserIdIsSet(true);
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // OWNER_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.ownerId = iprot.readString();
+                struct.setOwnerIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -31542,7 +32234,7 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getAllMemberGroupsF
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, hasOwnerAccess_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
@@ -31551,9 +32243,14 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getAllMemberGroups
           oprot.writeString(struct.domainId);
           oprot.writeFieldEnd();
         }
-        if (struct.userId != null) {
-          oprot.writeFieldBegin(USER_ID_FIELD_DESC);
-          oprot.writeString(struct.userId);
+        if (struct.groupId != null) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.ownerId != null) {
+          oprot.writeFieldBegin(OWNER_ID_FIELD_DESC);
+          oprot.writeString(struct.ownerId);
           oprot.writeFieldEnd();
         }
         oprot.writeFieldStop();
@@ -31562,28 +32259,31 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getAllMemberGroups
 
     }
 
-    private static class getAllMemberGroupsForUser_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
-      public getAllMemberGroupsForUser_argsTupleScheme getScheme() {
-        return new getAllMemberGroupsForUser_argsTupleScheme();
+    private static class hasOwnerAccess_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasOwnerAccess_argsTupleScheme getScheme() {
+        return new hasOwnerAccess_argsTupleScheme();
       }
     }
 
-    private static class getAllMemberGroupsForUser_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getAllMemberGroupsForUser_args> {
+    private static class hasOwnerAccess_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<hasOwnerAccess_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, hasOwnerAccess_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         oprot.writeString(struct.domainId);
-        oprot.writeString(struct.userId);
+        oprot.writeString(struct.groupId);
+        oprot.writeString(struct.ownerId);
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, hasOwnerAccess_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
         struct.domainId = iprot.readString();
         struct.setDomainIdIsSet(true);
-        struct.userId = iprot.readString();
-        struct.setUserIdIsSet(true);
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+        struct.ownerId = iprot.readString();
+        struct.setOwnerIdIsSet(true);
       }
     }
 
@@ -31592,16 +32292,5369 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsFo
     }
   }
 
-  public static class getAllMemberGroupsForUser_result implements org.apache.thrift.TBase<getAllMemberGroupsForUser_result, getAllMemberGroupsForUser_result._Fields>, java.io.Serializable, Cloneable, Comparable<getAllMemberGroupsForUser_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getAllMemberGroupsForUser_result");
+  public static class hasOwnerAccess_result implements org.apache.thrift.TBase<hasOwnerAccess_result, hasOwnerAccess_result._Fields>, java.io.Serializable, Cloneable, Comparable<hasOwnerAccess_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("hasOwnerAccess_result");
 
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
     private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
 
-    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAllMemberGroupsForUser_resultStandardSchemeFactory();
-    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAllMemberGroupsForUser_resultTupleSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new hasOwnerAccess_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new hasOwnerAccess_resultTupleSchemeFactory();
 
-    public java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success; // required
+    public boolean success; // required
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      SRE((short)1, "sre");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // SRE
+            return SRE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    private static final int __SUCCESS_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+      tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(hasOwnerAccess_result.class, metaDataMap);
+    }
+
+    public hasOwnerAccess_result() {
+    }
+
+    public hasOwnerAccess_result(
+      boolean success,
+      org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
+    {
+      this();
+      this.success = success;
+      setSuccessIsSet(true);
+      this.sre = sre;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public hasOwnerAccess_result(hasOwnerAccess_result other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.success = other.success;
+      if (other.isSetSre()) {
+        this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
+      }
+    }
+
+    public hasOwnerAccess_result deepCopy() {
+      return new hasOwnerAccess_result(this);
+    }
+
+    @Override
+    public void clear() {
+      setSuccessIsSet(false);
+      this.success = false;
+      this.sre = null;
+    }
+
+    public boolean isSuccess() {
+      return this.success;
+    }
+
+    public hasOwnerAccess_result setSuccess(boolean success) {
+      this.success = success;
+      setSuccessIsSet(true);
+      return this;
+    }
+
+    public void unsetSuccess() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+    }
+
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
+      return this.sre;
+    }
+
+    public hasOwnerAccess_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+      this.sre = sre;
+      return this;
+    }
+
+    public void unsetSre() {
+      this.sre = null;
+    }
+
+    /** Returns true if field sre is set (has been assigned a value) and false otherwise */
+    public boolean isSetSre() {
+      return this.sre != null;
+    }
+
+    public void setSreIsSet(boolean value) {
+      if (!value) {
+        this.sre = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.lang.Boolean)value);
+        }
+        break;
+
+      case SRE:
+        if (value == null) {
+          unsetSre();
+        } else {
+          setSre((org.apache.airavata.sharing.registry.models.SharingRegistryException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return isSuccess();
+
+      case SRE:
+        return getSre();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case SRE:
+        return isSetSre();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof hasOwnerAccess_result)
+        return this.equals((hasOwnerAccess_result)that);
+      return false;
+    }
+
+    public boolean equals(hasOwnerAccess_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true;
+      boolean that_present_success = true;
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (this.success != that.success)
+          return false;
+      }
+
+      boolean this_present_sre = true && this.isSetSre();
+      boolean that_present_sre = true && that.isSetSre();
+      if (this_present_sre || that_present_sre) {
+        if (!(this_present_sre && that_present_sre))
+          return false;
+        if (!this.sre.equals(that.sre))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+
+      hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
+      if (isSetSre())
+        hashCode = hashCode * 8191 + sre.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(hasOwnerAccess_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetSre()).compareTo(other.isSetSre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sre, other.sre);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("hasOwnerAccess_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      sb.append(this.success);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("sre:");
+      if (this.sre == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.sre);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class hasOwnerAccess_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasOwnerAccess_resultStandardScheme getScheme() {
+        return new hasOwnerAccess_resultStandardScheme();
+      }
+    }
+
+    private static class hasOwnerAccess_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<hasOwnerAccess_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, hasOwnerAccess_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                struct.success = iprot.readBool();
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // SRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+                struct.sre.read(iprot);
+                struct.setSreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, hasOwnerAccess_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.isSetSuccess()) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          oprot.writeBool(struct.success);
+          oprot.writeFieldEnd();
+        }
+        if (struct.sre != null) {
+          oprot.writeFieldBegin(SRE_FIELD_DESC);
+          struct.sre.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class hasOwnerAccess_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public hasOwnerAccess_resultTupleScheme getScheme() {
+        return new hasOwnerAccess_resultTupleScheme();
+      }
+    }
+
+    private static class hasOwnerAccess_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<hasOwnerAccess_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, hasOwnerAccess_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetSre()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          oprot.writeBool(struct.success);
+        }
+        if (struct.isSetSre()) {
+          struct.sre.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, hasOwnerAccess_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          struct.success = iprot.readBool();
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+          struct.sre.read(iprot);
+          struct.setSreIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getGroupMembersOfTypeUser_args implements org.apache.thrift.TBase<getGroupMembersOfTypeUser_args, getGroupMembersOfTypeUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeUser_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeUser_args");
+
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)3);
+    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)4);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeUser_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeUser_argsTupleSchemeFactory();
+
+    public java.lang.String domainId; // required
+    public java.lang.String groupId; // required
+    public int offset; // required
+    public int limit; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      DOMAIN_ID((short)1, "domainId"),
+      GROUP_ID((short)2, "groupId"),
+      OFFSET((short)3, "offset"),
+      LIMIT((short)4, "limit");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // GROUP_ID
+            return GROUP_ID;
+          case 3: // OFFSET
+            return OFFSET;
+          case 4: // LIMIT
+            return LIMIT;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    private static final int __OFFSET_ISSET_ID = 0;
+    private static final int __LIMIT_ISSET_ID = 1;
+    private byte __isset_bitfield = 0;
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.OFFSET, new org.apache.thrift.meta_data.FieldMetaData("offset", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+      tmpMap.put(_Fields.LIMIT, new org.apache.thrift.meta_data.FieldMetaData("limit", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeUser_args.class, metaDataMap);
+    }
+
+    public getGroupMembersOfTypeUser_args() {
+    }
+
+    public getGroupMembersOfTypeUser_args(
+      java.lang.String domainId,
+      java.lang.String groupId,
+      int offset,
+      int limit)
+    {
+      this();
+      this.domainId = domainId;
+      this.groupId = groupId;
+      this.offset = offset;
+      setOffsetIsSet(true);
+      this.limit = limit;
+      setLimitIsSet(true);
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getGroupMembersOfTypeUser_args(getGroupMembersOfTypeUser_args other) {
+      __isset_bitfield = other.__isset_bitfield;
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
+      if (other.isSetGroupId()) {
+        this.groupId = other.groupId;
+      }
+      this.offset = other.offset;
+      this.limit = other.limit;
+    }
+
+    public getGroupMembersOfTypeUser_args deepCopy() {
+      return new getGroupMembersOfTypeUser_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.domainId = null;
+      this.groupId = null;
+      setOffsetIsSet(false);
+      this.offset = 0;
+      setLimitIsSet(false);
+      this.limit = 0;
+    }
+
+    public java.lang.String getDomainId() {
+      return this.domainId;
+    }
+
+    public getGroupMembersOfTypeUser_args setDomainId(java.lang.String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
+    public java.lang.String getGroupId() {
+      return this.groupId;
+    }
+
+    public getGroupMembersOfTypeUser_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
+      return this;
+    }
+
+    public void unsetGroupId() {
+      this.groupId = null;
+    }
+
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
+    }
+
+    public void setGroupIdIsSet(boolean value) {
+      if (!value) {
+        this.groupId = null;
+      }
+    }
+
+    public int getOffset() {
+      return this.offset;
+    }
+
+    public getGroupMembersOfTypeUser_args setOffset(int offset) {
+      this.offset = offset;
+      setOffsetIsSet(true);
+      return this;
+    }
+
+    public void unsetOffset() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    }
+
+    /** Returns true if field offset is set (has been assigned a value) and false otherwise */
+    public boolean isSetOffset() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    }
+
+    public void setOffsetIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __OFFSET_ISSET_ID, value);
+    }
+
+    public int getLimit() {
+      return this.limit;
+    }
+
+    public getGroupMembersOfTypeUser_args setLimit(int limit) {
+      this.limit = limit;
+      setLimitIsSet(true);
+      return this;
+    }
+
+    public void unsetLimit() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __LIMIT_ISSET_ID);
+    }
+
+    /** Returns true if field limit is set (has been assigned a value) and false otherwise */
+    public boolean isSetLimit() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __LIMIT_ISSET_ID);
+    }
+
+    public void setLimitIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __LIMIT_ISSET_ID, value);
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((java.lang.String)value);
+        }
+        break;
+
+      case GROUP_ID:
+        if (value == null) {
+          unsetGroupId();
+        } else {
+          setGroupId((java.lang.String)value);
+        }
+        break;
+
+      case OFFSET:
+        if (value == null) {
+          unsetOffset();
+        } else {
+          setOffset((java.lang.Integer)value);
+        }
+        break;
+
+      case LIMIT:
+        if (value == null) {
+          unsetLimit();
+        } else {
+          setLimit((java.lang.Integer)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
+      case GROUP_ID:
+        return getGroupId();
+
+      case OFFSET:
+        return getOffset();
+
+      case LIMIT:
+        return getLimit();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
+      case GROUP_ID:
+        return isSetGroupId();
+      case OFFSET:
+        return isSetOffset();
+      case LIMIT:
+        return isSetLimit();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getGroupMembersOfTypeUser_args)
+        return this.equals((getGroupMembersOfTypeUser_args)that);
+      return false;
+    }
+
+    public boolean equals(getGroupMembersOfTypeUser_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
+      boolean this_present_groupId = true && this.isSetGroupId();
+      boolean that_present_groupId = true && that.isSetGroupId();
+      if (this_present_groupId || that_present_groupId) {
+        if (!(this_present_groupId && that_present_groupId))
+          return false;
+        if (!this.groupId.equals(that.groupId))
+          return false;
+      }
+
+      boolean this_present_offset = true;
+      boolean that_present_offset = true;
+      if (this_present_offset || that_present_offset) {
+        if (!(this_present_offset && that_present_offset))
+          return false;
+        if (this.offset != that.offset)
+          return false;
+      }
+
+      boolean this_present_limit = true;
+      boolean that_present_limit = true;
+      if (this_present_limit || that_present_limit) {
+        if (!(this_present_limit && that_present_limit))
+          return false;
+        if (this.limit != that.limit)
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+      if (isSetDomainId())
+        hashCode = hashCode * 8191 + domainId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+      if (isSetGroupId())
+        hashCode = hashCode * 8191 + groupId.hashCode();
+
+      hashCode = hashCode * 8191 + offset;
+
+      hashCode = hashCode * 8191 + limit;
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getGroupMembersOfTypeUser_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetOffset()).compareTo(other.isSetOffset());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetOffset()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.offset, other.offset);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetLimit()).compareTo(other.isSetLimit());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetLimit()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.limit, other.limit);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeUser_args(");
+      boolean first = true;
+
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("groupId:");
+      if (this.groupId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.groupId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("offset:");
+      sb.append(this.offset);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("limit:");
+      sb.append(this.limit);
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (groupId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
+      }
+      // alas, we cannot check 'offset' because it's a primitive and you chose the non-beans generator.
+      // alas, we cannot check 'limit' because it's a primitive and you chose the non-beans generator.
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getGroupMembersOfTypeUser_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeUser_argsStandardScheme getScheme() {
+        return new getGroupMembersOfTypeUser_argsStandardScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeUser_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeUser_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // GROUP_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // OFFSET
+              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                struct.offset = iprot.readI32();
+                struct.setOffsetIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 4: // LIMIT
+              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                struct.limit = iprot.readI32();
+                struct.setLimitIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        if (!struct.isSetOffset()) {
+          throw new org.apache.thrift.protocol.TProtocolException("Required field 'offset' was not found in serialized data! Struct: " + toString());
+        }
+        if (!struct.isSetLimit()) {
+          throw new org.apache.thrift.protocol.TProtocolException("Required field 'limit' was not found in serialized data! Struct: " + toString());
+        }
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.groupId != null) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldBegin(OFFSET_FIELD_DESC);
+        oprot.writeI32(struct.offset);
+        oprot.writeFieldEnd();
+        oprot.writeFieldBegin(LIMIT_FIELD_DESC);
+        oprot.writeI32(struct.limit);
+        oprot.writeFieldEnd();
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getGroupMembersOfTypeUser_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeUser_argsTupleScheme getScheme() {
+        return new getGroupMembersOfTypeUser_argsTupleScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeUser_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeUser_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        oprot.writeString(struct.groupId);
+        oprot.writeI32(struct.offset);
+        oprot.writeI32(struct.limit);
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetDomainId()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetDomainId()) {
+          oprot.writeString(struct.domainId);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+        struct.offset = iprot.readI32();
+        struct.setOffsetIsSet(true);
+        struct.limit = iprot.readI32();
+        struct.setLimitIsSet(true);
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.domainId = iprot.readString();
+          struct.setDomainIdIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getGroupMembersOfTypeUser_result implements org.apache.thrift.TBase<getGroupMembersOfTypeUser_result, getGroupMembersOfTypeUser_result._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeUser_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeUser_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeUser_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeUser_resultTupleSchemeFactory();
+
+    public java.util.List<org.apache.airavata.sharing.registry.models.User> success; // required
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      SRE((short)1, "sre");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // SRE
+            return SRE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.User.class))));
+      tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeUser_result.class, metaDataMap);
+    }
+
+    public getGroupMembersOfTypeUser_result() {
+    }
+
+    public getGroupMembersOfTypeUser_result(
+      java.util.List<org.apache.airavata.sharing.registry.models.User> success,
+      org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
+    {
+      this();
+      this.success = success;
+      this.sre = sre;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getGroupMembersOfTypeUser_result(getGroupMembersOfTypeUser_result other) {
+      if (other.isSetSuccess()) {
+        java.util.List<org.apache.airavata.sharing.registry.models.User> __this__success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(other.success.size());
+        for (org.apache.airavata.sharing.registry.models.User other_element : other.success) {
+          __this__success.add(new org.apache.airavata.sharing.registry.models.User(other_element));
+        }
+        this.success = __this__success;
+      }
+      if (other.isSetSre()) {
+        this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
+      }
+    }
+
+    public getGroupMembersOfTypeUser_result deepCopy() {
+      return new getGroupMembersOfTypeUser_result(this);
+    }
+
+    @Override
+    public void clear() {
+      this.success = null;
+      this.sre = null;
+    }
+
+    public int getSuccessSize() {
+      return (this.success == null) ? 0 : this.success.size();
+    }
+
+    public java.util.Iterator<org.apache.airavata.sharing.registry.models.User> getSuccessIterator() {
+      return (this.success == null) ? null : this.success.iterator();
+    }
+
+    public void addToSuccess(org.apache.airavata.sharing.registry.models.User elem) {
+      if (this.success == null) {
+        this.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>();
+      }
+      this.success.add(elem);
+    }
+
+    public java.util.List<org.apache.airavata.sharing.registry.models.User> getSuccess() {
+      return this.success;
+    }
+
+    public getGroupMembersOfTypeUser_result setSuccess(java.util.List<org.apache.airavata.sharing.registry.models.User> success) {
+      this.success = success;
+      return this;
+    }
+
+    public void unsetSuccess() {
+      this.success = null;
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return this.success != null;
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
+
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
+      return this.sre;
+    }
+
+    public getGroupMembersOfTypeUser_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+      this.sre = sre;
+      return this;
+    }
+
+    public void unsetSre() {
+      this.sre = null;
+    }
+
+    /** Returns true if field sre is set (has been assigned a value) and false otherwise */
+    public boolean isSetSre() {
+      return this.sre != null;
+    }
+
+    public void setSreIsSet(boolean value) {
+      if (!value) {
+        this.sre = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.util.List<org.apache.airavata.sharing.registry.models.User>)value);
+        }
+        break;
+
+      case SRE:
+        if (value == null) {
+          unsetSre();
+        } else {
+          setSre((org.apache.airavata.sharing.registry.models.SharingRegistryException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return getSuccess();
+
+      case SRE:
+        return getSre();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case SRE:
+        return isSetSre();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getGroupMembersOfTypeUser_result)
+        return this.equals((getGroupMembersOfTypeUser_result)that);
+      return false;
+    }
+
+    public boolean equals(getGroupMembersOfTypeUser_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (!this.success.equals(that.success))
+          return false;
+      }
+
+      boolean this_present_sre = true && this.isSetSre();
+      boolean that_present_sre = true && that.isSetSre();
+      if (this_present_sre || that_present_sre) {
+        if (!(this_present_sre && that_present_sre))
+          return false;
+        if (!this.sre.equals(that.sre))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
+      if (isSetSre())
+        hashCode = hashCode * 8191 + sre.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getGroupMembersOfTypeUser_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetSre()).compareTo(other.isSetSre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sre, other.sre);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeUser_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("sre:");
+      if (this.sre == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.sre);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getGroupMembersOfTypeUser_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeUser_resultStandardScheme getScheme() {
+        return new getGroupMembersOfTypeUser_resultStandardScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeUser_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeUser_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list56 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list56.size);
+                  org.apache.airavata.sharing.registry.models.User _elem57;
+                  for (int _i58 = 0; _i58 < _list56.size; ++_i58)
+                  {
+                    _elem57 = new org.apache.airavata.sharing.registry.models.User();
+                    _elem57.read(iprot);
+                    struct.success.add(_elem57);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // SRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+                struct.sre.read(iprot);
+                struct.setSreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
+            for (org.apache.airavata.sharing.registry.models.User _iter59 : struct.success)
+            {
+              _iter59.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.sre != null) {
+          oprot.writeFieldBegin(SRE_FIELD_DESC);
+          struct.sre.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getGroupMembersOfTypeUser_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeUser_resultTupleScheme getScheme() {
+        return new getGroupMembersOfTypeUser_resultTupleScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeUser_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeUser_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetSre()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          {
+            oprot.writeI32(struct.success.size());
+            for (org.apache.airavata.sharing.registry.models.User _iter60 : struct.success)
+            {
+              _iter60.write(oprot);
+            }
+          }
+        }
+        if (struct.isSetSre()) {
+          struct.sre.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeUser_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          {
+            org.apache.thrift.protocol.TList _list61 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list61.size);
+            org.apache.airavata.sharing.registry.models.User _elem62;
+            for (int _i63 = 0; _i63 < _list61.size; ++_i63)
+            {
+              _elem62 = new org.apache.airavata.sharing.registry.models.User();
+              _elem62.read(iprot);
+              struct.success.add(_elem62);
+            }
+          }
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+          struct.sre.read(iprot);
+          struct.setSreIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getGroupMembersOfTypeGroup_args implements org.apache.thrift.TBase<getGroupMembersOfTypeGroup_args, getGroupMembersOfTypeGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeGroup_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeGroup_args");
+
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)3);
+    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)4);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_argsTupleSchemeFactory();
+
+    public java.lang.String domainId; // required
+    public java.lang.String groupId; // required
+    public int offset; // required
+    public int limit; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      DOMAIN_ID((short)1, "domainId"),
+      GROUP_ID((short)2, "groupId"),
+      OFFSET((short)3, "offset"),
+      LIMIT((short)4, "limit");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // GROUP_ID
+            return GROUP_ID;
+          case 3: // OFFSET
+            return OFFSET;
+          case 4: // LIMIT
+            return LIMIT;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    private static final int __OFFSET_ISSET_ID = 0;
+    private static final int __LIMIT_ISSET_ID = 1;
+    private byte __isset_bitfield = 0;
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.OFFSET, new org.apache.thrift.meta_data.FieldMetaData("offset", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+      tmpMap.put(_Fields.LIMIT, new org.apache.thrift.meta_data.FieldMetaData("limit", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeGroup_args.class, metaDataMap);
+    }
+
+    public getGroupMembersOfTypeGroup_args() {
+    }
+
+    public getGroupMembersOfTypeGroup_args(
+      java.lang.String domainId,
+      java.lang.String groupId,
+      int offset,
+      int limit)
+    {
+      this();
+      this.domainId = domainId;
+      this.groupId = groupId;
+      this.offset = offset;
+      setOffsetIsSet(true);
+      this.limit = limit;
+      setLimitIsSet(true);
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getGroupMembersOfTypeGroup_args(getGroupMembersOfTypeGroup_args other) {
+      __isset_bitfield = other.__isset_bitfield;
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
+      if (other.isSetGroupId()) {
+        this.groupId = other.groupId;
+      }
+      this.offset = other.offset;
+      this.limit = other.limit;
+    }
+
+    public getGroupMembersOfTypeGroup_args deepCopy() {
+      return new getGroupMembersOfTypeGroup_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.domainId = null;
+      this.groupId = null;
+      setOffsetIsSet(false);
+      this.offset = 0;
+      setLimitIsSet(false);
+      this.limit = 0;
+    }
+
+    public java.lang.String getDomainId() {
+      return this.domainId;
+    }
+
+    public getGroupMembersOfTypeGroup_args setDomainId(java.lang.String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
+    public java.lang.String getGroupId() {
+      return this.groupId;
+    }
+
+    public getGroupMembersOfTypeGroup_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
+      return this;
+    }
+
+    public void unsetGroupId() {
+      this.groupId = null;
+    }
+
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
+    }
+
+    public void setGroupIdIsSet(boolean value) {
+      if (!value) {
+        this.groupId = null;
+      }
+    }
+
+    public int getOffset() {
+      return this.offset;
+    }
+
+    public getGroupMembersOfTypeGroup_args setOffset(int offset) {
+      this.offset = offset;
+      setOffsetIsSet(true);
+      return this;
+    }
+
+    public void unsetOffset() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    }
+
+    /** Returns true if field offset is set (has been assigned a value) and false otherwise */
+    public boolean isSetOffset() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __OFFSET_ISSET_ID);
+    }
+
+    public void setOffsetIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __OFFSET_ISSET_ID, value);
+    }
+
+    public int getLimit() {
+      return this.limit;
+    }
+
+    public getGroupMembersOfTypeGroup_args setLimit(int limit) {
+      this.limit = limit;
+      setLimitIsSet(true);
+      return this;
+    }
+
+    public void unsetLimit() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __LIMIT_ISSET_ID);
+    }
+
+    /** Returns true if field limit is set (has been assigned a value) and false otherwise */
+    public boolean isSetLimit() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __LIMIT_ISSET_ID);
+    }
+
+    public void setLimitIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __LIMIT_ISSET_ID, value);
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((java.lang.String)value);
+        }
+        break;
+
+      case GROUP_ID:
+        if (value == null) {
+          unsetGroupId();
+        } else {
+          setGroupId((java.lang.String)value);
+        }
+        break;
+
+      case OFFSET:
+        if (value == null) {
+          unsetOffset();
+        } else {
+          setOffset((java.lang.Integer)value);
+        }
+        break;
+
+      case LIMIT:
+        if (value == null) {
+          unsetLimit();
+        } else {
+          setLimit((java.lang.Integer)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
+      case GROUP_ID:
+        return getGroupId();
+
+      case OFFSET:
+        return getOffset();
+
+      case LIMIT:
+        return getLimit();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
+      case GROUP_ID:
+        return isSetGroupId();
+      case OFFSET:
+        return isSetOffset();
+      case LIMIT:
+        return isSetLimit();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getGroupMembersOfTypeGroup_args)
+        return this.equals((getGroupMembersOfTypeGroup_args)that);
+      return false;
+    }
+
+    public boolean equals(getGroupMembersOfTypeGroup_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
+      boolean this_present_groupId = true && this.isSetGroupId();
+      boolean that_present_groupId = true && that.isSetGroupId();
+      if (this_present_groupId || that_present_groupId) {
+        if (!(this_present_groupId && that_present_groupId))
+          return false;
+        if (!this.groupId.equals(that.groupId))
+          return false;
+      }
+
+      boolean this_present_offset = true;
+      boolean that_present_offset = true;
+      if (this_present_offset || that_present_offset) {
+        if (!(this_present_offset && that_present_offset))
+          return false;
+        if (this.offset != that.offset)
+          return false;
+      }
+
+      boolean this_present_limit = true;
+      boolean that_present_limit = true;
+      if (this_present_limit || that_present_limit) {
+        if (!(this_present_limit && that_present_limit))
+          return false;
+        if (this.limit != that.limit)
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+      if (isSetDomainId())
+        hashCode = hashCode * 8191 + domainId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+      if (isSetGroupId())
+        hashCode = hashCode * 8191 + groupId.hashCode();
+
+      hashCode = hashCode * 8191 + offset;
+
+      hashCode = hashCode * 8191 + limit;
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getGroupMembersOfTypeGroup_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetOffset()).compareTo(other.isSetOffset());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetOffset()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.offset, other.offset);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetLimit()).compareTo(other.isSetLimit());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetLimit()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.limit, other.limit);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeGroup_args(");
+      boolean first = true;
+
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("groupId:");
+      if (this.groupId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.groupId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("offset:");
+      sb.append(this.offset);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("limit:");
+      sb.append(this.limit);
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
+      if (groupId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
+      }
+      // alas, we cannot check 'offset' because it's a primitive and you chose the non-beans generator.
+      // alas, we cannot check 'limit' because it's a primitive and you chose the non-beans generator.
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getGroupMembersOfTypeGroup_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeGroup_argsStandardScheme getScheme() {
+        return new getGroupMembersOfTypeGroup_argsStandardScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeGroup_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeGroup_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // GROUP_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // OFFSET
+              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                struct.offset = iprot.readI32();
+                struct.setOffsetIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 4: // LIMIT
+              if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+                struct.limit = iprot.readI32();
+                struct.setLimitIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        if (!struct.isSetOffset()) {
+          throw new org.apache.thrift.protocol.TProtocolException("Required field 'offset' was not found in serialized data! Struct: " + toString());
+        }
+        if (!struct.isSetLimit()) {
+          throw new org.apache.thrift.protocol.TProtocolException("Required field 'limit' was not found in serialized data! Struct: " + toString());
+        }
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.groupId != null) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldBegin(OFFSET_FIELD_DESC);
+        oprot.writeI32(struct.offset);
+        oprot.writeFieldEnd();
+        oprot.writeFieldBegin(LIMIT_FIELD_DESC);
+        oprot.writeI32(struct.limit);
+        oprot.writeFieldEnd();
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getGroupMembersOfTypeGroup_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeGroup_argsTupleScheme getScheme() {
+        return new getGroupMembersOfTypeGroup_argsTupleScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeGroup_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeGroup_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
+        oprot.writeString(struct.groupId);
+        oprot.writeI32(struct.offset);
+        oprot.writeI32(struct.limit);
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+        struct.offset = iprot.readI32();
+        struct.setOffsetIsSet(true);
+        struct.limit = iprot.readI32();
+        struct.setLimitIsSet(true);
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getGroupMembersOfTypeGroup_result implements org.apache.thrift.TBase<getGroupMembersOfTypeGroup_result, getGroupMembersOfTypeGroup_result._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeGroup_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeGroup_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getGroupMembersOfTypeGroup_resultTupleSchemeFactory();
+
+    public java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success; // required
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      SRE((short)1, "sre");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // SRE
+            return SRE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.UserGroup.class))));
+      tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getGroupMembersOfTypeGroup_result.class, metaDataMap);
+    }
+
+    public getGroupMembersOfTypeGroup_result() {
+    }
+
+    public getGroupMembersOfTypeGroup_result(
+      java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success,
+      org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
+    {
+      this();
+      this.success = success;
+      this.sre = sre;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getGroupMembersOfTypeGroup_result(getGroupMembersOfTypeGroup_result other) {
+      if (other.isSetSuccess()) {
+        java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> __this__success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(other.success.size());
+        for (org.apache.airavata.sharing.registry.models.UserGroup other_element : other.success) {
+          __this__success.add(new org.apache.airavata.sharing.registry.models.UserGroup(other_element));
+        }
+        this.success = __this__success;
+      }
+      if (other.isSetSre()) {
+        this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
+      }
+    }
+
+    public getGroupMembersOfTypeGroup_result deepCopy() {
+      return new getGroupMembersOfTypeGroup_result(this);
+    }
+
+    @Override
+    public void clear() {
+      this.success = null;
+      this.sre = null;
+    }
+
+    public int getSuccessSize() {
+      return (this.success == null) ? 0 : this.success.size();
+    }
+
+    public java.util.Iterator<org.apache.airavata.sharing.registry.models.UserGroup> getSuccessIterator() {
+      return (this.success == null) ? null : this.success.iterator();
+    }
+
+    public void addToSuccess(org.apache.airavata.sharing.registry.models.UserGroup elem) {
+      if (this.success == null) {
+        this.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>();
+      }
+      this.success.add(elem);
+    }
+
+    public java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> getSuccess() {
+      return this.success;
+    }
+
+    public getGroupMembersOfTypeGroup_result setSuccess(java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success) {
+      this.success = success;
+      return this;
+    }
+
+    public void unsetSuccess() {
+      this.success = null;
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return this.success != null;
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
+
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
+      return this.sre;
+    }
+
+    public getGroupMembersOfTypeGroup_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+      this.sre = sre;
+      return this;
+    }
+
+    public void unsetSre() {
+      this.sre = null;
+    }
+
+    /** Returns true if field sre is set (has been assigned a value) and false otherwise */
+    public boolean isSetSre() {
+      return this.sre != null;
+    }
+
+    public void setSreIsSet(boolean value) {
+      if (!value) {
+        this.sre = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.util.List<org.apache.airavata.sharing.registry.models.UserGroup>)value);
+        }
+        break;
+
+      case SRE:
+        if (value == null) {
+          unsetSre();
+        } else {
+          setSre((org.apache.airavata.sharing.registry.models.SharingRegistryException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return getSuccess();
+
+      case SRE:
+        return getSre();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case SRE:
+        return isSetSre();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getGroupMembersOfTypeGroup_result)
+        return this.equals((getGroupMembersOfTypeGroup_result)that);
+      return false;
+    }
+
+    public boolean equals(getGroupMembersOfTypeGroup_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (!this.success.equals(that.success))
+          return false;
+      }
+
+      boolean this_present_sre = true && this.isSetSre();
+      boolean that_present_sre = true && that.isSetSre();
+      if (this_present_sre || that_present_sre) {
+        if (!(this_present_sre && that_present_sre))
+          return false;
+        if (!this.sre.equals(that.sre))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
+      if (isSetSre())
+        hashCode = hashCode * 8191 + sre.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getGroupMembersOfTypeGroup_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetSre()).compareTo(other.isSetSre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sre, other.sre);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getGroupMembersOfTypeGroup_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("sre:");
+      if (this.sre == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.sre);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getGroupMembersOfTypeGroup_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeGroup_resultStandardScheme getScheme() {
+        return new getGroupMembersOfTypeGroup_resultStandardScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeGroup_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getGroupMembersOfTypeGroup_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list64 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list64.size);
+                  org.apache.airavata.sharing.registry.models.UserGroup _elem65;
+                  for (int _i66 = 0; _i66 < _list64.size; ++_i66)
+                  {
+                    _elem65 = new org.apache.airavata.sharing.registry.models.UserGroup();
+                    _elem65.read(iprot);
+                    struct.success.add(_elem65);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // SRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+                struct.sre.read(iprot);
+                struct.setSreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
+            for (org.apache.airavata.sharing.registry.models.UserGroup _iter67 : struct.success)
+            {
+              _iter67.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.sre != null) {
+          oprot.writeFieldBegin(SRE_FIELD_DESC);
+          struct.sre.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getGroupMembersOfTypeGroup_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getGroupMembersOfTypeGroup_resultTupleScheme getScheme() {
+        return new getGroupMembersOfTypeGroup_resultTupleScheme();
+      }
+    }
+
+    private static class getGroupMembersOfTypeGroup_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getGroupMembersOfTypeGroup_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetSre()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          {
+            oprot.writeI32(struct.success.size());
+            for (org.apache.airavata.sharing.registry.models.UserGroup _iter68 : struct.success)
+            {
+              _iter68.write(oprot);
+            }
+          }
+        }
+        if (struct.isSetSre()) {
+          struct.sre.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          {
+            org.apache.thrift.protocol.TList _list69 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list69.size);
+            org.apache.airavata.sharing.registry.models.UserGroup _elem70;
+            for (int _i71 = 0; _i71 < _list69.size; ++_i71)
+            {
+              _elem70 = new org.apache.airavata.sharing.registry.models.UserGroup();
+              _elem70.read(iprot);
+              struct.success.add(_elem70);
+            }
+          }
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+          struct.sre.read(iprot);
+          struct.setSreIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class addChildGroupsToParentGroup_args implements org.apache.thrift.TBase<addChildGroupsToParentGroup_args, addChildGroupsToParentGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<addChildGroupsToParentGroup_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addChildGroupsToParentGroup_args");
+
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField CHILD_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("childIds", org.apache.thrift.protocol.TType.LIST, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addChildGroupsToParentGroup_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addChildGroupsToParentGroup_argsTupleSchemeFactory();
+
+    public java.lang.String domainId; // required
+    public java.util.List<java.lang.String> childIds; // required
+    public java.lang.String groupId; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      DOMAIN_ID((short)1, "domainId"),
+      CHILD_IDS((short)2, "childIds"),
+      GROUP_ID((short)3, "groupId");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // CHILD_IDS
+            return CHILD_IDS;
+          case 3: // GROUP_ID
+            return GROUP_ID;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.CHILD_IDS, new org.apache.thrift.meta_data.FieldMetaData("childIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
+      tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addChildGroupsToParentGroup_args.class, metaDataMap);
+    }
+
+    public addChildGroupsToParentGroup_args() {
+    }
+
+    public addChildGroupsToParentGroup_args(
+      java.lang.String domainId,
+      java.util.List<java.lang.String> childIds,
+      java.lang.String groupId)
+    {
+      this();
+      this.domainId = domainId;
+      this.childIds = childIds;
+      this.groupId = groupId;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public addChildGroupsToParentGroup_args(addChildGroupsToParentGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
+      if (other.isSetChildIds()) {
+        java.util.List<java.lang.String> __this__childIds = new java.util.ArrayList<java.lang.String>(other.childIds);
+        this.childIds = __this__childIds;
+      }
+      if (other.isSetGroupId()) {
+        this.groupId = other.groupId;
+      }
+    }
+
+    public addChildGroupsToParentGroup_args deepCopy() {
+      return new addChildGroupsToParentGroup_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.domainId = null;
+      this.childIds = null;
+      this.groupId = null;
+    }
+
+    public java.lang.String getDomainId() {
+      return this.domainId;
+    }
+
+    public addChildGroupsToParentGroup_args setDomainId(java.lang.String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
+    public int getChildIdsSize() {
+      return (this.childIds == null) ? 0 : this.childIds.size();
+    }
+
+    public java.util.Iterator<java.lang.String> getChildIdsIterator() {
+      return (this.childIds == null) ? null : this.childIds.iterator();
+    }
+
+    public void addToChildIds(java.lang.String elem) {
+      if (this.childIds == null) {
+        this.childIds = new java.util.ArrayList<java.lang.String>();
+      }
+      this.childIds.add(elem);
+    }
+
+    public java.util.List<java.lang.String> getChildIds() {
+      return this.childIds;
+    }
+
+    public addChildGroupsToParentGroup_args setChildIds(java.util.List<java.lang.String> childIds) {
+      this.childIds = childIds;
+      return this;
+    }
+
+    public void unsetChildIds() {
+      this.childIds = null;
+    }
+
+    /** Returns true if field childIds is set (has been assigned a value) and false otherwise */
+    public boolean isSetChildIds() {
+      return this.childIds != null;
+    }
+
+    public void setChildIdsIsSet(boolean value) {
+      if (!value) {
+        this.childIds = null;
+      }
+    }
+
+    public java.lang.String getGroupId() {
+      return this.groupId;
+    }
+
+    public addChildGroupsToParentGroup_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
+      return this;
+    }
+
+    public void unsetGroupId() {
+      this.groupId = null;
+    }
+
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
+    }
+
+    public void setGroupIdIsSet(boolean value) {
+      if (!value) {
+        this.groupId = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((java.lang.String)value);
+        }
+        break;
+
+      case CHILD_IDS:
+        if (value == null) {
+          unsetChildIds();
+        } else {
+          setChildIds((java.util.List<java.lang.String>)value);
+        }
+        break;
+
+      case GROUP_ID:
+        if (value == null) {
+          unsetGroupId();
+        } else {
+          setGroupId((java.lang.String)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
+      case CHILD_IDS:
+        return getChildIds();
+
+      case GROUP_ID:
+        return getGroupId();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
+      case CHILD_IDS:
+        return isSetChildIds();
+      case GROUP_ID:
+        return isSetGroupId();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof addChildGroupsToParentGroup_args)
+        return this.equals((addChildGroupsToParentGroup_args)that);
+      return false;
+    }
+
+    public boolean equals(addChildGroupsToParentGroup_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
+      boolean this_present_childIds = true && this.isSetChildIds();
+      boolean that_present_childIds = true && that.isSetChildIds();
+      if (this_present_childIds || that_present_childIds) {
+        if (!(this_present_childIds && that_present_childIds))
+          return false;
+        if (!this.childIds.equals(that.childIds))
+          return false;
+      }
+
+      boolean this_present_groupId = true && this.isSetGroupId();
+      boolean that_present_groupId = true && that.isSetGroupId();
+      if (this_present_groupId || that_present_groupId) {
+        if (!(this_present_groupId && that_present_groupId))
+          return false;
+        if (!this.groupId.equals(that.groupId))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+      if (isSetDomainId())
+        hashCode = hashCode * 8191 + domainId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetChildIds()) ? 131071 : 524287);
+      if (isSetChildIds())
+        hashCode = hashCode * 8191 + childIds.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+      if (isSetGroupId())
+        hashCode = hashCode * 8191 + groupId.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(addChildGroupsToParentGroup_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetChildIds()).compareTo(other.isSetChildIds());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetChildIds()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.childIds, other.childIds);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("addChildGroupsToParentGroup_args(");
+      boolean first = true;
+
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("childIds:");
+      if (this.childIds == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.childIds);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("groupId:");
+      if (this.groupId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.groupId);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
+      if (childIds == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'childIds' was not present! Struct: " + toString());
+      }
+      if (groupId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
+      }
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class addChildGroupsToParentGroup_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addChildGroupsToParentGroup_argsStandardScheme getScheme() {
+        return new addChildGroupsToParentGroup_argsStandardScheme();
+      }
+    }
+
+    private static class addChildGroupsToParentGroup_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<addChildGroupsToParentGroup_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // CHILD_IDS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list72 = iprot.readListBegin();
+                  struct.childIds = new java.util.ArrayList<java.lang.String>(_list72.size);
+                  java.lang.String _elem73;
+                  for (int _i74 = 0; _i74 < _list72.size; ++_i74)
+                  {
+                    _elem73 = iprot.readString();
+                    struct.childIds.add(_elem73);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setChildIdsIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // GROUP_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.childIds != null) {
+          oprot.writeFieldBegin(CHILD_IDS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.childIds.size()));
+            for (java.lang.String _iter75 : struct.childIds)
+            {
+              oprot.writeString(_iter75);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.groupId != null) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class addChildGroupsToParentGroup_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addChildGroupsToParentGroup_argsTupleScheme getScheme() {
+        return new addChildGroupsToParentGroup_argsTupleScheme();
+      }
+    }
+
+    private static class addChildGroupsToParentGroup_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<addChildGroupsToParentGroup_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
+        {
+          oprot.writeI32(struct.childIds.size());
+          for (java.lang.String _iter76 : struct.childIds)
+          {
+            oprot.writeString(_iter76);
+          }
+        }
+        oprot.writeString(struct.groupId);
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+        {
+          org.apache.thrift.protocol.TList _list77 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.childIds = new java.util.ArrayList<java.lang.String>(_list77.size);
+          java.lang.String _elem78;
+          for (int _i79 = 0; _i79 < _list77.size; ++_i79)
+          {
+            _elem78 = iprot.readString();
+            struct.childIds.add(_elem78);
+          }
+        }
+        struct.setChildIdsIsSet(true);
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class addChildGroupsToParentGroup_result implements org.apache.thrift.TBase<addChildGroupsToParentGroup_result, addChildGroupsToParentGroup_result._Fields>, java.io.Serializable, Cloneable, Comparable<addChildGroupsToParentGroup_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addChildGroupsToParentGroup_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
+    private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new addChildGroupsToParentGroup_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new addChildGroupsToParentGroup_resultTupleSchemeFactory();
+
+    public boolean success; // required
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      SRE((short)1, "sre");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // SRE
+            return SRE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    private static final int __SUCCESS_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+      tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(addChildGroupsToParentGroup_result.class, metaDataMap);
+    }
+
+    public addChildGroupsToParentGroup_result() {
+    }
+
+    public addChildGroupsToParentGroup_result(
+      boolean success,
+      org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
+    {
+      this();
+      this.success = success;
+      setSuccessIsSet(true);
+      this.sre = sre;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public addChildGroupsToParentGroup_result(addChildGroupsToParentGroup_result other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.success = other.success;
+      if (other.isSetSre()) {
+        this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
+      }
+    }
+
+    public addChildGroupsToParentGroup_result deepCopy() {
+      return new addChildGroupsToParentGroup_result(this);
+    }
+
+    @Override
+    public void clear() {
+      setSuccessIsSet(false);
+      this.success = false;
+      this.sre = null;
+    }
+
+    public boolean isSuccess() {
+      return this.success;
+    }
+
+    public addChildGroupsToParentGroup_result setSuccess(boolean success) {
+      this.success = success;
+      setSuccessIsSet(true);
+      return this;
+    }
+
+    public void unsetSuccess() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+    }
+
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
+      return this.sre;
+    }
+
+    public addChildGroupsToParentGroup_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+      this.sre = sre;
+      return this;
+    }
+
+    public void unsetSre() {
+      this.sre = null;
+    }
+
+    /** Returns true if field sre is set (has been assigned a value) and false otherwise */
+    public boolean isSetSre() {
+      return this.sre != null;
+    }
+
+    public void setSreIsSet(boolean value) {
+      if (!value) {
+        this.sre = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.lang.Boolean)value);
+        }
+        break;
+
+      case SRE:
+        if (value == null) {
+          unsetSre();
+        } else {
+          setSre((org.apache.airavata.sharing.registry.models.SharingRegistryException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return isSuccess();
+
+      case SRE:
+        return getSre();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case SRE:
+        return isSetSre();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof addChildGroupsToParentGroup_result)
+        return this.equals((addChildGroupsToParentGroup_result)that);
+      return false;
+    }
+
+    public boolean equals(addChildGroupsToParentGroup_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true;
+      boolean that_present_success = true;
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (this.success != that.success)
+          return false;
+      }
+
+      boolean this_present_sre = true && this.isSetSre();
+      boolean that_present_sre = true && that.isSetSre();
+      if (this_present_sre || that_present_sre) {
+        if (!(this_present_sre && that_present_sre))
+          return false;
+        if (!this.sre.equals(that.sre))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+
+      hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
+      if (isSetSre())
+        hashCode = hashCode * 8191 + sre.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(addChildGroupsToParentGroup_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetSre()).compareTo(other.isSetSre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sre, other.sre);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("addChildGroupsToParentGroup_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      sb.append(this.success);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("sre:");
+      if (this.sre == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.sre);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class addChildGroupsToParentGroup_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addChildGroupsToParentGroup_resultStandardScheme getScheme() {
+        return new addChildGroupsToParentGroup_resultStandardScheme();
+      }
+    }
+
+    private static class addChildGroupsToParentGroup_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<addChildGroupsToParentGroup_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                struct.success = iprot.readBool();
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // SRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+                struct.sre.read(iprot);
+                struct.setSreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.isSetSuccess()) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          oprot.writeBool(struct.success);
+          oprot.writeFieldEnd();
+        }
+        if (struct.sre != null) {
+          oprot.writeFieldBegin(SRE_FIELD_DESC);
+          struct.sre.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class addChildGroupsToParentGroup_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public addChildGroupsToParentGroup_resultTupleScheme getScheme() {
+        return new addChildGroupsToParentGroup_resultTupleScheme();
+      }
+    }
+
+    private static class addChildGroupsToParentGroup_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<addChildGroupsToParentGroup_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetSre()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          oprot.writeBool(struct.success);
+        }
+        if (struct.isSetSre()) {
+          struct.sre.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          struct.success = iprot.readBool();
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+          struct.sre.read(iprot);
+          struct.setSreIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class removeChildGroupFromParentGroup_args implements org.apache.thrift.TBase<removeChildGroupFromParentGroup_args, removeChildGroupFromParentGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeChildGroupFromParentGroup_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeChildGroupFromParentGroup_args");
+
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField CHILD_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("childId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeChildGroupFromParentGroup_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeChildGroupFromParentGroup_argsTupleSchemeFactory();
+
+    public java.lang.String domainId; // required
+    public java.lang.String childId; // required
+    public java.lang.String groupId; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      DOMAIN_ID((short)1, "domainId"),
+      CHILD_ID((short)2, "childId"),
+      GROUP_ID((short)3, "groupId");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // CHILD_ID
+            return CHILD_ID;
+          case 3: // GROUP_ID
+            return GROUP_ID;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.CHILD_ID, new org.apache.thrift.meta_data.FieldMetaData("childId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeChildGroupFromParentGroup_args.class, metaDataMap);
+    }
+
+    public removeChildGroupFromParentGroup_args() {
+    }
+
+    public removeChildGroupFromParentGroup_args(
+      java.lang.String domainId,
+      java.lang.String childId,
+      java.lang.String groupId)
+    {
+      this();
+      this.domainId = domainId;
+      this.childId = childId;
+      this.groupId = groupId;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public removeChildGroupFromParentGroup_args(removeChildGroupFromParentGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
+      if (other.isSetChildId()) {
+        this.childId = other.childId;
+      }
+      if (other.isSetGroupId()) {
+        this.groupId = other.groupId;
+      }
+    }
+
+    public removeChildGroupFromParentGroup_args deepCopy() {
+      return new removeChildGroupFromParentGroup_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.domainId = null;
+      this.childId = null;
+      this.groupId = null;
+    }
+
+    public java.lang.String getDomainId() {
+      return this.domainId;
+    }
+
+    public removeChildGroupFromParentGroup_args setDomainId(java.lang.String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
+    public java.lang.String getChildId() {
+      return this.childId;
+    }
+
+    public removeChildGroupFromParentGroup_args setChildId(java.lang.String childId) {
+      this.childId = childId;
+      return this;
+    }
+
+    public void unsetChildId() {
+      this.childId = null;
+    }
+
+    /** Returns true if field childId is set (has been assigned a value) and false otherwise */
+    public boolean isSetChildId() {
+      return this.childId != null;
+    }
+
+    public void setChildIdIsSet(boolean value) {
+      if (!value) {
+        this.childId = null;
+      }
+    }
+
+    public java.lang.String getGroupId() {
+      return this.groupId;
+    }
+
+    public removeChildGroupFromParentGroup_args setGroupId(java.lang.String groupId) {
+      this.groupId = groupId;
+      return this;
+    }
+
+    public void unsetGroupId() {
+      this.groupId = null;
+    }
+
+    /** Returns true if field groupId is set (has been assigned a value) and false otherwise */
+    public boolean isSetGroupId() {
+      return this.groupId != null;
+    }
+
+    public void setGroupIdIsSet(boolean value) {
+      if (!value) {
+        this.groupId = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((java.lang.String)value);
+        }
+        break;
+
+      case CHILD_ID:
+        if (value == null) {
+          unsetChildId();
+        } else {
+          setChildId((java.lang.String)value);
+        }
+        break;
+
+      case GROUP_ID:
+        if (value == null) {
+          unsetGroupId();
+        } else {
+          setGroupId((java.lang.String)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
+      case CHILD_ID:
+        return getChildId();
+
+      case GROUP_ID:
+        return getGroupId();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
+      case CHILD_ID:
+        return isSetChildId();
+      case GROUP_ID:
+        return isSetGroupId();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof removeChildGroupFromParentGroup_args)
+        return this.equals((removeChildGroupFromParentGroup_args)that);
+      return false;
+    }
+
+    public boolean equals(removeChildGroupFromParentGroup_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
+      boolean this_present_childId = true && this.isSetChildId();
+      boolean that_present_childId = true && that.isSetChildId();
+      if (this_present_childId || that_present_childId) {
+        if (!(this_present_childId && that_present_childId))
+          return false;
+        if (!this.childId.equals(that.childId))
+          return false;
+      }
+
+      boolean this_present_groupId = true && this.isSetGroupId();
+      boolean that_present_groupId = true && that.isSetGroupId();
+      if (this_present_groupId || that_present_groupId) {
+        if (!(this_present_groupId && that_present_groupId))
+          return false;
+        if (!this.groupId.equals(that.groupId))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+      if (isSetDomainId())
+        hashCode = hashCode * 8191 + domainId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetChildId()) ? 131071 : 524287);
+      if (isSetChildId())
+        hashCode = hashCode * 8191 + childId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetGroupId()) ? 131071 : 524287);
+      if (isSetGroupId())
+        hashCode = hashCode * 8191 + groupId.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(removeChildGroupFromParentGroup_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetChildId()).compareTo(other.isSetChildId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetChildId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.childId, other.childId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetGroupId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.groupId, other.groupId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeChildGroupFromParentGroup_args(");
+      boolean first = true;
+
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("childId:");
+      if (this.childId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.childId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("groupId:");
+      if (this.groupId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.groupId);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
+      if (childId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'childId' was not present! Struct: " + toString());
+      }
+      if (groupId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
+      }
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class removeChildGroupFromParentGroup_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeChildGroupFromParentGroup_argsStandardScheme getScheme() {
+        return new removeChildGroupFromParentGroup_argsStandardScheme();
+      }
+    }
+
+    private static class removeChildGroupFromParentGroup_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeChildGroupFromParentGroup_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // CHILD_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.childId = iprot.readString();
+                struct.setChildIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // GROUP_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.groupId = iprot.readString();
+                struct.setGroupIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.childId != null) {
+          oprot.writeFieldBegin(CHILD_ID_FIELD_DESC);
+          oprot.writeString(struct.childId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.groupId != null) {
+          oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
+          oprot.writeString(struct.groupId);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class removeChildGroupFromParentGroup_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeChildGroupFromParentGroup_argsTupleScheme getScheme() {
+        return new removeChildGroupFromParentGroup_argsTupleScheme();
+      }
+    }
+
+    private static class removeChildGroupFromParentGroup_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeChildGroupFromParentGroup_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
+        oprot.writeString(struct.childId);
+        oprot.writeString(struct.groupId);
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+        struct.childId = iprot.readString();
+        struct.setChildIdIsSet(true);
+        struct.groupId = iprot.readString();
+        struct.setGroupIdIsSet(true);
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class removeChildGroupFromParentGroup_result implements org.apache.thrift.TBase<removeChildGroupFromParentGroup_result, removeChildGroupFromParentGroup_result._Fields>, java.io.Serializable, Cloneable, Comparable<removeChildGroupFromParentGroup_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeChildGroupFromParentGroup_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.BOOL, (short)0);
+    private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new removeChildGroupFromParentGroup_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new removeChildGroupFromParentGroup_resultTupleSchemeFactory();
+
+    public boolean success; // required
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      SRE((short)1, "sre");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // SRE
+            return SRE;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    private static final int __SUCCESS_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+      tmpMap.put(_Fields.SRE, new org.apache.thrift.meta_data.FieldMetaData("sre", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.sharing.registry.models.SharingRegistryException.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(removeChildGroupFromParentGroup_result.class, metaDataMap);
+    }
+
+    public removeChildGroupFromParentGroup_result() {
+    }
+
+    public removeChildGroupFromParentGroup_result(
+      boolean success,
+      org.apache.airavata.sharing.registry.models.SharingRegistryException sre)
+    {
+      this();
+      this.success = success;
+      setSuccessIsSet(true);
+      this.sre = sre;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public removeChildGroupFromParentGroup_result(removeChildGroupFromParentGroup_result other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.success = other.success;
+      if (other.isSetSre()) {
+        this.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException(other.sre);
+      }
+    }
+
+    public removeChildGroupFromParentGroup_result deepCopy() {
+      return new removeChildGroupFromParentGroup_result(this);
+    }
+
+    @Override
+    public void clear() {
+      setSuccessIsSet(false);
+      this.success = false;
+      this.sre = null;
+    }
+
+    public boolean isSuccess() {
+      return this.success;
+    }
+
+    public removeChildGroupFromParentGroup_result setSuccess(boolean success) {
+      this.success = success;
+      setSuccessIsSet(true);
+      return this;
+    }
+
+    public void unsetSuccess() {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __SUCCESS_ISSET_ID);
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __SUCCESS_ISSET_ID, value);
+    }
+
+    public org.apache.airavata.sharing.registry.models.SharingRegistryException getSre() {
+      return this.sre;
+    }
+
+    public removeChildGroupFromParentGroup_result setSre(org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
+      this.sre = sre;
+      return this;
+    }
+
+    public void unsetSre() {
+      this.sre = null;
+    }
+
+    /** Returns true if field sre is set (has been assigned a value) and false otherwise */
+    public boolean isSetSre() {
+      return this.sre != null;
+    }
+
+    public void setSreIsSet(boolean value) {
+      if (!value) {
+        this.sre = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.lang.Boolean)value);
+        }
+        break;
+
+      case SRE:
+        if (value == null) {
+          unsetSre();
+        } else {
+          setSre((org.apache.airavata.sharing.registry.models.SharingRegistryException)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return isSuccess();
+
+      case SRE:
+        return getSre();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case SRE:
+        return isSetSre();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof removeChildGroupFromParentGroup_result)
+        return this.equals((removeChildGroupFromParentGroup_result)that);
+      return false;
+    }
+
+    public boolean equals(removeChildGroupFromParentGroup_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true;
+      boolean that_present_success = true;
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (this.success != that.success)
+          return false;
+      }
+
+      boolean this_present_sre = true && this.isSetSre();
+      boolean that_present_sre = true && that.isSetSre();
+      if (this_present_sre || that_present_sre) {
+        if (!(this_present_sre && that_present_sre))
+          return false;
+        if (!this.sre.equals(that.sre))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((success) ? 131071 : 524287);
+
+      hashCode = hashCode * 8191 + ((isSetSre()) ? 131071 : 524287);
+      if (isSetSre())
+        hashCode = hashCode * 8191 + sre.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(removeChildGroupFromParentGroup_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetSre()).compareTo(other.isSetSre());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSre()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sre, other.sre);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("removeChildGroupFromParentGroup_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      sb.append(this.success);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("sre:");
+      if (this.sre == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.sre);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+        __isset_bitfield = 0;
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class removeChildGroupFromParentGroup_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeChildGroupFromParentGroup_resultStandardScheme getScheme() {
+        return new removeChildGroupFromParentGroup_resultStandardScheme();
+      }
+    }
+
+    private static class removeChildGroupFromParentGroup_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<removeChildGroupFromParentGroup_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+                struct.success = iprot.readBool();
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // SRE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+                struct.sre.read(iprot);
+                struct.setSreIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.isSetSuccess()) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          oprot.writeBool(struct.success);
+          oprot.writeFieldEnd();
+        }
+        if (struct.sre != null) {
+          oprot.writeFieldBegin(SRE_FIELD_DESC);
+          struct.sre.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class removeChildGroupFromParentGroup_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public removeChildGroupFromParentGroup_resultTupleScheme getScheme() {
+        return new removeChildGroupFromParentGroup_resultTupleScheme();
+      }
+    }
+
+    private static class removeChildGroupFromParentGroup_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<removeChildGroupFromParentGroup_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetSre()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          oprot.writeBool(struct.success);
+        }
+        if (struct.isSetSre()) {
+          struct.sre.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          struct.success = iprot.readBool();
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.sre = new org.apache.airavata.sharing.registry.models.SharingRegistryException();
+          struct.sre.read(iprot);
+          struct.setSreIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getAllMemberGroupsForUser_args implements org.apache.thrift.TBase<getAllMemberGroupsForUser_args, getAllMemberGroupsForUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<getAllMemberGroupsForUser_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getAllMemberGroupsForUser_args");
+
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)2);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAllMemberGroupsForUser_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAllMemberGroupsForUser_argsTupleSchemeFactory();
+
+    public java.lang.String domainId; // required
+    public java.lang.String userId; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      DOMAIN_ID((short)1, "domainId"),
+      USER_ID((short)2, "userId");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // USER_ID
+            return USER_ID;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.USER_ID, new org.apache.thrift.meta_data.FieldMetaData("userId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getAllMemberGroupsForUser_args.class, metaDataMap);
+    }
+
+    public getAllMemberGroupsForUser_args() {
+    }
+
+    public getAllMemberGroupsForUser_args(
+      java.lang.String domainId,
+      java.lang.String userId)
+    {
+      this();
+      this.domainId = domainId;
+      this.userId = userId;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getAllMemberGroupsForUser_args(getAllMemberGroupsForUser_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
+      if (other.isSetUserId()) {
+        this.userId = other.userId;
+      }
+    }
+
+    public getAllMemberGroupsForUser_args deepCopy() {
+      return new getAllMemberGroupsForUser_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.domainId = null;
+      this.userId = null;
+    }
+
+    public java.lang.String getDomainId() {
+      return this.domainId;
+    }
+
+    public getAllMemberGroupsForUser_args setDomainId(java.lang.String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
+    public java.lang.String getUserId() {
+      return this.userId;
+    }
+
+    public getAllMemberGroupsForUser_args setUserId(java.lang.String userId) {
+      this.userId = userId;
+      return this;
+    }
+
+    public void unsetUserId() {
+      this.userId = null;
+    }
+
+    /** Returns true if field userId is set (has been assigned a value) and false otherwise */
+    public boolean isSetUserId() {
+      return this.userId != null;
+    }
+
+    public void setUserIdIsSet(boolean value) {
+      if (!value) {
+        this.userId = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+      switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((java.lang.String)value);
+        }
+        break;
+
+      case USER_ID:
+        if (value == null) {
+          unsetUserId();
+        } else {
+          setUserId((java.lang.String)value);
+        }
+        break;
+
+      }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
+      case USER_ID:
+        return getUserId();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
+      case USER_ID:
+        return isSetUserId();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getAllMemberGroupsForUser_args)
+        return this.equals((getAllMemberGroupsForUser_args)that);
+      return false;
+    }
+
+    public boolean equals(getAllMemberGroupsForUser_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
+      boolean this_present_userId = true && this.isSetUserId();
+      boolean that_present_userId = true && that.isSetUserId();
+      if (this_present_userId || that_present_userId) {
+        if (!(this_present_userId && that_present_userId))
+          return false;
+        if (!this.userId.equals(that.userId))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetDomainId()) ? 131071 : 524287);
+      if (isSetDomainId())
+        hashCode = hashCode * 8191 + domainId.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetUserId()) ? 131071 : 524287);
+      if (isSetUserId())
+        hashCode = hashCode * 8191 + userId.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getAllMemberGroupsForUser_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetUserId()).compareTo(other.isSetUserId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetUserId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userId, other.userId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getAllMemberGroupsForUser_args(");
+      boolean first = true;
+
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("userId:");
+      if (this.userId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.userId);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
+      if (userId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'userId' was not present! Struct: " + toString());
+      }
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getAllMemberGroupsForUser_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getAllMemberGroupsForUser_argsStandardScheme getScheme() {
+        return new getAllMemberGroupsForUser_argsStandardScheme();
+      }
+    }
+
+    private static class getAllMemberGroupsForUser_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getAllMemberGroupsForUser_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // USER_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.userId = iprot.readString();
+                struct.setUserIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.userId != null) {
+          oprot.writeFieldBegin(USER_ID_FIELD_DESC);
+          oprot.writeString(struct.userId);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getAllMemberGroupsForUser_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getAllMemberGroupsForUser_argsTupleScheme getScheme() {
+        return new getAllMemberGroupsForUser_argsTupleScheme();
+      }
+    }
+
+    private static class getAllMemberGroupsForUser_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getAllMemberGroupsForUser_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
+        oprot.writeString(struct.userId);
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsForUser_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+        struct.userId = iprot.readString();
+        struct.setUserIdIsSet(true);
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getAllMemberGroupsForUser_result implements org.apache.thrift.TBase<getAllMemberGroupsForUser_result, getAllMemberGroupsForUser_result._Fields>, java.io.Serializable, Cloneable, Comparable<getAllMemberGroupsForUser_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getAllMemberGroupsForUser_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField SRE_FIELD_DESC = new org.apache.thrift.protocol.TField("sre", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getAllMemberGroupsForUser_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getAllMemberGroupsForUser_resultTupleSchemeFactory();
+
+    public java.util.List<org.apache.airavata.sharing.registry.models.UserGroup> success; // required
     public org.apache.airavata.sharing.registry.models.SharingRegistryException sre; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
@@ -31987,14 +38040,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getAllMemberGroupsF
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list64 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list64.size);
-                  org.apache.airavata.sharing.registry.models.UserGroup _elem65;
-                  for (int _i66 = 0; _i66 < _list64.size; ++_i66)
+                  org.apache.thrift.protocol.TList _list80 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list80.size);
+                  org.apache.airavata.sharing.registry.models.UserGroup _elem81;
+                  for (int _i82 = 0; _i82 < _list80.size; ++_i82)
                   {
-                    _elem65 = new org.apache.airavata.sharing.registry.models.UserGroup();
-                    _elem65.read(iprot);
-                    struct.success.add(_elem65);
+                    _elem81 = new org.apache.airavata.sharing.registry.models.UserGroup();
+                    _elem81.read(iprot);
+                    struct.success.add(_elem81);
                   }
                   iprot.readListEnd();
                 }
@@ -32031,9 +38084,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getAllMemberGroups
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.UserGroup _iter67 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.UserGroup _iter83 : struct.success)
             {
-              _iter67.write(oprot);
+              _iter83.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -32072,9 +38125,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsF
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.UserGroup _iter68 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.UserGroup _iter84 : struct.success)
             {
-              _iter68.write(oprot);
+              _iter84.write(oprot);
             }
           }
         }
@@ -32089,14 +38142,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getAllMemberGroupsFo
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list69 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list69.size);
-            org.apache.airavata.sharing.registry.models.UserGroup _elem70;
-            for (int _i71 = 0; _i71 < _list69.size; ++_i71)
+            org.apache.thrift.protocol.TList _list85 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list85.size);
+            org.apache.airavata.sharing.registry.models.UserGroup _elem86;
+            for (int _i87 = 0; _i87 < _list85.size; ++_i87)
             {
-              _elem70 = new org.apache.airavata.sharing.registry.models.UserGroup();
-              _elem70.read(iprot);
-              struct.success.add(_elem70);
+              _elem86 = new org.apache.airavata.sharing.registry.models.UserGroup();
+              _elem86.read(iprot);
+              struct.success.add(_elem86);
             }
           }
           struct.setSuccessIsSet(true);
@@ -37584,14 +43637,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getEntityTypes_resu
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list72 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.EntityType>(_list72.size);
-                  org.apache.airavata.sharing.registry.models.EntityType _elem73;
-                  for (int _i74 = 0; _i74 < _list72.size; ++_i74)
+                  org.apache.thrift.protocol.TList _list88 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.EntityType>(_list88.size);
+                  org.apache.airavata.sharing.registry.models.EntityType _elem89;
+                  for (int _i90 = 0; _i90 < _list88.size; ++_i90)
                   {
-                    _elem73 = new org.apache.airavata.sharing.registry.models.EntityType();
-                    _elem73.read(iprot);
-                    struct.success.add(_elem73);
+                    _elem89 = new org.apache.airavata.sharing.registry.models.EntityType();
+                    _elem89.read(iprot);
+                    struct.success.add(_elem89);
                   }
                   iprot.readListEnd();
                 }
@@ -37628,9 +43681,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getEntityTypes_res
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.EntityType _iter75 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.EntityType _iter91 : struct.success)
             {
-              _iter75.write(oprot);
+              _iter91.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -37669,9 +43722,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getEntityTypes_resu
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.EntityType _iter76 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.EntityType _iter92 : struct.success)
             {
-              _iter76.write(oprot);
+              _iter92.write(oprot);
             }
           }
         }
@@ -37686,14 +43739,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getEntityTypes_resul
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list77 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.EntityType>(_list77.size);
-            org.apache.airavata.sharing.registry.models.EntityType _elem78;
-            for (int _i79 = 0; _i79 < _list77.size; ++_i79)
+            org.apache.thrift.protocol.TList _list93 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.EntityType>(_list93.size);
+            org.apache.airavata.sharing.registry.models.EntityType _elem94;
+            for (int _i95 = 0; _i95 < _list93.size; ++_i95)
             {
-              _elem78 = new org.apache.airavata.sharing.registry.models.EntityType();
-              _elem78.read(iprot);
-              struct.success.add(_elem78);
+              _elem94 = new org.apache.airavata.sharing.registry.models.EntityType();
+              _elem94.read(iprot);
+              struct.success.add(_elem94);
             }
           }
           struct.setSuccessIsSet(true);
@@ -42792,14 +48845,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, searchEntities_args
             case 3: // FILTERS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list80 = iprot.readListBegin();
-                  struct.filters = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.SearchCriteria>(_list80.size);
-                  org.apache.airavata.sharing.registry.models.SearchCriteria _elem81;
-                  for (int _i82 = 0; _i82 < _list80.size; ++_i82)
+                  org.apache.thrift.protocol.TList _list96 = iprot.readListBegin();
+                  struct.filters = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.SearchCriteria>(_list96.size);
+                  org.apache.airavata.sharing.registry.models.SearchCriteria _elem97;
+                  for (int _i98 = 0; _i98 < _list96.size; ++_i98)
                   {
-                    _elem81 = new org.apache.airavata.sharing.registry.models.SearchCriteria();
-                    _elem81.read(iprot);
-                    struct.filters.add(_elem81);
+                    _elem97 = new org.apache.airavata.sharing.registry.models.SearchCriteria();
+                    _elem97.read(iprot);
+                    struct.filters.add(_elem97);
                   }
                   iprot.readListEnd();
                 }
@@ -42859,9 +48912,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, searchEntities_arg
           oprot.writeFieldBegin(FILTERS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.filters.size()));
-            for (org.apache.airavata.sharing.registry.models.SearchCriteria _iter83 : struct.filters)
+            for (org.apache.airavata.sharing.registry.models.SearchCriteria _iter99 : struct.filters)
             {
-              _iter83.write(oprot);
+              _iter99.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -42894,9 +48947,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, searchEntities_args
         oprot.writeString(struct.userId);
         {
           oprot.writeI32(struct.filters.size());
-          for (org.apache.airavata.sharing.registry.models.SearchCriteria _iter84 : struct.filters)
+          for (org.apache.airavata.sharing.registry.models.SearchCriteria _iter100 : struct.filters)
           {
-            _iter84.write(oprot);
+            _iter100.write(oprot);
           }
         }
         oprot.writeI32(struct.offset);
@@ -42911,14 +48964,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, searchEntities_args
         struct.userId = iprot.readString();
         struct.setUserIdIsSet(true);
         {
-          org.apache.thrift.protocol.TList _list85 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.filters = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.SearchCriteria>(_list85.size);
-          org.apache.airavata.sharing.registry.models.SearchCriteria _elem86;
-          for (int _i87 = 0; _i87 < _list85.size; ++_i87)
+          org.apache.thrift.protocol.TList _list101 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.filters = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.SearchCriteria>(_list101.size);
+          org.apache.airavata.sharing.registry.models.SearchCriteria _elem102;
+          for (int _i103 = 0; _i103 < _list101.size; ++_i103)
           {
-            _elem86 = new org.apache.airavata.sharing.registry.models.SearchCriteria();
-            _elem86.read(iprot);
-            struct.filters.add(_elem86);
+            _elem102 = new org.apache.airavata.sharing.registry.models.SearchCriteria();
+            _elem102.read(iprot);
+            struct.filters.add(_elem102);
           }
         }
         struct.setFiltersIsSet(true);
@@ -43329,14 +49382,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, searchEntities_resu
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list88 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.Entity>(_list88.size);
-                  org.apache.airavata.sharing.registry.models.Entity _elem89;
-                  for (int _i90 = 0; _i90 < _list88.size; ++_i90)
+                  org.apache.thrift.protocol.TList _list104 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.Entity>(_list104.size);
+                  org.apache.airavata.sharing.registry.models.Entity _elem105;
+                  for (int _i106 = 0; _i106 < _list104.size; ++_i106)
                   {
-                    _elem89 = new org.apache.airavata.sharing.registry.models.Entity();
-                    _elem89.read(iprot);
-                    struct.success.add(_elem89);
+                    _elem105 = new org.apache.airavata.sharing.registry.models.Entity();
+                    _elem105.read(iprot);
+                    struct.success.add(_elem105);
                   }
                   iprot.readListEnd();
                 }
@@ -43373,9 +49426,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, searchEntities_res
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.Entity _iter91 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.Entity _iter107 : struct.success)
             {
-              _iter91.write(oprot);
+              _iter107.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -43414,9 +49467,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, searchEntities_resu
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.Entity _iter92 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.Entity _iter108 : struct.success)
             {
-              _iter92.write(oprot);
+              _iter108.write(oprot);
             }
           }
         }
@@ -43431,14 +49484,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, searchEntities_resul
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list93 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.Entity>(_list93.size);
-            org.apache.airavata.sharing.registry.models.Entity _elem94;
-            for (int _i95 = 0; _i95 < _list93.size; ++_i95)
+            org.apache.thrift.protocol.TList _list109 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.Entity>(_list109.size);
+            org.apache.airavata.sharing.registry.models.Entity _elem110;
+            for (int _i111 = 0; _i111 < _list109.size; ++_i111)
             {
-              _elem94 = new org.apache.airavata.sharing.registry.models.Entity();
-              _elem94.read(iprot);
-              struct.success.add(_elem94);
+              _elem110 = new org.apache.airavata.sharing.registry.models.Entity();
+              _elem110.read(iprot);
+              struct.success.add(_elem110);
             }
           }
           struct.setSuccessIsSet(true);
@@ -44406,14 +50459,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getListOfSharedUser
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list96 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list96.size);
-                  org.apache.airavata.sharing.registry.models.User _elem97;
-                  for (int _i98 = 0; _i98 < _list96.size; ++_i98)
+                  org.apache.thrift.protocol.TList _list112 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list112.size);
+                  org.apache.airavata.sharing.registry.models.User _elem113;
+                  for (int _i114 = 0; _i114 < _list112.size; ++_i114)
                   {
-                    _elem97 = new org.apache.airavata.sharing.registry.models.User();
-                    _elem97.read(iprot);
-                    struct.success.add(_elem97);
+                    _elem113 = new org.apache.airavata.sharing.registry.models.User();
+                    _elem113.read(iprot);
+                    struct.success.add(_elem113);
                   }
                   iprot.readListEnd();
                 }
@@ -44450,9 +50503,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getListOfSharedUse
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.User _iter99 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.User _iter115 : struct.success)
             {
-              _iter99.write(oprot);
+              _iter115.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -44491,9 +50544,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getListOfSharedUser
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.User _iter100 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.User _iter116 : struct.success)
             {
-              _iter100.write(oprot);
+              _iter116.write(oprot);
             }
           }
         }
@@ -44508,14 +50561,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getListOfSharedUsers
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list101 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list101.size);
-            org.apache.airavata.sharing.registry.models.User _elem102;
-            for (int _i103 = 0; _i103 < _list101.size; ++_i103)
+            org.apache.thrift.protocol.TList _list117 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.User>(_list117.size);
+            org.apache.airavata.sharing.registry.models.User _elem118;
+            for (int _i119 = 0; _i119 < _list117.size; ++_i119)
             {
-              _elem102 = new org.apache.airavata.sharing.registry.models.User();
-              _elem102.read(iprot);
-              struct.success.add(_elem102);
+              _elem118 = new org.apache.airavata.sharing.registry.models.User();
+              _elem118.read(iprot);
+              struct.success.add(_elem118);
             }
           }
           struct.setSuccessIsSet(true);
@@ -45483,14 +51536,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getListOfSharedGrou
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list104 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list104.size);
-                  org.apache.airavata.sharing.registry.models.UserGroup _elem105;
-                  for (int _i106 = 0; _i106 < _list104.size; ++_i106)
+                  org.apache.thrift.protocol.TList _list120 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list120.size);
+                  org.apache.airavata.sharing.registry.models.UserGroup _elem121;
+                  for (int _i122 = 0; _i122 < _list120.size; ++_i122)
                   {
-                    _elem105 = new org.apache.airavata.sharing.registry.models.UserGroup();
-                    _elem105.read(iprot);
-                    struct.success.add(_elem105);
+                    _elem121 = new org.apache.airavata.sharing.registry.models.UserGroup();
+                    _elem121.read(iprot);
+                    struct.success.add(_elem121);
                   }
                   iprot.readListEnd();
                 }
@@ -45527,9 +51580,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getListOfSharedGro
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.UserGroup _iter107 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.UserGroup _iter123 : struct.success)
             {
-              _iter107.write(oprot);
+              _iter123.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -45568,9 +51621,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getListOfSharedGrou
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.UserGroup _iter108 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.UserGroup _iter124 : struct.success)
             {
-              _iter108.write(oprot);
+              _iter124.write(oprot);
             }
           }
         }
@@ -45585,14 +51638,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getListOfSharedGroup
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list109 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list109.size);
-            org.apache.airavata.sharing.registry.models.UserGroup _elem110;
-            for (int _i111 = 0; _i111 < _list109.size; ++_i111)
+            org.apache.thrift.protocol.TList _list125 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.UserGroup>(_list125.size);
+            org.apache.airavata.sharing.registry.models.UserGroup _elem126;
+            for (int _i127 = 0; _i127 < _list125.size; ++_i127)
             {
-              _elem110 = new org.apache.airavata.sharing.registry.models.UserGroup();
-              _elem110.read(iprot);
-              struct.success.add(_elem110);
+              _elem126 = new org.apache.airavata.sharing.registry.models.UserGroup();
+              _elem126.read(iprot);
+              struct.success.add(_elem126);
             }
           }
           struct.setSuccessIsSet(true);
@@ -51080,14 +57133,14 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, getPermissionTypes_
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list112 = iprot.readListBegin();
-                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.PermissionType>(_list112.size);
-                  org.apache.airavata.sharing.registry.models.PermissionType _elem113;
-                  for (int _i114 = 0; _i114 < _list112.size; ++_i114)
+                  org.apache.thrift.protocol.TList _list128 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.PermissionType>(_list128.size);
+                  org.apache.airavata.sharing.registry.models.PermissionType _elem129;
+                  for (int _i130 = 0; _i130 < _list128.size; ++_i130)
                   {
-                    _elem113 = new org.apache.airavata.sharing.registry.models.PermissionType();
-                    _elem113.read(iprot);
-                    struct.success.add(_elem113);
+                    _elem129 = new org.apache.airavata.sharing.registry.models.PermissionType();
+                    _elem129.read(iprot);
+                    struct.success.add(_elem129);
                   }
                   iprot.readListEnd();
                 }
@@ -51124,9 +57177,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, getPermissionTypes
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.airavata.sharing.registry.models.PermissionType _iter115 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.PermissionType _iter131 : struct.success)
             {
-              _iter115.write(oprot);
+              _iter131.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -51165,9 +57218,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, getPermissionTypes_
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.airavata.sharing.registry.models.PermissionType _iter116 : struct.success)
+            for (org.apache.airavata.sharing.registry.models.PermissionType _iter132 : struct.success)
             {
-              _iter116.write(oprot);
+              _iter132.write(oprot);
             }
           }
         }
@@ -51182,14 +57235,14 @@ public void read(org.apache.thrift.protocol.TProtocol prot, getPermissionTypes_r
         java.util.BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list117 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.PermissionType>(_list117.size);
-            org.apache.airavata.sharing.registry.models.PermissionType _elem118;
-            for (int _i119 = 0; _i119 < _list117.size; ++_i119)
+            org.apache.thrift.protocol.TList _list133 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<org.apache.airavata.sharing.registry.models.PermissionType>(_list133.size);
+            org.apache.airavata.sharing.registry.models.PermissionType _elem134;
+            for (int _i135 = 0; _i135 < _list133.size; ++_i135)
             {
-              _elem118 = new org.apache.airavata.sharing.registry.models.PermissionType();
-              _elem118.read(iprot);
-              struct.success.add(_elem118);
+              _elem134 = new org.apache.airavata.sharing.registry.models.PermissionType();
+              _elem134.read(iprot);
+              struct.success.add(_elem134);
             }
           }
           struct.setSuccessIsSet(true);
@@ -51869,13 +57922,13 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, shareEntityWithUser
             case 3: // USER_LIST
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list120 = iprot.readListBegin();
-                  struct.userList = new java.util.ArrayList<java.lang.String>(_list120.size);
-                  java.lang.String _elem121;
-                  for (int _i122 = 0; _i122 < _list120.size; ++_i122)
+                  org.apache.thrift.protocol.TList _list136 = iprot.readListBegin();
+                  struct.userList = new java.util.ArrayList<java.lang.String>(_list136.size);
+                  java.lang.String _elem137;
+                  for (int _i138 = 0; _i138 < _list136.size; ++_i138)
                   {
-                    _elem121 = iprot.readString();
-                    struct.userList.add(_elem121);
+                    _elem137 = iprot.readString();
+                    struct.userList.add(_elem137);
                   }
                   iprot.readListEnd();
                 }
@@ -51932,9 +57985,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, shareEntityWithUse
           oprot.writeFieldBegin(USER_LIST_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.userList.size()));
-            for (java.lang.String _iter123 : struct.userList)
+            for (java.lang.String _iter139 : struct.userList)
             {
-              oprot.writeString(_iter123);
+              oprot.writeString(_iter139);
             }
             oprot.writeListEnd();
           }
@@ -51969,9 +58022,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, shareEntityWithUser
         oprot.writeString(struct.entityId);
         {
           oprot.writeI32(struct.userList.size());
-          for (java.lang.String _iter124 : struct.userList)
+          for (java.lang.String _iter140 : struct.userList)
           {
-            oprot.writeString(_iter124);
+            oprot.writeString(_iter140);
           }
         }
         oprot.writeString(struct.perssionTypeId);
@@ -51986,13 +58039,13 @@ public void read(org.apache.thrift.protocol.TProtocol prot, shareEntityWithUsers
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
         {
-          org.apache.thrift.protocol.TList _list125 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.userList = new java.util.ArrayList<java.lang.String>(_list125.size);
-          java.lang.String _elem126;
-          for (int _i127 = 0; _i127 < _list125.size; ++_i127)
+          org.apache.thrift.protocol.TList _list141 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.userList = new java.util.ArrayList<java.lang.String>(_list141.size);
+          java.lang.String _elem142;
+          for (int _i143 = 0; _i143 < _list141.size; ++_i143)
           {
-            _elem126 = iprot.readString();
-            struct.userList.add(_elem126);
+            _elem142 = iprot.readString();
+            struct.userList.add(_elem142);
           }
         }
         struct.setUserListIsSet(true);
@@ -53056,13 +59109,13 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, revokeEntitySharing
             case 3: // USER_LIST
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list128 = iprot.readListBegin();
-                  struct.userList = new java.util.ArrayList<java.lang.String>(_list128.size);
-                  java.lang.String _elem129;
-                  for (int _i130 = 0; _i130 < _list128.size; ++_i130)
+                  org.apache.thrift.protocol.TList _list144 = iprot.readListBegin();
+                  struct.userList = new java.util.ArrayList<java.lang.String>(_list144.size);
+                  java.lang.String _elem145;
+                  for (int _i146 = 0; _i146 < _list144.size; ++_i146)
                   {
-                    _elem129 = iprot.readString();
-                    struct.userList.add(_elem129);
+                    _elem145 = iprot.readString();
+                    struct.userList.add(_elem145);
                   }
                   iprot.readListEnd();
                 }
@@ -53108,9 +59161,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, revokeEntitySharin
           oprot.writeFieldBegin(USER_LIST_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.userList.size()));
-            for (java.lang.String _iter131 : struct.userList)
+            for (java.lang.String _iter147 : struct.userList)
             {
-              oprot.writeString(_iter131);
+              oprot.writeString(_iter147);
             }
             oprot.writeListEnd();
           }
@@ -53142,9 +59195,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, revokeEntitySharing
         oprot.writeString(struct.entityId);
         {
           oprot.writeI32(struct.userList.size());
-          for (java.lang.String _iter132 : struct.userList)
+          for (java.lang.String _iter148 : struct.userList)
           {
-            oprot.writeString(_iter132);
+            oprot.writeString(_iter148);
           }
         }
         oprot.writeString(struct.perssionTypeId);
@@ -53158,13 +59211,13 @@ public void read(org.apache.thrift.protocol.TProtocol prot, revokeEntitySharingF
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
         {
-          org.apache.thrift.protocol.TList _list133 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.userList = new java.util.ArrayList<java.lang.String>(_list133.size);
-          java.lang.String _elem134;
-          for (int _i135 = 0; _i135 < _list133.size; ++_i135)
+          org.apache.thrift.protocol.TList _list149 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.userList = new java.util.ArrayList<java.lang.String>(_list149.size);
+          java.lang.String _elem150;
+          for (int _i151 = 0; _i151 < _list149.size; ++_i151)
           {
-            _elem134 = iprot.readString();
-            struct.userList.add(_elem134);
+            _elem150 = iprot.readString();
+            struct.userList.add(_elem150);
           }
         }
         struct.setUserListIsSet(true);
@@ -54306,13 +60359,13 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, shareEntityWithGrou
             case 3: // GROUP_LIST
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list136 = iprot.readListBegin();
-                  struct.groupList = new java.util.ArrayList<java.lang.String>(_list136.size);
-                  java.lang.String _elem137;
-                  for (int _i138 = 0; _i138 < _list136.size; ++_i138)
+                  org.apache.thrift.protocol.TList _list152 = iprot.readListBegin();
+                  struct.groupList = new java.util.ArrayList<java.lang.String>(_list152.size);
+                  java.lang.String _elem153;
+                  for (int _i154 = 0; _i154 < _list152.size; ++_i154)
                   {
-                    _elem137 = iprot.readString();
-                    struct.groupList.add(_elem137);
+                    _elem153 = iprot.readString();
+                    struct.groupList.add(_elem153);
                   }
                   iprot.readListEnd();
                 }
@@ -54369,9 +60422,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, shareEntityWithGro
           oprot.writeFieldBegin(GROUP_LIST_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.groupList.size()));
-            for (java.lang.String _iter139 : struct.groupList)
+            for (java.lang.String _iter155 : struct.groupList)
             {
-              oprot.writeString(_iter139);
+              oprot.writeString(_iter155);
             }
             oprot.writeListEnd();
           }
@@ -54406,9 +60459,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, shareEntityWithGrou
         oprot.writeString(struct.entityId);
         {
           oprot.writeI32(struct.groupList.size());
-          for (java.lang.String _iter140 : struct.groupList)
+          for (java.lang.String _iter156 : struct.groupList)
           {
-            oprot.writeString(_iter140);
+            oprot.writeString(_iter156);
           }
         }
         oprot.writeString(struct.perssionTypeId);
@@ -54423,13 +60476,13 @@ public void read(org.apache.thrift.protocol.TProtocol prot, shareEntityWithGroup
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
         {
-          org.apache.thrift.protocol.TList _list141 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.groupList = new java.util.ArrayList<java.lang.String>(_list141.size);
-          java.lang.String _elem142;
-          for (int _i143 = 0; _i143 < _list141.size; ++_i143)
+          org.apache.thrift.protocol.TList _list157 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.groupList = new java.util.ArrayList<java.lang.String>(_list157.size);
+          java.lang.String _elem158;
+          for (int _i159 = 0; _i159 < _list157.size; ++_i159)
           {
-            _elem142 = iprot.readString();
-            struct.groupList.add(_elem142);
+            _elem158 = iprot.readString();
+            struct.groupList.add(_elem158);
           }
         }
         struct.setGroupListIsSet(true);
@@ -55493,13 +61546,13 @@ public void read(org.apache.thrift.protocol.TProtocol iprot, revokeEntitySharing
             case 3: // GROUP_LIST
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list144 = iprot.readListBegin();
-                  struct.groupList = new java.util.ArrayList<java.lang.String>(_list144.size);
-                  java.lang.String _elem145;
-                  for (int _i146 = 0; _i146 < _list144.size; ++_i146)
+                  org.apache.thrift.protocol.TList _list160 = iprot.readListBegin();
+                  struct.groupList = new java.util.ArrayList<java.lang.String>(_list160.size);
+                  java.lang.String _elem161;
+                  for (int _i162 = 0; _i162 < _list160.size; ++_i162)
                   {
-                    _elem145 = iprot.readString();
-                    struct.groupList.add(_elem145);
+                    _elem161 = iprot.readString();
+                    struct.groupList.add(_elem161);
                   }
                   iprot.readListEnd();
                 }
@@ -55545,9 +61598,9 @@ public void write(org.apache.thrift.protocol.TProtocol oprot, revokeEntitySharin
           oprot.writeFieldBegin(GROUP_LIST_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.groupList.size()));
-            for (java.lang.String _iter147 : struct.groupList)
+            for (java.lang.String _iter163 : struct.groupList)
             {
-              oprot.writeString(_iter147);
+              oprot.writeString(_iter163);
             }
             oprot.writeListEnd();
           }
@@ -55579,9 +61632,9 @@ public void write(org.apache.thrift.protocol.TProtocol prot, revokeEntitySharing
         oprot.writeString(struct.entityId);
         {
           oprot.writeI32(struct.groupList.size());
-          for (java.lang.String _iter148 : struct.groupList)
+          for (java.lang.String _iter164 : struct.groupList)
           {
-            oprot.writeString(_iter148);
+            oprot.writeString(_iter164);
           }
         }
         oprot.writeString(struct.perssionTypeId);
@@ -55595,13 +61648,13 @@ public void read(org.apache.thrift.protocol.TProtocol prot, revokeEntitySharingF
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
         {
-          org.apache.thrift.protocol.TList _list149 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.groupList = new java.util.ArrayList<java.lang.String>(_list149.size);
-          java.lang.String _elem150;
-          for (int _i151 = 0; _i151 < _list149.size; ++_i151)
+          org.apache.thrift.protocol.TList _list165 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.groupList = new java.util.ArrayList<java.lang.String>(_list165.size);
+          java.lang.String _elem166;
+          for (int _i167 = 0; _i167 < _list165.size; ++_i167)
           {
-            _elem150 = iprot.readString();
-            struct.groupList.add(_elem150);
+            _elem166 = iprot.readString();
+            struct.groupList.add(_elem166);
           }
         }
         struct.setGroupListIsSet(true);
diff --git a/modules/sharing-registry/sharing-service-docs/api-docs/index.html b/modules/sharing-registry/sharing-service-docs/api-docs/index.html
index 740be59804..97b8af4b69 100644
--- a/modules/sharing-registry/sharing-service-docs/api-docs/index.html
+++ b/modules/sharing-registry/sharing-service-docs/api-docs/index.html
@@ -8,6 +8,7 @@ <h1>All Thrift declarations</h1>
 <td>sharing_cpi</td><td><a href="sharing_cpi.html#Svc_SharingRegistryService">SharingRegistryService</a><br/>
 <ul>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_addChildGroupsToParentGroup">addChildGroupsToParentGroup</a></li>
+<li><a href="sharing_cpi.html#Fn_SharingRegistryService_addGroupAdmins">addGroupAdmins</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_addUsersToGroup">addUsersToGroup</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_createDomain">createDomain</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_createEntity">createEntity</a></li>
@@ -37,6 +38,8 @@ <h1>All Thrift declarations</h1>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_getPermissionTypes">getPermissionTypes</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_getUser">getUser</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_getUsers">getUsers</a></li>
+<li><a href="sharing_cpi.html#Fn_SharingRegistryService_hasAdminAccess">hasAdminAccess</a></li>
+<li><a href="sharing_cpi.html#Fn_SharingRegistryService_hasOwnerAccess">hasOwnerAccess</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_isDomainExists">isDomainExists</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_isEntityExists">isEntityExists</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_isEntityTypeExists">isEntityTypeExists</a></li>
@@ -44,12 +47,14 @@ <h1>All Thrift declarations</h1>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_isPermissionExists">isPermissionExists</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_isUserExists">isUserExists</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_removeChildGroupFromParentGroup">removeChildGroupFromParentGroup</a></li>
+<li><a href="sharing_cpi.html#Fn_SharingRegistryService_removeGroupAdmins">removeGroupAdmins</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_removeUsersFromGroup">removeUsersFromGroup</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_revokeEntitySharingFromGroups">revokeEntitySharingFromGroups</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_revokeEntitySharingFromUsers">revokeEntitySharingFromUsers</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_searchEntities">searchEntities</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_shareEntityWithGroups">shareEntityWithGroups</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_shareEntityWithUsers">shareEntityWithUsers</a></li>
+<li><a href="sharing_cpi.html#Fn_SharingRegistryService_transferGroupOwnership">transferGroupOwnership</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_updateDomain">updateDomain</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_updateEntity">updateEntity</a></li>
 <li><a href="sharing_cpi.html#Fn_SharingRegistryService_updateEntityType">updateEntityType</a></li>
@@ -68,9 +73,11 @@ <h1>All Thrift declarations</h1>
 <a href="sharing_models.html#Struct_Entity">Entity</a><br/>
 <a href="sharing_models.html#Enum_EntitySearchField">EntitySearchField</a><br/>
 <a href="sharing_models.html#Struct_EntityType">EntityType</a><br/>
+<a href="sharing_models.html#Struct_GroupAdmin">GroupAdmin</a><br/>
 <a href="sharing_models.html#Enum_GroupCardinality">GroupCardinality</a><br/>
 <a href="sharing_models.html#Enum_GroupChildType">GroupChildType</a><br/>
 <a href="sharing_models.html#Struct_GroupMembership">GroupMembership</a><br/>
+<a href="sharing_models.html#Struct_GroupOwner">GroupOwner</a><br/>
 <a href="sharing_models.html#Enum_GroupType">GroupType</a><br/>
 <a href="sharing_models.html#Struct_PermissionType">PermissionType</a><br/>
 <a href="sharing_models.html#Enum_SearchCondition">SearchCondition</a><br/>
diff --git a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html
index 4be429ada4..deade65680 100644
--- a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html
+++ b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html
@@ -12,6 +12,7 @@ <h1>Thrift module: sharing_cpi</h1>
 <td>sharing_cpi</td><td><a href="#Svc_SharingRegistryService">SharingRegistryService</a><br/>
 <ul>
 <li><a href="#Fn_SharingRegistryService_addChildGroupsToParentGroup">addChildGroupsToParentGroup</a></li>
+<li><a href="#Fn_SharingRegistryService_addGroupAdmins">addGroupAdmins</a></li>
 <li><a href="#Fn_SharingRegistryService_addUsersToGroup">addUsersToGroup</a></li>
 <li><a href="#Fn_SharingRegistryService_createDomain">createDomain</a></li>
 <li><a href="#Fn_SharingRegistryService_createEntity">createEntity</a></li>
@@ -41,6 +42,8 @@ <h1>Thrift module: sharing_cpi</h1>
 <li><a href="#Fn_SharingRegistryService_getPermissionTypes">getPermissionTypes</a></li>
 <li><a href="#Fn_SharingRegistryService_getUser">getUser</a></li>
 <li><a href="#Fn_SharingRegistryService_getUsers">getUsers</a></li>
+<li><a href="#Fn_SharingRegistryService_hasAdminAccess">hasAdminAccess</a></li>
+<li><a href="#Fn_SharingRegistryService_hasOwnerAccess">hasOwnerAccess</a></li>
 <li><a href="#Fn_SharingRegistryService_isDomainExists">isDomainExists</a></li>
 <li><a href="#Fn_SharingRegistryService_isEntityExists">isEntityExists</a></li>
 <li><a href="#Fn_SharingRegistryService_isEntityTypeExists">isEntityTypeExists</a></li>
@@ -48,12 +51,14 @@ <h1>Thrift module: sharing_cpi</h1>
 <li><a href="#Fn_SharingRegistryService_isPermissionExists">isPermissionExists</a></li>
 <li><a href="#Fn_SharingRegistryService_isUserExists">isUserExists</a></li>
 <li><a href="#Fn_SharingRegistryService_removeChildGroupFromParentGroup">removeChildGroupFromParentGroup</a></li>
+<li><a href="#Fn_SharingRegistryService_removeGroupAdmins">removeGroupAdmins</a></li>
 <li><a href="#Fn_SharingRegistryService_removeUsersFromGroup">removeUsersFromGroup</a></li>
 <li><a href="#Fn_SharingRegistryService_revokeEntitySharingFromGroups">revokeEntitySharingFromGroups</a></li>
 <li><a href="#Fn_SharingRegistryService_revokeEntitySharingFromUsers">revokeEntitySharingFromUsers</a></li>
 <li><a href="#Fn_SharingRegistryService_searchEntities">searchEntities</a></li>
 <li><a href="#Fn_SharingRegistryService_shareEntityWithGroups">shareEntityWithGroups</a></li>
 <li><a href="#Fn_SharingRegistryService_shareEntityWithUsers">shareEntityWithUsers</a></li>
+<li><a href="#Fn_SharingRegistryService_transferGroupOwnership">transferGroupOwnership</a></li>
 <li><a href="#Fn_SharingRegistryService_updateDomain">updateDomain</a></li>
 <li><a href="#Fn_SharingRegistryService_updateEntity">updateEntity</a></li>
 <li><a href="#Fn_SharingRegistryService_updateEntityType">updateEntityType</a></li>
@@ -71,266 +76,296 @@ <h3 id="Svc_SharingRegistryService">Service: SharingRegistryService</h3>
 <div class="definition"><h4 id="Fn_SharingRegistryService_createDomain">Function: SharingRegistryService.createDomain</h4>
 <pre><code>string</code> createDomain(<code><a href="sharing_models.html#Struct_Domain">sharing_models.Domain</a></code> domain)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>, <code><a href="sharing_models.html#Struct_DuplicateEntryException">sharing_models.DuplicateEntryException</a></code>
-</pre><p>API method to create a new domain</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateDomain">Function: SharingRegistryService.updateDomain</h4>
+</pre><pre><p>API method to create a new domain</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateDomain">Function: SharingRegistryService.updateDomain</h4>
 <pre><code>bool</code> updateDomain(<code><a href="sharing_models.html#Struct_Domain">sharing_models.Domain</a></code> domain)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to update a domain</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isDomainExists">Function: SharingRegistryService.isDomainExists</h4>
+</pre><pre><p>API method to update a domain</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isDomainExists">Function: SharingRegistryService.isDomainExists</h4>
 <pre><code>bool</code> isDomainExists(<code>string</code> domainId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check Domain Exists</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteDomain">Function: SharingRegistryService.deleteDomain</h4>
+</pre><pre><p>API method to check Domain Exists</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteDomain">Function: SharingRegistryService.deleteDomain</h4>
 <pre><code>bool</code> deleteDomain(<code>string</code> domainId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to delete domain</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getDomain">Function: SharingRegistryService.getDomain</h4>
+</pre><pre><p>API method to delete domain</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getDomain">Function: SharingRegistryService.getDomain</h4>
 <pre><code><a href="sharing_models.html#Struct_Domain">sharing_models.Domain</a></code> getDomain(<code>string</code> domainId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to retrieve a domain</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getDomains">Function: SharingRegistryService.getDomains</h4>
+</pre><pre><p>API method to retrieve a domain</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getDomains">Function: SharingRegistryService.getDomains</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_Domain">sharing_models.Domain</a></code>&gt;</code> getDomains(<code>i32</code> offset,
                                        <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get all domain.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createUser">Function: SharingRegistryService.createUser</h4>
+</pre><pre><p>API method to get all domain.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createUser">Function: SharingRegistryService.createUser</h4>
 <pre><code>string</code> createUser(<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code> user)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>, <code><a href="sharing_models.html#Struct_DuplicateEntryException">sharing_models.DuplicateEntryException</a></code>
-</pre><p>API method to register a user in the system</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updatedUser">Function: SharingRegistryService.updatedUser</h4>
+</pre><pre><p>API method to register a user in the system</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updatedUser">Function: SharingRegistryService.updatedUser</h4>
 <pre><code>bool</code> updatedUser(<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code> user)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to update existing user</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isUserExists">Function: SharingRegistryService.isUserExists</h4>
+</pre><pre><p>API method to update existing user</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isUserExists">Function: SharingRegistryService.isUserExists</h4>
 <pre><code>bool</code> isUserExists(<code>string</code> domainId,
                   <code>string</code> userId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check User Exists</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteUser">Function: SharingRegistryService.deleteUser</h4>
+</pre><pre><p>API method to check User Exists</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteUser">Function: SharingRegistryService.deleteUser</h4>
 <pre><code>bool</code> deleteUser(<code>string</code> domainId,
                 <code>string</code> userId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to delete user</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getUser">Function: SharingRegistryService.getUser</h4>
+</pre><pre><p>API method to delete user</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getUser">Function: SharingRegistryService.getUser</h4>
 <pre><code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code> getUser(<code>string</code> domainId,
                             <code>string</code> userId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get a user</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getUsers">Function: SharingRegistryService.getUsers</h4>
+</pre><pre><p>API method to get a user</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getUsers">Function: SharingRegistryService.getUsers</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getUsers(<code>string</code> domainId,
                                    <code>i32</code> offset,
                                    <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get a list of users in a specific domain.</p>
+</pre><pre><p>API method to get a list of users in a specific domain.</p>
 <li>domainId : Domain id</li>
 <li>offset : Starting result number</li>
 <li>limit : Number of max results to be sent</li>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createGroup">Function: SharingRegistryService.createGroup</h4>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createGroup">Function: SharingRegistryService.createGroup</h4>
 <pre><code>string</code> createGroup(<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code> group)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to create a new group</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateGroup">Function: SharingRegistryService.updateGroup</h4>
+</pre><pre><p>API method to create a new group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateGroup">Function: SharingRegistryService.updateGroup</h4>
 <pre><code>bool</code> updateGroup(<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code> group)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to update a group</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isGroupExists">Function: SharingRegistryService.isGroupExists</h4>
+</pre><pre><p>API method to update a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isGroupExists">Function: SharingRegistryService.isGroupExists</h4>
 <pre><code>bool</code> isGroupExists(<code>string</code> domainId,
                    <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check Group Exists</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteGroup">Function: SharingRegistryService.deleteGroup</h4>
+</pre><pre><p>API method to check Group Exists</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteGroup">Function: SharingRegistryService.deleteGroup</h4>
 <pre><code>bool</code> deleteGroup(<code>string</code> domainId,
                  <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to delete a group</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroup">Function: SharingRegistryService.getGroup</h4>
+</pre><pre><p>API method to delete a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroup">Function: SharingRegistryService.getGroup</h4>
 <pre><code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code> getGroup(<code>string</code> domainId,
                                   <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get a group</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroups">Function: SharingRegistryService.getGroups</h4>
+</pre><pre><p>API method to get a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroups">Function: SharingRegistryService.getGroups</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getGroups(<code>string</code> domainId,
                                          <code>i32</code> offset,
                                          <code>i32</code> limit)
-</pre><p>API method to get groups in a domainId.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addUsersToGroup">Function: SharingRegistryService.addUsersToGroup</h4>
+</pre><pre><p>API method to get groups in a domainId.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addUsersToGroup">Function: SharingRegistryService.addUsersToGroup</h4>
 <pre><code>bool</code> addUsersToGroup(<code>string</code> domainId,
                      <code>list&lt;<code>string</code>&gt;</code> userIds,
                      <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to add list of users to a group</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeUsersFromGroup">Function: SharingRegistryService.removeUsersFromGroup</h4>
+</pre><pre><p>API method to add list of users to a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeUsersFromGroup">Function: SharingRegistryService.removeUsersFromGroup</h4>
 <pre><code>bool</code> removeUsersFromGroup(<code>string</code> domainId,
                           <code>list&lt;<code>string</code>&gt;</code> userIds,
                           <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to remove users from a group</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroupMembersOfTypeUser">Function: SharingRegistryService.getGroupMembersOfTypeUser</h4>
+</pre><pre><p>API method to remove users from a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_transferGroupOwnership">Function: SharingRegistryService.transferGroupOwnership</h4>
+<pre><code>bool</code> transferGroupOwnership(<code>string</code> domainId,
+                            <code>string</code> groupId,
+                            <code>string</code> newOwnerId)
+    throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
+</pre><pre><p>API method to transfer group ownership</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addGroupAdmins">Function: SharingRegistryService.addGroupAdmins</h4>
+<pre><code>bool</code> addGroupAdmins(<code>string</code> domainId,
+                    <code>string</code> groupId,
+                    <code>list&lt;<code>string</code>&gt;</code> adminIds)
+    throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
+</pre><pre><p>API method to add Admin for a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeGroupAdmins">Function: SharingRegistryService.removeGroupAdmins</h4>
+<pre><code>bool</code> removeGroupAdmins(<code>string</code> domainId,
+                       <code>string</code> groupId,
+                       <code>list&lt;<code>string</code>&gt;</code> adminIds)
+    throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
+</pre><pre><p>API method to remove Admin for a group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_hasAdminAccess">Function: SharingRegistryService.hasAdminAccess</h4>
+<pre><code>bool</code> hasAdminAccess(<code>string</code> domainId,
+                    <code>string</code> groupId,
+                    <code>string</code> adminId)
+    throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
+</pre><pre><p>API method to check whether the user has Admin access for the group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_hasOwnerAccess">Function: SharingRegistryService.hasOwnerAccess</h4>
+<pre><code>bool</code> hasOwnerAccess(<code>string</code> domainId,
+                    <code>string</code> groupId,
+                    <code>string</code> ownerId)
+    throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
+</pre><pre><p>API method to check whether the user has Admin access for the group</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroupMembersOfTypeUser">Function: SharingRegistryService.getGroupMembersOfTypeUser</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getGroupMembersOfTypeUser(<code>string</code> domainId,
                                                     <code>string</code> groupId,
                                                     <code>i32</code> offset,
                                                     <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get list of child users in a group. Only the direct members will be returned.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroupMembersOfTypeGroup">Function: SharingRegistryService.getGroupMembersOfTypeGroup</h4>
+</pre><pre><p>API method to get list of child users in a group. Only the direct members will be returned.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroupMembersOfTypeGroup">Function: SharingRegistryService.getGroupMembersOfTypeGroup</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getGroupMembersOfTypeGroup(<code>string</code> domainId,
                                                           <code>string</code> groupId,
                                                           <code>i32</code> offset,
                                                           <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get list of child groups in a group. Only the direct members will be returned.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addChildGroupsToParentGroup">Function: SharingRegistryService.addChildGroupsToParentGroup</h4>
+</pre><pre><p>API method to get list of child groups in a group. Only the direct members will be returned.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addChildGroupsToParentGroup">Function: SharingRegistryService.addChildGroupsToParentGroup</h4>
 <pre><code>bool</code> addChildGroupsToParentGroup(<code>string</code> domainId,
                                  <code>list&lt;<code>string</code>&gt;</code> childIds,
                                  <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to add a child group to a parent group.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeChildGroupFromParentGroup">Function: SharingRegistryService.removeChildGroupFromParentGroup</h4>
+</pre><pre><p>API method to add a child group to a parent group.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeChildGroupFromParentGroup">Function: SharingRegistryService.removeChildGroupFromParentGroup</h4>
 <pre><code>bool</code> removeChildGroupFromParentGroup(<code>string</code> domainId,
                                      <code>string</code> childId,
                                      <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to remove a child group from parent group.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getAllMemberGroupsForUser">Function: SharingRegistryService.getAllMemberGroupsForUser</h4>
+</pre><pre><p>API method to remove a child group from parent group.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getAllMemberGroupsForUser">Function: SharingRegistryService.getAllMemberGroupsForUser</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getAllMemberGroupsForUser(<code>string</code> domainId,
                                                          <code>string</code> userId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre></div><div class="definition"><h4 id="Fn_SharingRegistryService_createEntityType">Function: SharingRegistryService.createEntityType</h4>
 <pre><code>string</code> createEntityType(<code><a href="sharing_models.html#Struct_EntityType">sharing_models.EntityType</a></code> entityType)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>, <code><a href="sharing_models.html#Struct_DuplicateEntryException">sharing_models.DuplicateEntryException</a></code>
-</pre><p>API method to create a new entity type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateEntityType">Function: SharingRegistryService.updateEntityType</h4>
+</pre><pre><p>API method to create a new entity type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateEntityType">Function: SharingRegistryService.updateEntityType</h4>
 <pre><code>bool</code> updateEntityType(<code><a href="sharing_models.html#Struct_EntityType">sharing_models.EntityType</a></code> entityType)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to update entity type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isEntityTypeExists">Function: SharingRegistryService.isEntityTypeExists</h4>
+</pre><pre><p>API method to update entity type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isEntityTypeExists">Function: SharingRegistryService.isEntityTypeExists</h4>
 <pre><code>bool</code> isEntityTypeExists(<code>string</code> domainId,
                         <code>string</code> entityTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check EntityType Exists</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteEntityType">Function: SharingRegistryService.deleteEntityType</h4>
+</pre><pre><p>API method to check EntityType Exists</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteEntityType">Function: SharingRegistryService.deleteEntityType</h4>
 <pre><code>bool</code> deleteEntityType(<code>string</code> domainId,
                       <code>string</code> entityTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to delete entity type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntityType">Function: SharingRegistryService.getEntityType</h4>
+</pre><pre><p>API method to delete entity type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntityType">Function: SharingRegistryService.getEntityType</h4>
 <pre><code><a href="sharing_models.html#Struct_EntityType">sharing_models.EntityType</a></code> getEntityType(<code>string</code> domainId,
                                         <code>string</code> entityTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get an entity type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntityTypes">Function: SharingRegistryService.getEntityTypes</h4>
+</pre><pre><p>API method to get an entity type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntityTypes">Function: SharingRegistryService.getEntityTypes</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_EntityType">sharing_models.EntityType</a></code>&gt;</code> getEntityTypes(<code>string</code> domainId,
                                                <code>i32</code> offset,
                                                <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get entity types in a domainId.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createEntity">Function: SharingRegistryService.createEntity</h4>
+</pre><pre><p>API method to get entity types in a domainId.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createEntity">Function: SharingRegistryService.createEntity</h4>
 <pre><code>string</code> createEntity(<code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code> entity)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to register new entity</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateEntity">Function: SharingRegistryService.updateEntity</h4>
+</pre><pre><p>API method to register new entity</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updateEntity">Function: SharingRegistryService.updateEntity</h4>
 <pre><code>bool</code> updateEntity(<code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code> entity)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to update entity</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isEntityExists">Function: SharingRegistryService.isEntityExists</h4>
+</pre><pre><p>API method to update entity</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isEntityExists">Function: SharingRegistryService.isEntityExists</h4>
 <pre><code>bool</code> isEntityExists(<code>string</code> domainId,
                     <code>string</code> entityId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check Entity Exists</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteEntity">Function: SharingRegistryService.deleteEntity</h4>
+</pre><pre><p>API method to check Entity Exists</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteEntity">Function: SharingRegistryService.deleteEntity</h4>
 <pre><code>bool</code> deleteEntity(<code>string</code> domainId,
                   <code>string</code> entityId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to delete entity</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntity">Function: SharingRegistryService.getEntity</h4>
+</pre><pre><p>API method to delete entity</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntity">Function: SharingRegistryService.getEntity</h4>
 <pre><code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code> getEntity(<code>string</code> domainId,
                                 <code>string</code> entityId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get entity</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_searchEntities">Function: SharingRegistryService.searchEntities</h4>
+</pre><pre><p>API method to get entity</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_searchEntities">Function: SharingRegistryService.searchEntities</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code>&gt;</code> searchEntities(<code>string</code> domainId,
                                            <code>string</code> userId,
                                            <code>list&lt;<code><a href="sharing_models.html#Struct_SearchCriteria">sharing_models.SearchCriteria</a></code>&gt;</code> filters,
                                            <code>i32</code> offset,
                                            <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to search entities</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getListOfSharedUsers">Function: SharingRegistryService.getListOfSharedUsers</h4>
+</pre><pre><p>API method to search entities</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getListOfSharedUsers">Function: SharingRegistryService.getListOfSharedUsers</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getListOfSharedUsers(<code>string</code> domainId,
                                                <code>string</code> entityId,
                                                <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get a list of shared users given the entity id</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getListOfSharedGroups">Function: SharingRegistryService.getListOfSharedGroups</h4>
+</pre><pre><p>API method to get a list of shared users given the entity id</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getListOfSharedGroups">Function: SharingRegistryService.getListOfSharedGroups</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getListOfSharedGroups(<code>string</code> domainId,
                                                      <code>string</code> entityId,
                                                      <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get a list of shared groups given the entity id</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createPermissionType">Function: SharingRegistryService.createPermissionType</h4>
+</pre><pre><p>API method to get a list of shared groups given the entity id</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_createPermissionType">Function: SharingRegistryService.createPermissionType</h4>
 <pre><code>string</code> createPermissionType(<code><a href="sharing_models.html#Struct_PermissionType">sharing_models.PermissionType</a></code> permissionType)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>, <code><a href="sharing_models.html#Struct_DuplicateEntryException">sharing_models.DuplicateEntryException</a></code>
-</pre><p>API method to create permission type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updatePermissionType">Function: SharingRegistryService.updatePermissionType</h4>
+</pre><pre><p>API method to create permission type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_updatePermissionType">Function: SharingRegistryService.updatePermissionType</h4>
 <pre><code>bool</code> updatePermissionType(<code><a href="sharing_models.html#Struct_PermissionType">sharing_models.PermissionType</a></code> permissionType)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to update permission type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isPermissionExists">Function: SharingRegistryService.isPermissionExists</h4>
+</pre><pre><p>API method to update permission type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_isPermissionExists">Function: SharingRegistryService.isPermissionExists</h4>
 <pre><code>bool</code> isPermissionExists(<code>string</code> dimainId,
                         <code>string</code> permissionId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check Permission Exists</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deletePermissionType">Function: SharingRegistryService.deletePermissionType</h4>
+</pre><pre><p>API method to check Permission Exists</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deletePermissionType">Function: SharingRegistryService.deletePermissionType</h4>
 <pre><code>bool</code> deletePermissionType(<code>string</code> domainId,
                           <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to delete permission type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getPermissionType">Function: SharingRegistryService.getPermissionType</h4>
+</pre><pre><p>API method to delete permission type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getPermissionType">Function: SharingRegistryService.getPermissionType</h4>
 <pre><code><a href="sharing_models.html#Struct_PermissionType">sharing_models.PermissionType</a></code> getPermissionType(<code>string</code> domainId,
                                                 <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get permission type</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getPermissionTypes">Function: SharingRegistryService.getPermissionTypes</h4>
+</pre><pre><p>API method to get permission type</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getPermissionTypes">Function: SharingRegistryService.getPermissionTypes</h4>
 <pre><code>list&lt;<code><a href="sharing_models.html#Struct_PermissionType">sharing_models.PermissionType</a></code>&gt;</code> getPermissionTypes(<code>string</code> domainId,
                                                        <code>i32</code> offset,
                                                        <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to get list of permission types in a given domainId.</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_shareEntityWithUsers">Function: SharingRegistryService.shareEntityWithUsers</h4>
+</pre><pre><p>API method to get list of permission types in a given domainId.</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_shareEntityWithUsers">Function: SharingRegistryService.shareEntityWithUsers</h4>
 <pre><code>bool</code> shareEntityWithUsers(<code>string</code> domainId,
                           <code>string</code> entityId,
                           <code>list&lt;<code>string</code>&gt;</code> userList,
                           <code>string</code> perssionTypeId,
                           <code>bool</code> cascadePermission)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to share an entity with users</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_revokeEntitySharingFromUsers">Function: SharingRegistryService.revokeEntitySharingFromUsers</h4>
+</pre><pre><p>API method to share an entity with users</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_revokeEntitySharingFromUsers">Function: SharingRegistryService.revokeEntitySharingFromUsers</h4>
 <pre><code>bool</code> revokeEntitySharingFromUsers(<code>string</code> domainId,
                                   <code>string</code> entityId,
                                   <code>list&lt;<code>string</code>&gt;</code> userList,
                                   <code>string</code> perssionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to revoke sharing from a list of users</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_shareEntityWithGroups">Function: SharingRegistryService.shareEntityWithGroups</h4>
+</pre><pre><p>API method to revoke sharing from a list of users</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_shareEntityWithGroups">Function: SharingRegistryService.shareEntityWithGroups</h4>
 <pre><code>bool</code> shareEntityWithGroups(<code>string</code> domainId,
                            <code>string</code> entityId,
                            <code>list&lt;<code>string</code>&gt;</code> groupList,
                            <code>string</code> perssionTypeId,
                            <code>bool</code> cascadePermission)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to share an entity with list of groups</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_revokeEntitySharingFromGroups">Function: SharingRegistryService.revokeEntitySharingFromGroups</h4>
+</pre><pre><p>API method to share an entity with list of groups</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_revokeEntitySharingFromGroups">Function: SharingRegistryService.revokeEntitySharingFromGroups</h4>
 <pre><code>bool</code> revokeEntitySharingFromGroups(<code>string</code> domainId,
                                    <code>string</code> entityId,
                                    <code>list&lt;<code>string</code>&gt;</code> groupList,
                                    <code>string</code> perssionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to revoke sharing from list of users</p>
-<br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_userHasAccess">Function: SharingRegistryService.userHasAccess</h4>
+</pre><pre><p>API method to revoke sharing from list of users</p>
+</pre><br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_userHasAccess">Function: SharingRegistryService.userHasAccess</h4>
 <pre><code>bool</code> userHasAccess(<code>string</code> domainId,
                    <code>string</code> userId,
                    <code>string</code> entityId,
                    <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
-</pre><p>API method to check whether a user has access to a specific entity</p>
-<br/></div></div></body></html>
+</pre><pre><p>API method to check whether a user has access to a specific entity</p>
+</pre><br/></div></div></body></html>
diff --git a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html
index f6bf9414ed..c1e8058361 100644
--- a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html
+++ b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html
@@ -15,9 +15,11 @@ <h1>Thrift module: sharing_models</h1>
 <a href="#Struct_Entity">Entity</a><br/>
 <a href="#Enum_EntitySearchField">EntitySearchField</a><br/>
 <a href="#Struct_EntityType">EntityType</a><br/>
+<a href="#Struct_GroupAdmin">GroupAdmin</a><br/>
 <a href="#Enum_GroupCardinality">GroupCardinality</a><br/>
 <a href="#Enum_GroupChildType">GroupChildType</a><br/>
 <a href="#Struct_GroupMembership">GroupMembership</a><br/>
+<a href="#Struct_GroupOwner">GroupOwner</a><br/>
 <a href="#Enum_GroupType">GroupType</a><br/>
 <a href="#Struct_PermissionType">PermissionType</a><br/>
 <a href="#Enum_SearchCondition">SearchCondition</a><br/>
@@ -35,35 +37,35 @@ <h1>Thrift module: sharing_models</h1>
 <table class="table-bordered table-striped table-condensed"><thead><th>Constant</th><th>Type</th><th>Value</th></thead>
 <tr id="Const_DO_NOT_SET_AT_CLIENTS_ID"><td><code>DO_NOT_SET_AT_CLIENTS_ID</code></td><td><code>string</code></td><td><code>"DO_NOT_SET_AT_CLIENTS_ID"</code></td></tr></table><hr/><h2 id="Enumerations">Enumerations</h2>
 <div class="definition"><h3 id="Enum_GroupCardinality">Enumeration: GroupCardinality</h3>
-<p>This is an system internal enum used to define single user groups and multi users groups. Every user is also
+<pre><p>This is an system internal enum used to define single user groups and multi users groups. Every user is also
 considered as a group in it's own right for implementation ease</p>
 
-<br/><br/><table class="table-bordered table-striped table-condensed">
+</pre><br/><br/><table class="table-bordered table-striped table-condensed">
 <tr><td><code>SINGLE_USER</code></td><td><code>0</code></td><td>
 </td></tr>
 <tr><td><code>MULTI_USER</code></td><td><code>1</code></td><td>
 </td></tr>
 </table></div>
 <div class="definition"><h3 id="Enum_GroupType">Enumeration: GroupType</h3>
-<p>Group types can be either user level or domain level groups.</p>
+<pre><p>Group types can be either user level or domain level groups.</p>
 
-<br/><br/><table class="table-bordered table-striped table-condensed">
+</pre><br/><br/><table class="table-bordered table-striped table-condensed">
 <tr><td><code>DOMAIN_LEVEL_GROUP</code></td><td><code>0</code></td><td>
 </td></tr>
 <tr><td><code>USER_LEVEL_GROUP</code></td><td><code>1</code></td><td>
 </td></tr>
 </table></div>
 <div class="definition"><h3 id="Enum_GroupChildType">Enumeration: GroupChildType</h3>
-<p>System internal data type to match group child types</p>
+<pre><p>System internal data type to match group child types</p>
 
-<br/><br/><table class="table-bordered table-striped table-condensed">
+</pre><br/><br/><table class="table-bordered table-striped table-condensed">
 <tr><td><code>USER</code></td><td><code>0</code></td><td>
 </td></tr>
 <tr><td><code>GROUP</code></td><td><code>1</code></td><td>
 </td></tr>
 </table></div>
 <div class="definition"><h3 id="Enum_EntitySearchField">Enumeration: EntitySearchField</h3>
-<p>This list of fields that can be used to search entities</p>
+<pre><p>This list of fields that can be used to search entities</p>
 <li>NAME : Name of the entity</li>
 <li>DESCRIPTION : Description of the entity</li>
 <li>FULL_TEXT : Full text field of the entity</li>
@@ -73,7 +75,7 @@ <h1>Thrift module: sharing_models</h1>
 <li>UPDATED_TIME : Updated time of the entity</li>
 <li>SHARED_COUNT : Number of directly shared users and groups</li>
 
-<br/><br/><table class="table-bordered table-striped table-condensed">
+</pre><br/><br/><table class="table-bordered table-striped table-condensed">
 <tr><td><code>NAME</code></td><td><code>0</code></td><td>
 </td></tr>
 <tr><td><code>DESCRIPTION</code></td><td><code>1</code></td><td>
@@ -96,14 +98,14 @@ <h1>Thrift module: sharing_models</h1>
 </td></tr>
 </table></div>
 <div class="definition"><h3 id="Enum_SearchCondition">Enumeration: SearchCondition</h3>
-<p>Different search operators that can be used with the entity search fields</p>
+<pre><p>Different search operators that can be used with the entity search fields</p>
 <li>EQUAL : Simply matches for equality. Applicable for name, and parent entity id</li>
 <li>LIKE : Check for the condition %$FIELD% condition. Applicable for name, and description</li>
 <li>FULL_TEXT : Does a full text search. Only applicable for the FULL_TEXT field.</li>
 <li>GTE : Greater than or equal. Only applicable for created time, updated time and shared count.</li>
 <li>LTE : Less than or equal. Only applicable for created time, updated time and shared count.</li>
 
-<br/><br/><table class="table-bordered table-striped table-condensed">
+</pre><br/><br/><table class="table-bordered table-striped table-condensed">
 <tr><td><code>EQUAL</code></td><td><code>0</code></td><td>
 </td></tr>
 <tr><td><code>LIKE</code></td><td><code>1</code></td><td>
@@ -118,9 +120,9 @@ <h1>Thrift module: sharing_models</h1>
 </td></tr>
 </table></div>
 <div class="definition"><h3 id="Enum_SharingType">Enumeration: SharingType</h3>
-<p>This is an internal enum type for managing sharings</p>
+<pre><p>This is an internal enum type for managing sharings</p>
 
-<br/><br/><table class="table-bordered table-striped table-condensed">
+</pre><br/><br/><table class="table-bordered table-striped table-condensed">
 <tr><td><code>DIRECT_NON_CASCADING</code></td><td><code>0</code></td><td>
 </td></tr>
 <tr><td><code>DIRECT_CASCADING</code></td><td><code>1</code></td><td>
@@ -136,7 +138,7 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>3</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>4</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>5</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>Domain is the entity that enables multi-tenency in this componenet. Every tenant will be
+</table><br/><pre><p>Domain is the entity that enables multi-tenency in this componenet. Every tenant will be
 operating separately it's own silo which is identified by the domain id. In the current implementation domain id
 will be same as the domain name</p>
 <li>domainId : Will be generated by the server based on the domain name</li>
@@ -145,7 +147,7 @@ <h1>Thrift module: sharing_models</h1>
 <li>createdTime : Will be set by the system</li>
 <li>updatedTime : Will be set by the system</li>
 
-<br/></div><div class="definition"><h3 id="Struct_User">Struct: User</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_User">Struct: User</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>userId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -156,7 +158,7 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>7</td><td>icon</td><td><code>binary</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>8</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>9</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>User is the model used to register a user in the system. Minimal user information will be required to provide
+</table><br/><pre><p>User is the model used to register a user in the system. Minimal user information will be required to provide
 regarding the user.</p>
 <li><b>userId</b> : User id provided by the client</li>
 <li><b>domainId</b> : Domain id for that user</li>
@@ -168,7 +170,17 @@ <h1>Thrift module: sharing_models</h1>
 <li>createdTime : If client provides this value then the system will use it if not the current time will be set</li>
 <li>updatedTime : If client provides this value then the system will use it if not the current time will be set</li>
 
-<br/></div><div class="definition"><h3 id="Struct_UserGroup">Struct: UserGroup</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_GroupAdmin">Struct: GroupAdmin</h3>
+<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
+<tr><td>1</td><td>groupId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>3</td><td>adminId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+</table><br/></div><div class="definition"><h3 id="Struct_GroupOwner">Struct: GroupOwner</h3>
+<table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
+<tr><td>1</td><td>groupId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>3</td><td>ownerId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+</table><br/></div><div class="definition"><h3 id="Struct_UserGroup">Struct: UserGroup</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>groupId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -179,7 +191,7 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>7</td><td>groupCardinality</td><td><code><a href="#Enum_GroupCardinality">GroupCardinality</a></code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>8</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>9</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>User group is a collection of users.</p>
+</table><br/><pre><p>User group is a collection of users.</p>
  <li><b>groupId</b> : Group id provided by the client</li>
  <li><b>domainId</b> : Domain id for this user group</li>
  <li><b>name</b> : Name for the user group. should be one word</li>
@@ -190,7 +202,7 @@ <h1>Thrift module: sharing_models</h1>
  <li>createdTime : Will be set by the system</li>
  <li>updatedTime : Will be set by the system</li>
  
-<br/></div><div class="definition"><h3 id="Struct_GroupMembership">Struct: GroupMembership</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_GroupMembership">Struct: GroupMembership</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>parentId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>childId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -198,9 +210,9 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>4</td><td>childType</td><td><code><a href="#Enum_GroupChildType">GroupChildType</a></code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>5</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>6</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>System internal data type to map group memberships</p>
+</table><br/><pre><p>System internal data type to map group memberships</p>
 
-<br/></div><div class="definition"><h3 id="Struct_EntityType">Struct: EntityType</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_EntityType">Struct: EntityType</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>entityTypeId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -208,7 +220,7 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>4</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>5</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>6</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>client defined entity types</p>
+</table><br/><pre><p>client defined entity types</p>
 <li><b>entityTypeId</b> : Entity type id provided by the client</li>
 <li><b>domainId</b> : Domain id of the domain.</li>
 <li><b>name</b> : Name for the entity type. Should be a single word.</li>
@@ -216,17 +228,17 @@ <h1>Thrift module: sharing_models</h1>
 <li>createdTime : Will be set by the system</li>
 <li>updatedTime : Will be set by the system</li>
 
-<br/></div><div class="definition"><h3 id="Struct_SearchCriteria">Struct: SearchCriteria</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_SearchCriteria">Struct: SearchCriteria</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>searchField</td><td><code><a href="#Enum_EntitySearchField">EntitySearchField</a></code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>value</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>3</td><td>searchCondition</td><td><code><a href="#Enum_SearchCondition">SearchCondition</a></code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>Container object for search criteria</p>
+</table><br/><pre><p>Container object for search criteria</p>
 <li><b>searchField</b> : Entity search field</li>
 <li><b>value</b> : Search value</li>
 <li><b>searchCondition</b> : EQUAL, LIKE etc..</li>
 
-<br/></div><div class="definition"><h3 id="Struct_Entity">Struct: Entity</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_Entity">Struct: Entity</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>entityId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -241,7 +253,7 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>11</td><td>originalEntityCreationTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>12</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>13</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>Entity object which is used to register an entity in the system.</p>
+</table><br/><pre><p>Entity object which is used to register an entity in the system.</p>
 <li><b>entityId</b> : Entity id provided by the client</li>
 <li><b>domainId</b> : Domain id</li>
 <li><b>entityTypeId</b> : Entity type id</li>
@@ -256,7 +268,7 @@ <h1>Thrift module: sharing_models</h1>
 <li>createdTime : Will be set by the system</li>
 <li>updatedTime : Will be set by the system</li>
 
-<br/></div><div class="definition"><h3 id="Struct_PermissionType">Struct: PermissionType</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_PermissionType">Struct: PermissionType</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>permissionTypeId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -264,7 +276,7 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>4</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>5</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>6</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>Object for creating client defined permission type</p>
+</table><br/><pre><p>Object for creating client defined permission type</p>
 <li><b>permissionTypeId</b> : Permission type id provided by the client</li>
 <li><b>domainId</b> : Domain id</li>
 <li><b>name</b> : Single word name for the permission</li>
@@ -272,7 +284,7 @@ <h1>Thrift module: sharing_models</h1>
 <li>createdTime : Will be set by the system</li>
 <li>updatedTime : Will be set by the system</li>
 
-<br/></div><div class="definition"><h3 id="Struct_Sharing">Struct: Sharing</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_Sharing">Struct: Sharing</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>permissionTypeId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>entityId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -282,19 +294,19 @@ <h1>Thrift module: sharing_models</h1>
 <tr><td>6</td><td>inheritedParentId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>7</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>8</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-</table><br/><p>This is an internal enum type for managing sharings</p>
+</table><br/><pre><p>This is an internal enum type for managing sharings</p>
 
-<br/></div><div class="definition"><h3 id="Struct_SharingRegistryException">Exception: SharingRegistryException</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_SharingRegistryException">Exception: SharingRegistryException</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>message</td><td><code>string</code></td><td></td><td>required</td><td></td></tr>
-</table><br/><p>Exception model used in the sharing registry service</p>
+</table><br/><pre><p>Exception model used in the sharing registry service</p>
 
-<br/></div><div class="definition"><h3 id="Struct_DuplicateEntryException">Exception: DuplicateEntryException</h3>
+</pre><br/></div><div class="definition"><h3 id="Struct_DuplicateEntryException">Exception: DuplicateEntryException</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>message</td><td><code>string</code></td><td></td><td>required</td><td></td></tr>
-</table><br/>This exception is thrown when you try to save a duplicate entity that already exists
+</table><br/><pre>This exception is thrown when you try to save a duplicate entity that already exists
   in the database.
 
   message: contains the associated error message
 
-<br/></div></div></body></html>
+</pre><br/></div></div></body></html>
diff --git a/modules/sharing-registry/thrift_models/sharing_cpi.thrift b/modules/sharing-registry/thrift_models/sharing_cpi.thrift
index 4e3129a7ed..7f3087f5ee 100644
--- a/modules/sharing-registry/thrift_models/sharing_cpi.thrift
+++ b/modules/sharing-registry/thrift_models/sharing_cpi.thrift
@@ -112,6 +112,26 @@ service SharingRegistryService {
      <p>API method to remove users from a group</p>
     */
     bool removeUsersFromGroup(1: required string domainId, 2: required list<string> userIds, 3: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
+    /**
+     <p>API method to transfer group ownership</p>
+    */
+    bool transferGroupOwnership(1: required string domainId, 2: required string groupId, 3: required string newOwnerId) throws (1: sharing_models.SharingRegistryException sre);
+    /**
+    <p>API method to add Admin for a group</p>
+    */
+    bool addGroupAdmins(1: required string domainId, 2: required string groupId, 3: required list<string> adminIds) throws (1: sharing_models.SharingRegistryException sre);
+    /**
+    <p>API method to remove Admin for a group</p>
+    */
+    bool removeGroupAdmins(1: required string domainId, 2: required string groupId, 3: required list<string> adminIds) throws (1: sharing_models.SharingRegistryException sre);
+    /**
+    <p>API method to check whether the user has Admin access for the group</p>
+    */
+    bool hasAdminAccess(1: required string domainId, 2: required string groupId, 3: required string adminId) throws (1: sharing_models.SharingRegistryException sre);
+    /**
+    <p>API method to check whether the user has Admin access for the group</p>
+    */
+    bool hasOwnerAccess(1: required string domainId, 2: required string groupId, 3: required string ownerId) throws (1: sharing_models.SharingRegistryException sre);
     /**
      <p>API method to get list of child users in a group. Only the direct members will be returned.</p>
     */
diff --git a/modules/sharing-registry/thrift_models/sharing_models.thrift b/modules/sharing-registry/thrift_models/sharing_models.thrift
index 474e14bdc4..35c2db6d0a 100644
--- a/modules/sharing-registry/thrift_models/sharing_models.thrift
+++ b/modules/sharing-registry/thrift_models/sharing_models.thrift
@@ -67,6 +67,27 @@ struct User {
  9: optional i64 updatedTime
 }
 
+/*
+* Admin user for a group. Admin will have access to add more users or remove users from the group
+*
+**/
+struct GroupAdmin {
+ 1: optional string groupId,
+ 2: optional string domainId,
+ 3: optional string adminId
+}
+
+/*
+* The Owner who creates the group initially. Ownership can be transferable to a different user.
+* Only owners are allowed to delete the groups.
+*
+**/
+struct GroupOwner {
+ 1: optional string groupId,
+ 2: optional string domainId,
+ 3: optional string ownerId
+}
+
 /**
 * <p>This is an system internal enum used to define single user groups and multi users groups. Every user is also
 * considered as a group in it's own right for implementation ease</p>


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Add group roles capabilities to Groups 
> ---------------------------------------
>
>                 Key: AIRAVATA-2591
>                 URL: https://issues.apache.org/jira/browse/AIRAVATA-2591
>             Project: Airavata
>          Issue Type: New Feature
>            Reporter: Suresh Marru
>            Assignee: Sachin Kariyattin
>
> Currently, the group members do not have fine-grained roles so only the owner can add users to this group. 
> It will be better to add group-member-roles:
> * The owner who creates the group initially. This ownership should be transferable to a different user. Only owners should be allowed to delete the groups. 
> * admin - a user role which will allow to add more users or remove users from the group. 
> * user - all users added to the group are by default in this role. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message