You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ya...@apache.org on 2026/04/01 19:04:57 UTC

(airavata) 24/49: refactor: remove Thrift dependency from sharing registry subsystem

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

yasith pushed a commit to branch feat/grpc-armeria-migration
in repository https://gitbox.apache.org/repos/asf/airavata.git

commit 74bc112295d90a7d76d868484ff878eeff30f936
Author: yasithdev <ya...@icloud.com>
AuthorDate: Tue Mar 31 13:55:43 2026 -0400

    refactor: remove Thrift dependency from sharing registry subsystem
    
    - Delete dead Thrift client code (OrchestratorClientFactory,
      OrchestratorClientSample, TestSSLClient)
    - Remove SharingRegistryServerHandler's Thrift Iface implementation,
      making it a plain Spring component
    - Replace all Thrift-generated sharing registry model types (Domain,
      User, UserGroup, Entity, EntityType, PermissionType, Sharing,
      GroupMembership, GroupAdmin) with JPA entity types throughout
    - Create plain Java replacements for Thrift-generated enums
      (GroupCardinality, GroupType, SharingType, GroupChildType,
      EntitySearchField, SearchCondition) and types (SearchCriteria,
      SharingRegistryException, DuplicateEntryException)
    - Eliminate the model-to-entity mapping layer: AbstractRepository now
      works directly with JPA entities (2 type params instead of 3),
      removing the need for SharingMapper
    - Delete SharingMapper (MapStruct interface for Thrift<->JPA conversion)
    - Update all callers (service layer, gRPC layer, event handlers) to use
      JPA entity types directly
    - Thrift codegen and libthrift dependency remain for now; the credential
      store, dbevent messaging, and security subsystems still depend on them
---
 .../compute/service/ApplicationCatalogService.java |  10 +-
 .../service/GroupResourceProfileService.java       |  10 +-
 .../credential/service/CredentialService.java      |  12 +-
 .../airavata/credential/util/TestSSLClient.java    | 139 --------
 .../orchestrator/OrchestratorClientFactory.java    |  41 ---
 .../orchestrator/OrchestratorClientSample.java     | 146 --------
 .../execution/service/ExperimentService.java       |  12 +-
 .../airavata/execution/service/GatewayService.java |  24 +-
 .../airavata/execution/service/ProjectService.java |  10 +-
 .../security/service/GatewayGroupsInitializer.java |  20 +-
 .../security/service/KeyCloakSecurityManager.java  |  10 +-
 .../handler/SharingRegistryServerHandler.java      | 383 +++++++++------------
 .../handler/SharingServiceDBEventHandler.java      |  46 +--
 .../SharingServiceDBEventMessagingFactory.java     |  11 +-
 .../airavata/sharing/mapper/SharingMapper.java     |  85 -----
 .../sharing/model/DuplicateEntryException.java     |  16 +
 .../airavata/sharing/model/EntitySearchField.java  |  14 +
 .../airavata/sharing/model/GroupCardinality.java   |   6 +
 .../airavata/sharing/model/GroupChildType.java     |   6 +
 .../apache/airavata/sharing/model/GroupType.java   |   6 +
 .../airavata/sharing/model/SearchCondition.java    |  10 +
 .../airavata/sharing/model/SearchCriteria.java     |  37 ++
 .../sharing/model/SharingRegistryException.java    |  16 +
 .../apache/airavata/sharing/model/SharingType.java |   7 +
 .../sharing/repository/AbstractRepository.java     |  73 ++--
 .../sharing/repository/DomainRepository.java       |  16 +-
 .../sharing/repository/EntityRepository.java       |  28 +-
 .../sharing/repository/EntityTypeRepository.java   |  16 +-
 .../sharing/repository/GroupAdminRepository.java   |  16 +-
 .../repository/GroupMembershipRepository.java      |  43 +--
 .../repository/PermissionTypeRepository.java       |  20 +-
 .../sharing/repository/SharingRepository.java      |  24 +-
 .../sharing/repository/UserGroupRepository.java    |  29 +-
 .../sharing/repository/UserRepository.java         |  28 +-
 .../sharing/service/ResourceSharingService.java    |   8 +-
 .../airavata/sharing/service/SharingHelper.java    |  11 +-
 .../sharing/util/AiravataDataMigrator.java         | 105 +++---
 .../sharing/util/ThriftDataModelConversion.java    |  26 +-
 .../server/grpc/services/SharingGrpcService.java   |  52 +--
 39 files changed, 529 insertions(+), 1043 deletions(-)

diff --git a/airavata-api/src/main/java/org/apache/airavata/compute/service/ApplicationCatalogService.java b/airavata-api/src/main/java/org/apache/airavata/compute/service/ApplicationCatalogService.java
index 819c7504f7..65cbdbc889 100644
--- a/airavata-api/src/main/java/org/apache/airavata/compute/service/ApplicationCatalogService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/compute/service/ApplicationCatalogService.java
@@ -38,10 +38,10 @@ import org.apache.airavata.model.application.io.proto.OutputDataObjectType;
 import org.apache.airavata.model.group.proto.ResourcePermissionType;
 import org.apache.airavata.model.group.proto.ResourceType;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntitySearchField;
-import org.apache.airavata.sharing.registry.models.SearchCondition;
-import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.EntitySearchField;
+import org.apache.airavata.sharing.model.SearchCondition;
+import org.apache.airavata.sharing.model.SearchCriteria;
 import org.apache.airavata.sharing.service.SharingHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -148,7 +148,7 @@ public class ApplicationCatalogService {
             throws ServiceException {
         try {
             String result = registryHandler.registerApplicationDeployment(gatewayId, applicationDeployment);
-            Entity entity = new Entity();
+            EntityEntity entity = new EntityEntity();
             entity.setEntityId(result);
             entity.setDomainId(gatewayId);
             entity.setEntityTypeId(gatewayId + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
diff --git a/airavata-api/src/main/java/org/apache/airavata/compute/service/GroupResourceProfileService.java b/airavata-api/src/main/java/org/apache/airavata/compute/service/GroupResourceProfileService.java
index 4bfde4e4b7..0849329f8d 100644
--- a/airavata-api/src/main/java/org/apache/airavata/compute/service/GroupResourceProfileService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/compute/service/GroupResourceProfileService.java
@@ -35,10 +35,10 @@ import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupReso
 import org.apache.airavata.model.group.proto.ResourcePermissionType;
 import org.apache.airavata.model.group.proto.ResourceType;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntitySearchField;
-import org.apache.airavata.sharing.registry.models.SearchCondition;
-import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.EntitySearchField;
+import org.apache.airavata.sharing.model.SearchCondition;
+import org.apache.airavata.sharing.model.SearchCriteria;
 import org.apache.airavata.sharing.service.SharingHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -65,7 +65,7 @@ public class GroupResourceProfileService {
             String groupResourceProfileId = registryHandler.createGroupResourceProfile(groupResourceProfile);
             if (SharingHelper.isSharingEnabled()) {
                 try {
-                    Entity entity = new Entity();
+                    EntityEntity entity = new EntityEntity();
                     entity.setEntityId(groupResourceProfileId);
                     final String domainId = groupResourceProfile.getGatewayId();
                     entity.setDomainId(domainId);
diff --git a/airavata-api/src/main/java/org/apache/airavata/credential/service/CredentialService.java b/airavata-api/src/main/java/org/apache/airavata/credential/service/CredentialService.java
index 0e7dac2013..5a5bc72d66 100644
--- a/airavata-api/src/main/java/org/apache/airavata/credential/service/CredentialService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/credential/service/CredentialService.java
@@ -33,10 +33,10 @@ import org.apache.airavata.model.credential.store.SummaryType;
 import org.apache.airavata.model.group.proto.ResourcePermissionType;
 import org.apache.airavata.model.group.proto.ResourceType;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntitySearchField;
-import org.apache.airavata.sharing.registry.models.SearchCondition;
-import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.EntitySearchField;
+import org.apache.airavata.sharing.model.SearchCondition;
+import org.apache.airavata.sharing.model.SearchCriteria;
 import org.apache.airavata.sharing.service.SharingHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -64,7 +64,7 @@ public class CredentialService {
             sshCredential.setDescription(description);
             String key = credentialHandler.addSSHCredential(sshCredential);
             try {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(key);
                 entity.setDomainId(gatewayId);
                 entity.setEntityTypeId(gatewayId + ":" + ResourceType.CREDENTIAL_TOKEN);
@@ -102,7 +102,7 @@ public class CredentialService {
             pwdCredential.setGatewayId(gatewayId);
             String key = credentialHandler.addPasswordCredential(pwdCredential);
             try {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(key);
                 entity.setDomainId(gatewayId);
                 entity.setEntityTypeId(gatewayId + ":" + ResourceType.CREDENTIAL_TOKEN);
diff --git a/airavata-api/src/main/java/org/apache/airavata/credential/util/TestSSLClient.java b/airavata-api/src/main/java/org/apache/airavata/credential/util/TestSSLClient.java
deleted file mode 100644
index 6351908e84..0000000000
--- a/airavata-api/src/main/java/org/apache/airavata/credential/util/TestSSLClient.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-package org.apache.airavata.credential.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import org.apache.airavata.common.config.ServerSettings;
-import org.apache.airavata.common.exception.ApplicationSettingsException;
-import org.apache.airavata.credential.store.cpi.CredentialStoreService;
-import org.apache.airavata.model.credential.store.CertificateCredential;
-import org.apache.airavata.model.credential.store.CommunityUser;
-import org.apache.airavata.model.credential.store.SSHCredential;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.thrift.TException;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TTransportException;
-
-public class TestSSLClient {
-    private void invoke() {
-        //        TTransport transport;
-        try {
-
-            //            TSSLTransportFactory.TSSLTransportParameters params =
-            //                    new TSSLTransportFactory.TSSLTransportParameters();
-            //            String keystorePath = ServerSettings.getCredentialStoreThriftServerKeyStorePath();
-            //            String keystorePWD = ServerSettings.getCredentialStoreThriftServerKeyStorePassword();
-            //            params.setTrustStore(keystorePath, keystorePWD);
-            final int serverPort = Integer.parseInt(ServerSettings.getCredentialStoreServerPort());
-            final String serverHost = ServerSettings.getCredentialStoreServerHost();
-            TTransport transport = new TSocket(serverHost, serverPort);
-            transport.open();
-            TProtocol protocol = new TBinaryProtocol(transport);
-            //            transport = TSSLTransportFactory.getClientSocket(serverHost, serverPort, 10000, params);
-            //            TProtocol protocol = new TBinaryProtocol(transport);
-
-            CredentialStoreService.Client client = new CredentialStoreService.Client(protocol);
-            testSSHCredential(client);
-            testCertificateCredential(client);
-            transport.close();
-        } catch (TTransportException e) {
-            e.printStackTrace();
-        } catch (ApplicationSettingsException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void testSSHCredential(CredentialStoreService.Client client) {
-        try {
-            SSHCredential sshCredential = new SSHCredential();
-            sshCredential.setUsername("test");
-            sshCredential.setGatewayId("testGateway");
-            sshCredential.setPassphrase("mypassphrase");
-            String token = client.addSSHCredential(sshCredential);
-            System.out.println("SSH Token :" + token);
-            SSHCredential credential = client.getSSHCredential(token, "testGateway");
-            System.out.println("private key : " + credential.getPrivateKey());
-            System.out.println("public key : " + credential.getPublicKey());
-        } catch (TTransportException e) {
-            e.printStackTrace();
-        } catch (TException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void testCertificateCredential(CredentialStoreService.Client client) {
-        try {
-            CertificateCredential certificateCredential = new CertificateCredential();
-            CommunityUser communityUser = new CommunityUser("testGateway", "test", "test@ddsd");
-            certificateCredential.setCommunityUser(communityUser);
-            X509Certificate[] x509Certificates = new X509Certificate[1];
-            KeyStore ks = KeyStore.getInstance("JKS");
-            File keyStoreFile = new File(
-                    "/Users/smarru/code/airavata-master/modules/configuration/server/src/main/resources/airavata.p12");
-            FileInputStream fis = new FileInputStream(keyStoreFile);
-            char[] password = "airavata".toCharArray();
-            ks.load(fis, password);
-            x509Certificates[0] = (X509Certificate) ks.getCertificate("airavata");
-            Base64 encoder = new Base64(64);
-            String cert_begin = "-----BEGIN CERTIFICATE-----\n";
-            String end_cert = "-----END CERTIFICATE-----";
-            byte[] derCert = x509Certificates[0].getEncoded();
-            String pemCertPre = new String(encoder.encode(derCert));
-            String pemCert = cert_begin + pemCertPre + end_cert;
-            certificateCredential.setX509Cert(pemCert);
-            String token = client.addCertificateCredential(certificateCredential);
-            System.out.println("Certificate Token :" + token);
-            CertificateCredential credential = client.getCertificateCredential(token, "testGateway");
-            System.out.println("certificate : " + credential.getX509Cert());
-            System.out.println(
-                    "gateway name  : " + credential.getCommunityUser().getGatewayName());
-        } catch (TTransportException e) {
-            e.printStackTrace();
-        } catch (TException e) {
-            e.printStackTrace();
-        } catch (KeyStoreException e) {
-            e.printStackTrace();
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        } catch (NoSuchAlgorithmException e) {
-            e.printStackTrace();
-        } catch (CertificateException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public static void main(String[] args) {
-        TestSSLClient c = new TestSSLClient();
-        c.invoke();
-    }
-}
diff --git a/airavata-api/src/main/java/org/apache/airavata/execution/orchestrator/OrchestratorClientFactory.java b/airavata-api/src/main/java/org/apache/airavata/execution/orchestrator/OrchestratorClientFactory.java
deleted file mode 100644
index c06816b51c..0000000000
--- a/airavata-api/src/main/java/org/apache/airavata/execution/orchestrator/OrchestratorClientFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-package org.apache.airavata.execution.orchestrator;
-
-import org.apache.airavata.orchestrator.cpi.OrchestratorService;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TTransportException;
-
-public class OrchestratorClientFactory {
-
-    public static OrchestratorService.Client createOrchestratorClient(String serverHost, int serverPort) {
-        try {
-            TTransport transport = new TSocket(serverHost, serverPort);
-            transport.open();
-            TProtocol protocol = new TBinaryProtocol(transport);
-            return new OrchestratorService.Client(protocol);
-        } catch (TTransportException e) {
-            throw new RuntimeException("Failed to create orchestrator client", e);
-        }
-    }
-}
diff --git a/airavata-api/src/main/java/org/apache/airavata/execution/orchestrator/OrchestratorClientSample.java b/airavata-api/src/main/java/org/apache/airavata/execution/orchestrator/OrchestratorClientSample.java
deleted file mode 100644
index 522b0c8301..0000000000
--- a/airavata-api/src/main/java/org/apache/airavata/execution/orchestrator/OrchestratorClientSample.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-package org.apache.airavata.execution.orchestrator;
-
-// import org.apache.airavata.client.AiravataAPIFactory;
-// import org.apache.airavata.client.api.AiravataAPI;
-// import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
-// import org.apache.airavata.client.tools.DocumentCreator;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.airavata.execution.util.ExperimentModelUtil;
-import org.apache.airavata.model.application.io.proto.DataType;
-import org.apache.airavata.model.application.io.proto.InputDataObjectType;
-import org.apache.airavata.model.application.io.proto.OutputDataObjectType;
-import org.apache.airavata.model.experiment.proto.ExperimentModel;
-import org.apache.airavata.model.experiment.proto.UserConfigurationDataModel;
-import org.apache.airavata.model.scheduling.proto.ComputationalResourceSchedulingModel;
-import org.apache.airavata.orchestrator.cpi.OrchestratorService;
-
-
-public class OrchestratorClientSample {
-    //    private static DocumentCreator documentCreator;
-    private static OrchestratorService.Client orchestratorClient;
-    //    private static Registry registry;
-    private static int NUM_CONCURRENT_REQUESTS = 1;
-    private static final String DEFAULT_USER = "default.registry.user";
-    private static final String DEFAULT_USER_PASSWORD = "default.registry.password";
-    private static final String DEFAULT_GATEWAY = "default.registry.gateway";
-    private static String sysUser;
-    private static String sysUserPwd;
-    private static String gateway;
-    /*
-
-        public static void main(String[] args) {
-            try {
-                AiravataUtils.setExecutionAsClient();
-                sysUser = ClientSettings.getSetting(DEFAULT_USER);
-                sysUserPwd = ClientSettings.getSetting(DEFAULT_USER_PASSWORD);
-                gateway = ClientSettings.getSetting(DEFAULT_GATEWAY);
-                orchestratorClient = OrchestratorClientFactory.createOrchestratorClient("localhost", 8940);
-                registry = RegistryFactory.getRegistry(gateway, sysUser, sysUserPwd);
-                documentCreator = new DocumentCreator(getAiravataAPI());
-                documentCreator.createLocalHostDocs();
-                documentCreator.createGramDocs();
-                documentCreator.createPBSDocsForOGCE();
-                storeExperimentDetail();
-            } catch (ApplicationSettingsException e) {
-                e.printStackTrace();
-            } catch (RegistryException e) {
-                e.printStackTrace();
-            }
-
-        }
-
-        private static AiravataAPI getAiravataAPI() {
-            AiravataAPI airavataAPI = null;
-                try {
-                    airavataAPI = AiravataAPIFactory.getAPI(gateway, sysUser);
-                } catch (AiravataAPIInvocationException e) {
-                    e.printStackTrace();
-                }
-            return airavataAPI;
-        }
-    */
-
-    public static void storeExperimentDetail() {
-        for (int i = 0; i < NUM_CONCURRENT_REQUESTS; i++) {
-            Thread thread = new Thread() {
-                public void run() {
-                    List<InputDataObjectType> exInputs = new ArrayList<InputDataObjectType>();
-                    InputDataObjectType input = InputDataObjectType.newBuilder()
-                            .setName("echo_input")
-                            .setType(DataType.STRING)
-                            .setValue("echo_output=Hello World")
-                            .build();
-                    exInputs.add(input);
-
-                    List<OutputDataObjectType> exOut = new ArrayList<OutputDataObjectType>();
-                    OutputDataObjectType output = OutputDataObjectType.newBuilder()
-                            .setName("echo_output")
-                            .setType(DataType.STRING)
-                            .setValue("")
-                            .build();
-                    exOut.add(output);
-
-                    ExperimentModel simpleExperiment = ExperimentModelUtil.createSimpleExperiment(
-                            DEFAULT_GATEWAY,
-                            "default",
-                            "admin",
-                            "echoExperiment",
-                            "SimpleEcho2",
-                            "SimpleEcho2",
-                            exInputs);
-                    simpleExperiment = simpleExperiment.toBuilder()
-                            .addAllExperimentOutputs(exOut).build();
-
-                    ComputationalResourceSchedulingModel scheduling =
-                            ExperimentModelUtil.createComputationResourceScheduling(
-                                    "trestles.sdsc.edu", 1, 1, 1, "normal", 0, 0)
-                                    .toBuilder().setResourceHostId("gsissh-trestles").build();
-                    UserConfigurationDataModel userConfigurationDataModel = UserConfigurationDataModel.newBuilder()
-                            .setComputationalResourceScheduling(scheduling).build();
-                    simpleExperiment = simpleExperiment.toBuilder()
-                            .setUserConfigurationData(userConfigurationDataModel).build();
-                    String expId = null;
-                    try {
-                        //                        expId = (String) registry.add(ParentDataType.EXPERIMENT,
-                        // simpleExperiment);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-
-                    try {
-                        orchestratorClient.launchExperiment(expId, "airavataToken");
-                    } catch (Exception e) {
-                        throw new RuntimeException("Error while storing experiment details", e);
-                    }
-                }
-            };
-            thread.start();
-            try {
-                thread.join();
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-}
diff --git a/airavata-api/src/main/java/org/apache/airavata/execution/service/ExperimentService.java b/airavata-api/src/main/java/org/apache/airavata/execution/service/ExperimentService.java
index 68a3722b3e..172ef4c403 100644
--- a/airavata-api/src/main/java/org/apache/airavata/execution/service/ExperimentService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/execution/service/ExperimentService.java
@@ -48,10 +48,10 @@ import org.apache.airavata.model.status.proto.ProcessStatus;
 import org.apache.airavata.model.task.proto.TaskTypes;
 import org.apache.airavata.model.workspace.proto.Project;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntitySearchField;
-import org.apache.airavata.sharing.registry.models.SearchCondition;
-import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.EntitySearchField;
+import org.apache.airavata.sharing.model.SearchCondition;
+import org.apache.airavata.sharing.model.SearchCriteria;
 import org.apache.airavata.sharing.service.SharingHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -84,7 +84,7 @@ public class ExperimentService {
 
             if (SharingHelper.isSharingEnabled()) {
                 try {
-                    Entity entity = new Entity();
+                    EntityEntity entity = new EntityEntity();
                     entity.setEntityId(experimentId);
                     String domainId = experiment.getGatewayId();
                     entity.setDomainId(domainId);
@@ -447,7 +447,7 @@ public class ExperimentService {
             }
             if (SharingHelper.isSharingEnabled()) {
                 try {
-                    Entity entity = sharingHandler.getEntity(ctx.getGatewayId(), experimentId);
+                    EntityEntity entity = sharingHandler.getEntity(ctx.getGatewayId(), experimentId);
                     entity.setName(experiment.getExperimentName());
                     entity.setDescription(experiment.getDescription());
                     entity.setParentEntityId(experiment.getProjectId());
diff --git a/airavata-api/src/main/java/org/apache/airavata/execution/service/GatewayService.java b/airavata-api/src/main/java/org/apache/airavata/execution/service/GatewayService.java
index fbf874ad59..9fb9b2b9d6 100644
--- a/airavata-api/src/main/java/org/apache/airavata/execution/service/GatewayService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/execution/service/GatewayService.java
@@ -24,9 +24,9 @@ import org.apache.airavata.execution.handler.RegistryServerHandler;
 import org.apache.airavata.model.group.proto.ResourceType;
 import org.apache.airavata.model.workspace.proto.Gateway;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Domain;
-import org.apache.airavata.sharing.registry.models.EntityType;
-import org.apache.airavata.sharing.registry.models.PermissionType;
+import org.apache.airavata.sharing.model.DomainEntity;
+import org.apache.airavata.sharing.model.EntityTypeEntity;
+import org.apache.airavata.sharing.model.PermissionTypeEntity;
 import org.apache.airavata.sharing.service.SharingHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,42 +48,42 @@ public class GatewayService {
             String gatewayId = registryHandler.addGateway(gateway);
 
             if (SharingHelper.isSharingEnabled()) {
-                Domain domain = new Domain();
+                DomainEntity domain = new DomainEntity();
                 domain.setDomainId(gateway.getGatewayId());
                 domain.setName(gateway.getGatewayName());
                 domain.setDescription("Domain entry for " + domain.getName());
                 sharingHandler.createDomain(domain);
 
                 // Creating Entity Types for each domain
-                EntityType entityType = new EntityType();
+                EntityTypeEntity entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":PROJECT");
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("PROJECT");
                 entityType.setDescription("Project entity type");
                 sharingHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":EXPERIMENT");
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("EXPERIMENT");
                 entityType.setDescription("Experiment entity type");
                 sharingHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":FILE");
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("FILE");
                 entityType.setDescription("File entity type");
                 sharingHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("APPLICATION-DEPLOYMENT");
                 entityType.setDescription("Application Deployment entity type");
                 sharingHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":" + ResourceType.GROUP_RESOURCE_PROFILE.name());
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName(ResourceType.GROUP_RESOURCE_PROFILE.name());
@@ -91,21 +91,21 @@ public class GatewayService {
                 sharingHandler.createEntityType(entityType);
 
                 // Creating Permission Types for each domain
-                PermissionType permissionType = new PermissionType();
+                PermissionTypeEntity permissionType = new PermissionTypeEntity();
                 permissionType.setPermissionTypeId(domain.getDomainId() + ":READ");
                 permissionType.setDomainId(domain.getDomainId());
                 permissionType.setName("READ");
                 permissionType.setDescription("Read permission type");
                 sharingHandler.createPermissionType(permissionType);
 
-                permissionType = new PermissionType();
+                permissionType = new PermissionTypeEntity();
                 permissionType.setPermissionTypeId(domain.getDomainId() + ":WRITE");
                 permissionType.setDomainId(domain.getDomainId());
                 permissionType.setName("WRITE");
                 permissionType.setDescription("Write permission type");
                 sharingHandler.createPermissionType(permissionType);
 
-                permissionType = new PermissionType();
+                permissionType = new PermissionTypeEntity();
                 permissionType.setPermissionTypeId(domain.getDomainId() + ":MANAGE_SHARING");
                 permissionType.setDomainId(domain.getDomainId());
                 permissionType.setName("MANAGE_SHARING");
diff --git a/airavata-api/src/main/java/org/apache/airavata/execution/service/ProjectService.java b/airavata-api/src/main/java/org/apache/airavata/execution/service/ProjectService.java
index 337de1096d..4423e74622 100644
--- a/airavata-api/src/main/java/org/apache/airavata/execution/service/ProjectService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/execution/service/ProjectService.java
@@ -28,10 +28,10 @@ import org.apache.airavata.execution.handler.RegistryServerHandler;
 import org.apache.airavata.model.experiment.proto.ProjectSearchFields;
 import org.apache.airavata.model.workspace.proto.Project;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntitySearchField;
-import org.apache.airavata.sharing.registry.models.SearchCondition;
-import org.apache.airavata.sharing.registry.models.SearchCriteria;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.EntitySearchField;
+import org.apache.airavata.sharing.model.SearchCondition;
+import org.apache.airavata.sharing.model.SearchCriteria;
 import org.apache.airavata.sharing.service.SharingHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -54,7 +54,7 @@ public class ProjectService {
 
             if (SharingHelper.isSharingEnabled()) {
                 try {
-                    Entity entity = new Entity();
+                    EntityEntity entity = new EntityEntity();
                     entity.setEntityId(projectId);
                     final String domainId = project.getGatewayId();
                     entity.setDomainId(domainId);
diff --git a/airavata-api/src/main/java/org/apache/airavata/security/service/GatewayGroupsInitializer.java b/airavata-api/src/main/java/org/apache/airavata/security/service/GatewayGroupsInitializer.java
index 735acdf377..bf1b7069f7 100644
--- a/airavata-api/src/main/java/org/apache/airavata/security/service/GatewayGroupsInitializer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/security/service/GatewayGroupsInitializer.java
@@ -28,9 +28,7 @@ import org.apache.airavata.model.appcatalog.gatewayprofile.proto.GatewayResource
 import org.apache.airavata.model.credential.store.PasswordCredential;
 import org.apache.airavata.execution.handler.RegistryServerHandler;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.*;
-import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService;
-import org.apache.thrift.TException;
+import org.apache.airavata.sharing.model.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,7 +82,7 @@ public class GatewayGroupsInitializer {
         String adminOwnerUsername = getAdminOwnerUsername(registryClient, credentialStoreClient, gatewayId);
         String ownerId = adminOwnerUsername + "@" + gatewayId;
         if (!sharingRegistryClient.isUserExists(gatewayId, ownerId)) {
-            User adminUser = new User();
+            UserEntity adminUser = new UserEntity();
             adminUser.setUserId(ownerId);
             adminUser.setDomainId(gatewayId);
             adminUser.setCreatedTime(System.currentTimeMillis());
@@ -94,15 +92,15 @@ public class GatewayGroupsInitializer {
         }
 
         // Gateway Users
-        UserGroup gatewayUsersGroup = createGroup(
+        UserGroupEntity gatewayUsersGroup = createGroup(
                 sharingRegistryClient, gatewayId, ownerId, "Gateway Users", "Default group for users of the gateway.");
         gatewayGroupsBuilder.setDefaultGatewayUsersGroupId(gatewayUsersGroup.getGroupId());
         // Admin Users
-        UserGroup adminUsersGroup =
+        UserGroupEntity adminUsersGroup =
                 createGroup(sharingRegistryClient, gatewayId, ownerId, "Admin Users", "Admin users group.");
         gatewayGroupsBuilder.setAdminsGroupId(adminUsersGroup.getGroupId());
         // Read Only Admin Users
-        UserGroup readOnlyAdminsGroup = createGroup(
+        UserGroupEntity readOnlyAdminsGroup = createGroup(
                 sharingRegistryClient,
                 gatewayId,
                 ownerId,
@@ -122,7 +120,7 @@ public class GatewayGroupsInitializer {
         return gatewayGroups;
     }
 
-    private UserGroup createGroup(
+    private UserGroupEntity createGroup(
             SharingRegistryServerHandler sharingRegistryClient,
             String gatewayId,
             String ownerId,
@@ -130,16 +128,16 @@ public class GatewayGroupsInitializer {
             String groupDescription)
             throws Exception {
 
-        UserGroup userGroup = new UserGroup();
+        UserGroupEntity userGroup = new UserGroupEntity();
         userGroup.setGroupId(AiravataUtils.getId(groupName));
         userGroup.setDomainId(gatewayId);
-        userGroup.setGroupCardinality(GroupCardinality.MULTI_USER);
+        userGroup.setGroupCardinality(GroupCardinality.MULTI_USER.name());
         userGroup.setCreatedTime(System.currentTimeMillis());
         userGroup.setUpdatedTime(System.currentTimeMillis());
         userGroup.setName(groupName);
         userGroup.setDescription(groupDescription);
         userGroup.setOwnerId(ownerId);
-        userGroup.setGroupType(GroupType.DOMAIN_LEVEL_GROUP);
+        userGroup.setGroupType(GroupType.DOMAIN_LEVEL_GROUP.name());
         sharingRegistryClient.createGroup(userGroup);
 
         return userGroup;
diff --git a/airavata-api/src/main/java/org/apache/airavata/security/service/KeyCloakSecurityManager.java b/airavata-api/src/main/java/org/apache/airavata/security/service/KeyCloakSecurityManager.java
index 8e4782ecfe..1aa416f72e 100644
--- a/airavata-api/src/main/java/org/apache/airavata/security/service/KeyCloakSecurityManager.java
+++ b/airavata-api/src/main/java/org/apache/airavata/security/service/KeyCloakSecurityManager.java
@@ -40,8 +40,7 @@ import org.apache.airavata.execution.handler.RegistryServerHandler;
 import org.apache.airavata.security.service.authzcache.*;
 import org.apache.airavata.security.util.AiravataSecurityException;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.UserGroup;
-import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService;
+import org.apache.airavata.sharing.model.UserGroupEntity;
 import org.apache.http.Consts;
 import org.apache.http.HttpHeaders;
 import org.apache.http.NameValuePair;
@@ -52,7 +51,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.EntityUtils;
-import org.apache.thrift.TException;
 import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -283,10 +281,10 @@ public class KeyCloakSecurityManager implements AiravataSecurityManager {
             throws Exception {
         validateToken(username, token, gatewayId);
         GatewayGroups gatewayGroups = getGatewayGroups(gatewayId);
-        List<UserGroup> userGroups =
+        List<UserGroupEntity> userGroups =
                 sharingRegistryServiceClient.getAllMemberGroupsForUser(gatewayId, username + "@" + gatewayId);
         List<String> userGroupIds =
-                userGroups.stream().map(UserGroup::getGroupId).toList();
+                userGroups.stream().map(UserGroupEntity::getGroupId).toList();
         GatewayGroupMembership gatewayGroupMembership = new GatewayGroupMembership();
         gatewayGroupMembership.setInAdminsGroup(userGroupIds.contains(gatewayGroups.getAdminsGroupId()));
         gatewayGroupMembership.setInReadOnlyAdminsGroup(
@@ -378,7 +376,7 @@ public class KeyCloakSecurityManager implements AiravataSecurityManager {
         return matcher.matches();
     }
 
-    private void initServiceClients() throws TException, ApplicationSettingsException {
+    private void initServiceClients() throws Exception, ApplicationSettingsException {
         registryServiceClient = getRegistryServiceClient();
         sharingRegistryServiceClient = new SharingRegistryServerHandler();
     }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingRegistryServerHandler.java b/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingRegistryServerHandler.java
index ec765ad396..c736d7c276 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingRegistryServerHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingRegistryServerHandler.java
@@ -25,44 +25,38 @@ import java.util.*;
 import org.apache.airavata.common.db.DBInitializer;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.sharing.model.*;
-import org.apache.airavata.sharing.registry.models.*;
-import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService;
-import org.apache.airavata.sharing.registry.service.cpi.sharing_cpiConstants;
 import org.apache.airavata.sharing.repository.*;
 import org.apache.airavata.sharing.util.DBConstants;
 import org.apache.airavata.sharing.util.SharingRegistryDBInitConfig;
 import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 @Component
-public class SharingRegistryServerHandler implements SharingRegistryService.Iface {
+public class SharingRegistryServerHandler  {
     private static final Logger logger = LoggerFactory.getLogger(SharingRegistryServerHandler.class);
 
     public static String OWNER_PERMISSION_NAME = "OWNER";
 
-    public SharingRegistryServerHandler() throws ApplicationSettingsException, TException {
+    public SharingRegistryServerHandler() throws ApplicationSettingsException {
         this(new SharingRegistryDBInitConfig());
     }
 
     public SharingRegistryServerHandler(SharingRegistryDBInitConfig sharingRegistryDBInitConfig)
-            throws ApplicationSettingsException, TException {
+            throws ApplicationSettingsException {
         DBInitializer.initializeDB(sharingRegistryDBInitConfig);
     }
 
-    @Override
-    public String getAPIVersion() throws TException {
-        return sharing_cpiConstants.SHARING_CPI_VERSION;
+        public String getAPIVersion() throws SharingRegistryException {
+        return "0.1";
     }
 
     /**
      * * Domain Operations
      * *
      */
-    @Override
-    public String createDomain(Domain domain) throws SharingRegistryException, DuplicateEntryException, TException {
+        public String createDomain(DomainEntity domain) throws SharingRegistryException, DuplicateEntryException {
         try {
             if ((new DomainRepository()).get(domain.getDomainId()) != null)
                 throw new DuplicateEntryException("There exist domain with given domain id");
@@ -72,7 +66,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             (new DomainRepository()).create(domain);
 
             // create the global permission for the domain
-            PermissionType permissionType = new PermissionType();
+            PermissionTypeEntity permissionType = new PermissionTypeEntity();
             permissionType.setPermissionTypeId(domain.getDomainId() + ":" + OWNER_PERMISSION_NAME);
             permissionType.setDomainId(domain.getDomainId());
             permissionType.setName(OWNER_PERMISSION_NAME);
@@ -88,10 +82,9 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean updateDomain(Domain domain) throws SharingRegistryException, TException {
+        public boolean updateDomain(DomainEntity domain) throws SharingRegistryException {
         try {
-            Domain oldDomain = (new DomainRepository()).get(domain.getDomainId());
+            DomainEntity oldDomain = (new DomainRepository()).get(domain.getDomainId());
             domain.setCreatedTime(oldDomain.getCreatedTime());
             domain.setUpdatedTime(System.currentTimeMillis());
             domain = getUpdatedObject(oldDomain, domain);
@@ -108,8 +101,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      *
      * @param domainId
      */
-    @Override
-    public boolean isDomainExists(String domainId) throws SharingRegistryException, TException {
+        public boolean isDomainExists(String domainId) throws SharingRegistryException {
         try {
             return (new DomainRepository()).isExists(domainId);
         } catch (Throwable ex) {
@@ -118,8 +110,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean deleteDomain(String domainId) throws SharingRegistryException, TException {
+        public boolean deleteDomain(String domainId) throws SharingRegistryException {
         try {
             (new DomainRepository()).delete(domainId);
             return true;
@@ -129,8 +120,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public Domain getDomain(String domainId) throws SharingRegistryException, TException {
+        public DomainEntity getDomain(String domainId) throws SharingRegistryException {
         try {
             return (new DomainRepository()).get(domainId);
         } catch (Throwable ex) {
@@ -139,8 +129,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<Domain> getDomains(int offset, int limit) throws TException {
+        public List<DomainEntity> getDomains(int offset, int limit) throws SharingRegistryException {
         try {
             return (new DomainRepository()).select(new HashMap<>(), offset, limit);
         } catch (Throwable ex) {
@@ -153,8 +142,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      * * User Operations
      * *
      */
-    @Override
-    public String createUser(User user) throws SharingRegistryException, DuplicateEntryException, TException {
+        public String createUser(UserEntity user) throws SharingRegistryException, DuplicateEntryException {
         try {
             UserPK userPK = new UserPK();
             userPK.setUserId(user.getUserId());
@@ -166,17 +154,17 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             user.setUpdatedTime(System.currentTimeMillis());
             (new UserRepository()).create(user);
 
-            UserGroup userGroup = new UserGroup();
+            UserGroupEntity userGroup = new UserGroupEntity();
             userGroup.setGroupId(user.getUserId());
             userGroup.setDomainId(user.getDomainId());
             userGroup.setName(user.getUserName());
             userGroup.setDescription("user " + user.getUserName() + " group");
             userGroup.setOwnerId(user.getUserId());
-            userGroup.setGroupType(GroupType.USER_LEVEL_GROUP);
-            userGroup.setGroupCardinality(GroupCardinality.SINGLE_USER);
+            userGroup.setGroupType(GroupType.USER_LEVEL_GROUP.name());
+            userGroup.setGroupCardinality(GroupCardinality.SINGLE_USER.name());
             (new UserGroupRepository()).create(userGroup);
 
-            Domain domain = new DomainRepository().get(user.getDomainId());
+            DomainEntity domain = new DomainRepository().get(user.getDomainId());
             if (domain.getInitialUserGroupId() != null) {
                 addUsersToGroup(
                         user.getDomainId(),
@@ -191,13 +179,12 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean updatedUser(User user) throws SharingRegistryException, TException {
+        public boolean updatedUser(UserEntity user) throws SharingRegistryException {
         try {
             UserPK userPK = new UserPK();
             userPK.setUserId(user.getUserId());
             userPK.setDomainId(user.getDomainId());
-            User oldUser = (new UserRepository()).get(userPK);
+            UserEntity oldUser = (new UserRepository()).get(userPK);
             user.setCreatedTime(oldUser.getCreatedTime());
             user.setUpdatedTime(System.currentTimeMillis());
             user = getUpdatedObject(oldUser, user);
@@ -206,7 +193,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(user.getUserId());
             userGroupPK.setDomainId(user.getDomainId());
-            UserGroup userGroup = (new UserGroupRepository()).get(userGroupPK);
+            UserGroupEntity userGroup = (new UserGroupRepository()).get(userGroupPK);
             userGroup.setName(user.getUserName());
             userGroup.setDescription("user " + user.getUserName() + " group");
             updateGroup(userGroup);
@@ -222,8 +209,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      *
      * @param userId
      */
-    @Override
-    public boolean isUserExists(String domainId, String userId) throws SharingRegistryException, TException {
+        public boolean isUserExists(String domainId, String userId) throws SharingRegistryException {
         try {
             UserPK userPK = new UserPK();
             userPK.setDomainId(domainId);
@@ -235,8 +221,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean deleteUser(String domainId, String userId) throws SharingRegistryException, TException {
+        public boolean deleteUser(String domainId, String userId) throws SharingRegistryException {
         try {
             UserPK userPK = new UserPK();
             userPK.setUserId(userId);
@@ -254,8 +239,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public User getUser(String domainId, String userId) throws SharingRegistryException, TException {
+        public UserEntity getUser(String domainId, String userId) throws SharingRegistryException {
         try {
             UserPK userPK = new UserPK();
             userPK.setUserId(userId);
@@ -267,8 +251,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<User> getUsers(String domain, int offset, int limit) throws SharingRegistryException, TException {
+        public List<UserEntity> getUsers(String domain, int offset, int limit) throws SharingRegistryException {
         try {
             HashMap<String, String> filters = new HashMap<>();
             filters.put(DBConstants.UserTable.DOMAIN_ID, domain);
@@ -283,8 +266,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      * * Group Operations
      * *
      */
-    @Override
-    public String createGroup(UserGroup group) throws SharingRegistryException, TException {
+        public String createGroup(UserGroupEntity group) throws SharingRegistryException {
         try {
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(group.getGroupId());
@@ -292,11 +274,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             if ((new UserGroupRepository()).get(userGroupPK) != null)
                 throw new SharingRegistryException("There exist group with given group id");
             // Client created groups are always of type MULTI_USER
-            group.setGroupCardinality(GroupCardinality.MULTI_USER);
+            group.setGroupCardinality(GroupCardinality.MULTI_USER.name());
             group.setCreatedTime(System.currentTimeMillis());
             group.setUpdatedTime(System.currentTimeMillis());
             // Add group admins once the group is created
-            group.unsetGroupAdmins();
+            // group admins are managed separately;
             (new UserGroupRepository()).create(group);
 
             addUsersToGroup(group.getDomainId(), Arrays.asList(group.getOwnerId()), group.getGroupId());
@@ -307,14 +289,13 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean updateGroup(UserGroup group) throws SharingRegistryException, TException {
+        public boolean updateGroup(UserGroupEntity group) throws SharingRegistryException {
         try {
             group.setUpdatedTime(System.currentTimeMillis());
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(group.getGroupId());
             userGroupPK.setDomainId(group.getDomainId());
-            UserGroup oldGroup = (new UserGroupRepository()).get(userGroupPK);
+            UserGroupEntity oldGroup = (new UserGroupRepository()).get(userGroupPK);
             group.setGroupCardinality(oldGroup.getGroupCardinality());
             group.setCreatedTime(oldGroup.getCreatedTime());
             group = getUpdatedObject(oldGroup, group);
@@ -336,10 +317,9 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      * @param groupId
      * @return
      * @throws SharingRegistryException
-     * @throws TException
+     * @throws SharingRegistryException
      */
-    @Override
-    public boolean isGroupExists(String domainId, String groupId) throws SharingRegistryException, TException {
+        public boolean isGroupExists(String domainId, String groupId) throws SharingRegistryException {
         try {
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setDomainId(domainId);
@@ -351,8 +331,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean deleteGroup(String domainId, String groupId) throws SharingRegistryException, TException {
+        public boolean deleteGroup(String domainId, String groupId) throws SharingRegistryException {
         try {
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(groupId);
@@ -365,8 +344,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public UserGroup getGroup(String domainId, String groupId) throws SharingRegistryException, TException {
+        public UserGroupEntity getGroup(String domainId, String groupId) throws SharingRegistryException {
         try {
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(groupId);
@@ -378,8 +356,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<UserGroup> getGroups(String domain, int offset, int limit) throws TException {
+        public List<UserGroupEntity> getGroups(String domain, int offset, int limit) throws SharingRegistryException {
         try {
             HashMap<String, String> filters = new HashMap<>();
             filters.put(DBConstants.UserGroupTable.DOMAIN_ID, domain);
@@ -393,15 +370,14 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean addUsersToGroup(String domainId, List<String> userIds, String groupId)
-            throws SharingRegistryException, TException {
+        public boolean addUsersToGroup(String domainId, List<String> userIds, String groupId)
+            throws SharingRegistryException {
         try {
             for (int i = 0; i < userIds.size(); i++) {
-                GroupMembership groupMembership = new GroupMembership();
+                GroupMembershipEntity groupMembership = new GroupMembershipEntity();
                 groupMembership.setParentId(groupId);
                 groupMembership.setChildId(userIds.get(i));
-                groupMembership.setChildType(GroupChildType.USER);
+                groupMembership.setChildType(GroupChildType.USER.name());
                 groupMembership.setDomainId(domainId);
                 groupMembership.setCreatedTime(System.currentTimeMillis());
                 groupMembership.setUpdatedTime(System.currentTimeMillis());
@@ -414,9 +390,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean removeUsersFromGroup(String domainId, List<String> userIds, String groupId)
-            throws SharingRegistryException, TException {
+        public boolean removeUsersFromGroup(String domainId, List<String> userIds, String groupId)
+            throws SharingRegistryException {
         try {
             for (String userId : userIds) {
                 if (hasOwnerAccess(domainId, groupId, userId)) {
@@ -439,11 +414,10 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean transferGroupOwnership(String domainId, String groupId, String newOwnerId)
-            throws SharingRegistryException, TException {
+        public boolean transferGroupOwnership(String domainId, String groupId, String newOwnerId)
+            throws SharingRegistryException {
         try {
-            List<User> groupUser = getGroupMembersOfTypeUser(domainId, groupId, 0, -1);
+            List<UserEntity> groupUser = getGroupMembersOfTypeUser(domainId, groupId, 0, -1);
             if (!isUserBelongsToGroup(groupUser, newOwnerId)) {
                 throw new SharingRegistryException("New group owner is not part of the group");
             }
@@ -459,11 +433,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(groupId);
             userGroupPK.setDomainId(domainId);
-            UserGroup userGroup = (new UserGroupRepository()).get(userGroupPK);
-            UserGroup newUserGroup = new UserGroup();
+            UserGroupEntity userGroup = (new UserGroupRepository()).get(userGroupPK);
+            UserGroupEntity newUserGroup = new UserGroupEntity();
             newUserGroup.setUpdatedTime(System.currentTimeMillis());
             newUserGroup.setOwnerId(newOwnerId);
-            newUserGroup.setGroupCardinality(GroupCardinality.MULTI_USER);
+            newUserGroup.setGroupCardinality(GroupCardinality.MULTI_USER.name());
             newUserGroup.setCreatedTime(userGroup.getCreatedTime());
             newUserGroup = getUpdatedObject(userGroup, newUserGroup);
 
@@ -476,8 +450,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    private boolean isUserBelongsToGroup(List<User> groupUser, String newOwnerId) {
-        for (User user : groupUser) {
+    private boolean isUserBelongsToGroup(List<UserEntity> groupUser, String newOwnerId) {
+        for (UserEntity user : groupUser) {
             if (user.getUserId().equals(newOwnerId)) {
                 return true;
             }
@@ -485,11 +459,10 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         return false;
     }
 
-    @Override
-    public boolean addGroupAdmins(String domainId, String groupId, List<String> adminIds)
-            throws SharingRegistryException, TException {
+        public boolean addGroupAdmins(String domainId, String groupId, List<String> adminIds)
+            throws SharingRegistryException {
         try {
-            List<User> groupUser = getGroupMembersOfTypeUser(domainId, groupId, 0, -1);
+            List<UserEntity> groupUser = getGroupMembersOfTypeUser(domainId, groupId, 0, -1);
 
             for (String adminId : adminIds) {
                 if (!isUserBelongsToGroup(groupUser, adminId)) {
@@ -504,7 +477,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
                 if ((new GroupAdminRepository()).get(groupAdminPK) != null)
                     throw new DuplicateEntryException("User already an admin for the group");
 
-                GroupAdmin admin = new GroupAdmin();
+                GroupAdminEntity admin = new GroupAdminEntity();
                 admin.setAdminId(adminId);
                 admin.setDomainId(domainId);
                 admin.setGroupId(groupId);
@@ -517,9 +490,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean removeGroupAdmins(String domainId, String groupId, List<String> adminIds)
-            throws SharingRegistryException, TException {
+        public boolean removeGroupAdmins(String domainId, String groupId, List<String> adminIds)
+            throws SharingRegistryException {
         try {
             for (String adminId : adminIds) {
                 GroupAdminPK groupAdminPK = new GroupAdminPK();
@@ -535,9 +507,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean hasAdminAccess(String domainId, String groupId, String adminId)
-            throws SharingRegistryException, TException {
+        public boolean hasAdminAccess(String domainId, String groupId, String adminId)
+            throws SharingRegistryException {
         try {
             GroupAdminPK groupAdminPK = new GroupAdminPK();
             groupAdminPK.setGroupId(groupId);
@@ -552,14 +523,13 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean hasOwnerAccess(String domainId, String groupId, String ownerId)
-            throws SharingRegistryException, TException {
+        public boolean hasOwnerAccess(String domainId, String groupId, String ownerId)
+            throws SharingRegistryException {
         try {
             UserGroupPK userGroupPK = new UserGroupPK();
             userGroupPK.setGroupId(groupId);
             userGroupPK.setDomainId(domainId);
-            UserGroup getGroup = (new UserGroupRepository()).get(userGroupPK);
+            UserGroupEntity getGroup = (new UserGroupRepository()).get(userGroupPK);
 
             if (getGroup.getOwnerId().equals(ownerId)) return true;
             return false;
@@ -569,12 +539,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<User> getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit)
-            throws SharingRegistryException, TException {
+        public List<UserEntity> getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit)
+            throws SharingRegistryException {
         try {
             // TODO limit offset
-            List<User> groupMemberUsers = (new GroupMembershipRepository()).getAllChildUsers(domainId, groupId);
+            List<UserEntity> groupMemberUsers = (new GroupMembershipRepository()).getAllChildUsers(domainId, groupId);
             return groupMemberUsers;
         } catch (Throwable ex) {
             logger.error(ex.getMessage(), ex);
@@ -582,12 +551,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<UserGroup> getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit)
-            throws SharingRegistryException, TException {
+        public List<UserGroupEntity> getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit)
+            throws SharingRegistryException {
         try {
             // TODO limit offset
-            List<UserGroup> groupMemberGroups = (new GroupMembershipRepository()).getAllChildGroups(domainId, groupId);
+            List<UserGroupEntity> groupMemberGroups = (new GroupMembershipRepository()).getAllChildGroups(domainId, groupId);
             return groupMemberGroups;
         } catch (Throwable ex) {
             logger.error(ex.getMessage(), ex);
@@ -595,16 +563,15 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId)
-            throws SharingRegistryException, TException {
+        public boolean addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId)
+            throws SharingRegistryException {
         try {
             for (String childId : childIds) {
                 // Todo check for cyclic dependencies
-                GroupMembership groupMembership = new GroupMembership();
+                GroupMembershipEntity groupMembership = new GroupMembershipEntity();
                 groupMembership.setParentId(groupId);
                 groupMembership.setChildId(childId);
-                groupMembership.setChildType(GroupChildType.GROUP);
+                groupMembership.setChildType(GroupChildType.GROUP.name());
                 groupMembership.setDomainId(domainId);
                 groupMembership.setCreatedTime(System.currentTimeMillis());
                 groupMembership.setUpdatedTime(System.currentTimeMillis());
@@ -617,9 +584,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean removeChildGroupFromParentGroup(String domainId, String childId, String groupId)
-            throws SharingRegistryException, TException {
+        public boolean removeChildGroupFromParentGroup(String domainId, String childId, String groupId)
+            throws SharingRegistryException {
         try {
             GroupMembershipPK groupMembershipPK = new GroupMembershipPK();
             groupMembershipPK.setParentId(groupId);
@@ -633,9 +599,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<UserGroup> getAllMemberGroupsForUser(String domainId, String userId)
-            throws SharingRegistryException, TException {
+        public List<UserGroupEntity> getAllMemberGroupsForUser(String domainId, String userId)
+            throws SharingRegistryException {
         try {
             GroupMembershipRepository groupMembershipRepository = new GroupMembershipRepository();
             return groupMembershipRepository.getAllMemberGroupsForUser(domainId, userId);
@@ -649,9 +614,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      * * EntityType Operations
      * *
      */
-    @Override
-    public String createEntityType(EntityType entityType)
-            throws SharingRegistryException, DuplicateEntryException, TException {
+        public String createEntityType(EntityTypeEntity entityType)
+            throws SharingRegistryException, DuplicateEntryException {
         try {
             EntityTypePK entityTypePK = new EntityTypePK();
             entityTypePK.setDomainId(entityType.getDomainId());
@@ -669,14 +633,13 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean updateEntityType(EntityType entityType) throws SharingRegistryException, TException {
+        public boolean updateEntityType(EntityTypeEntity entityType) throws SharingRegistryException {
         try {
             entityType.setUpdatedTime(System.currentTimeMillis());
             EntityTypePK entityTypePK = new EntityTypePK();
             entityTypePK.setDomainId(entityType.getDomainId());
             entityTypePK.setEntityTypeId(entityType.getEntityTypeId());
-            EntityType oldEntityType = (new EntityTypeRepository()).get(entityTypePK);
+            EntityTypeEntity oldEntityType = (new EntityTypeRepository()).get(entityTypePK);
             entityType.setCreatedTime(oldEntityType.getCreatedTime());
             entityType = getUpdatedObject(oldEntityType, entityType);
             (new EntityTypeRepository()).update(entityType);
@@ -692,9 +655,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      *
      * @param entityTypeId
      */
-    @Override
-    public boolean isEntityTypeExists(String domainId, String entityTypeId)
-            throws SharingRegistryException, TException {
+        public boolean isEntityTypeExists(String domainId, String entityTypeId)
+            throws SharingRegistryException {
         try {
             EntityTypePK entityTypePK = new EntityTypePK();
             entityTypePK.setDomainId(domainId);
@@ -706,8 +668,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean deleteEntityType(String domainId, String entityTypeId) throws SharingRegistryException, TException {
+        public boolean deleteEntityType(String domainId, String entityTypeId) throws SharingRegistryException {
         try {
             EntityTypePK entityTypePK = new EntityTypePK();
             entityTypePK.setDomainId(domainId);
@@ -720,8 +681,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public EntityType getEntityType(String domainId, String entityTypeId) throws SharingRegistryException, TException {
+        public EntityTypeEntity getEntityType(String domainId, String entityTypeId) throws SharingRegistryException {
         try {
             EntityTypePK entityTypePK = new EntityTypePK();
             entityTypePK.setDomainId(domainId);
@@ -733,8 +693,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<EntityType> getEntityTypes(String domain, int offset, int limit) throws TException {
+        public List<EntityTypeEntity> getEntityTypes(String domain, int offset, int limit) throws SharingRegistryException {
         try {
             HashMap<String, String> filters = new HashMap<>();
             filters.put(DBConstants.EntityTypeTable.DOMAIN_ID, domain);
@@ -749,9 +708,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      * * Permission Operations
      * *
      */
-    @Override
-    public String createPermissionType(PermissionType permissionType)
-            throws SharingRegistryException, DuplicateEntryException, TException {
+        public String createPermissionType(PermissionTypeEntity permissionType)
+            throws SharingRegistryException, DuplicateEntryException {
         try {
             PermissionTypePK permissionTypePK = new PermissionTypePK();
             permissionTypePK.setDomainId(permissionType.getDomainId());
@@ -768,14 +726,13 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean updatePermissionType(PermissionType permissionType) throws SharingRegistryException, TException {
+        public boolean updatePermissionType(PermissionTypeEntity permissionType) throws SharingRegistryException {
         try {
             permissionType.setUpdatedTime(System.currentTimeMillis());
             PermissionTypePK permissionTypePK = new PermissionTypePK();
             permissionTypePK.setDomainId(permissionType.getDomainId());
             permissionTypePK.setPermissionTypeId(permissionType.getPermissionTypeId());
-            PermissionType oldPermissionType = (new PermissionTypeRepository()).get(permissionTypePK);
+            PermissionTypeEntity oldPermissionType = (new PermissionTypeRepository()).get(permissionTypePK);
             permissionType = getUpdatedObject(oldPermissionType, permissionType);
             (new PermissionTypeRepository()).update(permissionType);
             return true;
@@ -790,9 +747,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      *
      * @param permissionId
      */
-    @Override
-    public boolean isPermissionExists(String domainId, String permissionId)
-            throws SharingRegistryException, TException {
+        public boolean isPermissionExists(String domainId, String permissionId)
+            throws SharingRegistryException {
         try {
             PermissionTypePK permissionTypePK = new PermissionTypePK();
             permissionTypePK.setDomainId(domainId);
@@ -804,9 +760,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean deletePermissionType(String domainId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public boolean deletePermissionType(String domainId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             PermissionTypePK permissionTypePK = new PermissionTypePK();
             permissionTypePK.setDomainId(domainId);
@@ -819,9 +774,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public PermissionType getPermissionType(String domainId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public PermissionTypeEntity getPermissionType(String domainId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             PermissionTypePK permissionTypePK = new PermissionTypePK();
             permissionTypePK.setDomainId(domainId);
@@ -833,9 +787,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<PermissionType> getPermissionTypes(String domain, int offset, int limit)
-            throws SharingRegistryException, TException {
+        public List<PermissionTypeEntity> getPermissionTypes(String domain, int offset, int limit)
+            throws SharingRegistryException {
         try {
             HashMap<String, String> filters = new HashMap<>();
             filters.put(DBConstants.PermissionTypeTable.DOMAIN_ID, domain);
@@ -847,24 +800,23 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
     }
 
     /**
-     * * Entity Operations
+     * * EntityEntity Operations
      * *
      */
-    @Override
-    public String createEntity(Entity entity) throws SharingRegistryException, DuplicateEntryException, TException {
+        public String createEntity(EntityEntity entity) throws SharingRegistryException, DuplicateEntryException {
         try {
             EntityPK entityPK = new EntityPK();
             entityPK.setDomainId(entity.getDomainId());
             entityPK.setEntityId(entity.getEntityId());
             if ((new EntityRepository()).get(entityPK) != null)
-                throw new DuplicateEntryException("There exist Entity with given Entity id");
+                throw new DuplicateEntryException("There exist EntityEntity with given EntityEntity id");
 
             UserPK userPK = new UserPK();
             userPK.setDomainId(entity.getDomainId());
             userPK.setUserId(entity.getOwnerId());
             if (!(new UserRepository()).isExists(userPK)) {
                 // Todo this is for Airavata easy integration. Proper thing is to throw an exception here
-                User user = new User();
+                UserEntity user = new UserEntity();
                 user.setUserId(entity.getOwnerId());
                 user.setDomainId(entity.getDomainId());
                 user.setUserName(user.getUserId().split("@")[0]);
@@ -874,18 +826,18 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             entity.setCreatedTime(System.currentTimeMillis());
             entity.setUpdatedTime(System.currentTimeMillis());
 
-            if (entity.getOriginalEntityCreationTime() == 0) {
+            if (entity.getOriginalEntityCreationTime() == null || entity.getOriginalEntityCreationTime() == 0) {
                 entity.setOriginalEntityCreationTime(entity.getCreatedTime());
             }
             (new EntityRepository()).create(entity);
 
             // Assigning global permission for the owner
-            Sharing newSharing = new Sharing();
+            SharingEntity newSharing = new SharingEntity();
             newSharing.setPermissionTypeId(
                     (new PermissionTypeRepository()).getOwnerPermissionTypeIdForDomain(entity.getDomainId()));
             newSharing.setEntityId(entity.getEntityId());
             newSharing.setGroupId(entity.getOwnerId());
-            newSharing.setSharingType(SharingType.DIRECT_CASCADING);
+            newSharing.setSharingType(SharingType.DIRECT_CASCADING.name());
             newSharing.setInheritedParentId(entity.getEntityId());
             newSharing.setDomainId(entity.getDomainId());
             newSharing.setCreatedTime(System.currentTimeMillis());
@@ -901,23 +853,22 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             return entity.getEntityId();
         } catch (Throwable ex) {
             logger.error(ex.getMessage(), ex);
-            SharingRegistryException sharingRegistryException = new SharingRegistryException();
-            sharingRegistryException.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-            throw sharingRegistryException;
+            
+            throw new SharingRegistryException(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
         }
     }
 
-    private void addCascadingPermissionsForEntity(Entity entity) throws SharingRegistryException {
-        Sharing newSharing;
-        List<Sharing> sharings = (new SharingRepository())
+    private void addCascadingPermissionsForEntity(EntityEntity entity) throws SharingRegistryException {
+        SharingEntity newSharing;
+        List<SharingEntity> sharings = (new SharingRepository())
                 .getCascadingPermissionsForEntity(entity.getDomainId(), entity.getParentEntityId());
-        for (Sharing sharing : sharings) {
-            newSharing = new Sharing();
+        for (SharingEntity sharing : sharings) {
+            newSharing = new SharingEntity();
             newSharing.setPermissionTypeId(sharing.getPermissionTypeId());
             newSharing.setEntityId(entity.getEntityId());
             newSharing.setGroupId(sharing.getGroupId());
             newSharing.setInheritedParentId(sharing.getInheritedParentId());
-            newSharing.setSharingType(SharingType.INDIRECT_CASCADING);
+            newSharing.setSharingType(SharingType.INDIRECT_CASCADING.name());
             newSharing.setDomainId(entity.getDomainId());
             newSharing.setCreatedTime(System.currentTimeMillis());
             newSharing.setUpdatedTime(System.currentTimeMillis());
@@ -926,15 +877,14 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean updateEntity(Entity entity) throws SharingRegistryException, TException {
+        public boolean updateEntity(EntityEntity entity) throws SharingRegistryException {
         try {
             // TODO Check for permission changes
             entity.setUpdatedTime(System.currentTimeMillis());
             EntityPK entityPK = new EntityPK();
             entityPK.setDomainId(entity.getDomainId());
             entityPK.setEntityId(entity.getEntityId());
-            Entity oldEntity = (new EntityRepository()).get(entityPK);
+            EntityEntity oldEntity = (new EntityRepository()).get(entityPK);
             entity.setCreatedTime(oldEntity.getCreatedTime());
             // check if parent entity changed and re-add inherited permissions
             if (!Objects.equals(oldEntity.getParentEntityId(), entity.getParentEntityId())) {
@@ -957,7 +907,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
                 }
             }
             entity = getUpdatedObject(oldEntity, entity);
-            entity.setSharedCount((new SharingRepository()).getSharedCount(entity.getDomainId(), entity.getEntityId()));
+            entity.setSharedCount((long) (new SharingRepository()).getSharedCount(entity.getDomainId(), entity.getEntityId()));
             (new EntityRepository()).update(entity);
             return true;
         } catch (Throwable ex) {
@@ -967,12 +917,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
     }
 
     /**
-     * <p>API method to check Entity Exists</p>
+     * <p>API method to check EntityEntity Exists</p>
      *
      * @param entityId
      */
-    @Override
-    public boolean isEntityExists(String domainId, String entityId) throws SharingRegistryException, TException {
+        public boolean isEntityExists(String domainId, String entityId) throws SharingRegistryException {
         try {
             EntityPK entityPK = new EntityPK();
             entityPK.setDomainId(domainId);
@@ -984,8 +933,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean deleteEntity(String domainId, String entityId) throws SharingRegistryException, TException {
+        public boolean deleteEntity(String domainId, String entityId) throws SharingRegistryException {
         try {
             // TODO Check for permission changes
             EntityPK entityPK = new EntityPK();
@@ -999,8 +947,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public Entity getEntity(String domainId, String entityId) throws SharingRegistryException, TException {
+        public EntityEntity getEntity(String domainId, String entityId) throws SharingRegistryException {
         try {
             EntityPK entityPK = new EntityPK();
             entityPK.setDomainId(domainId);
@@ -1012,10 +959,9 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<Entity> searchEntities(
+        public List<EntityEntity> searchEntities(
             String domainId, String userId, List<SearchCriteria> filters, int offset, int limit)
-            throws SharingRegistryException, TException {
+            throws SharingRegistryException {
         try {
             List<String> groupIds = new ArrayList<>();
             groupIds.add(userId);
@@ -1029,9 +975,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<User> getListOfSharedUsers(String domainId, String entityId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public List<UserEntity> getListOfSharedUsers(String domainId, String entityId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             return (new UserRepository()).getAccessibleUsers(domainId, entityId, permissionTypeId);
         } catch (Throwable ex) {
@@ -1040,22 +985,19 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<User> getListOfDirectlySharedUsers(String domainId, String entityId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public List<UserEntity> getListOfDirectlySharedUsers(String domainId, String entityId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             return (new UserRepository()).getDirectlyAccessibleUsers(domainId, entityId, permissionTypeId);
         } catch (Throwable ex) {
             logger.error(ex.getMessage(), ex);
-            SharingRegistryException sharingRegistryException = new SharingRegistryException();
-            sharingRegistryException.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-            throw sharingRegistryException;
+            
+            throw new SharingRegistryException(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
         }
     }
 
-    @Override
-    public List<UserGroup> getListOfSharedGroups(String domainId, String entityId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public List<UserGroupEntity> getListOfSharedGroups(String domainId, String entityId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             return (new UserGroupRepository()).getAccessibleGroups(domainId, entityId, permissionTypeId);
         } catch (Throwable ex) {
@@ -1064,21 +1006,19 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public List<UserGroup> getListOfDirectlySharedGroups(String domainId, String entityId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public List<UserGroupEntity> getListOfDirectlySharedGroups(String domainId, String entityId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             return (new UserGroupRepository()).getDirectlyAccessibleGroups(domainId, entityId, permissionTypeId);
         } catch (Throwable ex) {
             logger.error(ex.getMessage(), ex);
-            SharingRegistryException sharingRegistryException = new SharingRegistryException();
-            sharingRegistryException.setMessage(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
-            throw sharingRegistryException;
+            
+            throw new SharingRegistryException(ex.getMessage() + " Stack trace:" + ExceptionUtils.getStackTrace(ex));
         }
     }
 
     /**
-     * Sharing Entity with Users and Groups
+     * Sharing EntityEntity with Users and Groups
      * @param domainId
      * @param entityId
      * @param userList
@@ -1086,12 +1026,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
      * @param cascadePermission
      * @return
      * @throws SharingRegistryException
-     * @throws TException
+     * @throws SharingRegistryException
      */
-    @Override
-    public boolean shareEntityWithUsers(
+        public boolean shareEntityWithUsers(
             String domainId, String entityId, List<String> userList, String permissionTypeId, boolean cascadePermission)
-            throws SharingRegistryException, TException {
+            throws SharingRegistryException {
         try {
             return shareEntity(domainId, entityId, userList, permissionTypeId, cascadePermission);
         } catch (Throwable ex) {
@@ -1100,14 +1039,13 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean shareEntityWithGroups(
+        public boolean shareEntityWithGroups(
             String domainId,
             String entityId,
             List<String> groupList,
             String permissionTypeId,
             boolean cascadePermission)
-            throws SharingRegistryException, TException {
+            throws SharingRegistryException {
         try {
             return shareEntity(domainId, entityId, groupList, permissionTypeId, cascadePermission);
         } catch (Throwable ex) {
@@ -1122,27 +1060,27 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             List<String> groupOrUserList,
             String permissionTypeId,
             boolean cascadePermission)
-            throws SharingRegistryException, TException {
+            throws SharingRegistryException {
         try {
             if (permissionTypeId.equals((new PermissionTypeRepository()).getOwnerPermissionTypeIdForDomain(domainId))) {
                 throw new SharingRegistryException(OWNER_PERMISSION_NAME + " permission cannot be assigned or removed");
             }
 
-            List<Sharing> sharings = new ArrayList<>();
+            List<SharingEntity> sharings = new ArrayList<>();
 
             // Adding permission for the specified users/groups for the specified entity
-            LinkedList<Entity> temp = new LinkedList<>();
+            LinkedList<EntityEntity> temp = new LinkedList<>();
             for (String userId : groupOrUserList) {
-                Sharing sharing = new Sharing();
+                SharingEntity sharing = new SharingEntity();
                 sharing.setPermissionTypeId(permissionTypeId);
                 sharing.setEntityId(entityId);
                 sharing.setGroupId(userId);
                 sharing.setInheritedParentId(entityId);
                 sharing.setDomainId(domainId);
                 if (cascadePermission) {
-                    sharing.setSharingType(SharingType.DIRECT_CASCADING);
+                    sharing.setSharingType(SharingType.DIRECT_CASCADING.name());
                 } else {
-                    sharing.setSharingType(SharingType.DIRECT_NON_CASCADING);
+                    sharing.setSharingType(SharingType.DIRECT_NON_CASCADING.name());
                 }
                 sharing.setCreatedTime(System.currentTimeMillis());
                 sharing.setUpdatedTime(System.currentTimeMillis());
@@ -1155,15 +1093,15 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
                 (new EntityRepository())
                         .getChildEntities(domainId, entityId).stream().forEach(e -> temp.addLast(e));
                 while (temp.size() > 0) {
-                    Entity entity = temp.pop();
+                    EntityEntity entity = temp.pop();
                     String childEntityId = entity.getEntityId();
                     for (String userId : groupOrUserList) {
-                        Sharing sharing = new Sharing();
+                        SharingEntity sharing = new SharingEntity();
                         sharing.setPermissionTypeId(permissionTypeId);
                         sharing.setEntityId(childEntityId);
                         sharing.setGroupId(userId);
                         sharing.setInheritedParentId(entityId);
-                        sharing.setSharingType(SharingType.INDIRECT_CASCADING);
+                        sharing.setSharingType(SharingType.INDIRECT_CASCADING.name());
                         sharing.setInheritedParentId(entityId);
                         sharing.setDomainId(domainId);
                         sharing.setCreatedTime(System.currentTimeMillis());
@@ -1180,8 +1118,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             EntityPK entityPK = new EntityPK();
             entityPK.setDomainId(domainId);
             entityPK.setEntityId(entityId);
-            Entity entity = (new EntityRepository()).get(entityPK);
-            entity.setSharedCount((new SharingRepository()).getSharedCount(domainId, entityId));
+            EntityEntity entity = (new EntityRepository()).get(entityPK);
+            entity.setSharedCount((long) (new SharingRepository()).getSharedCount(domainId, entityId));
             (new EntityRepository()).update(entity);
             return true;
         } catch (Throwable ex) {
@@ -1190,10 +1128,9 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean revokeEntitySharingFromUsers(
+        public boolean revokeEntitySharingFromUsers(
             String domainId, String entityId, List<String> userList, String permissionTypeId)
-            throws SharingRegistryException, TException {
+            throws SharingRegistryException {
         try {
             if (permissionTypeId.equals((new PermissionTypeRepository()).getOwnerPermissionTypeIdForDomain(domainId))) {
                 throw new SharingRegistryException(OWNER_PERMISSION_NAME + " permission cannot be assigned or removed");
@@ -1205,10 +1142,9 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean revokeEntitySharingFromGroups(
+        public boolean revokeEntitySharingFromGroups(
             String domainId, String entityId, List<String> groupList, String permissionTypeId)
-            throws SharingRegistryException, TException {
+            throws SharingRegistryException {
         try {
             if (permissionTypeId.equals((new PermissionTypeRepository()).getOwnerPermissionTypeIdForDomain(domainId))) {
                 throw new SharingRegistryException(OWNER_PERMISSION_NAME + " permission cannot be assigned or removed");
@@ -1220,12 +1156,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
         }
     }
 
-    @Override
-    public boolean userHasAccess(String domainId, String userId, String entityId, String permissionTypeId)
-            throws SharingRegistryException, TException {
+        public boolean userHasAccess(String domainId, String userId, String entityId, String permissionTypeId)
+            throws SharingRegistryException {
         try {
             // check whether the user has permission directly or indirectly
-            List<GroupMembership> parentMemberships =
+            List<GroupMembershipEntity> parentMemberships =
                     (new GroupMembershipRepository()).getAllParentMembershipsForChild(domainId, userId);
             List<String> groupIds = new ArrayList<>();
             parentMemberships.stream().forEach(pm -> groupIds.add(pm.getParentId()));
@@ -1265,11 +1200,11 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             }
 
             // revoking permission from inheritance
-            List<Sharing> temp = new ArrayList<>();
+            List<SharingEntity> temp = new ArrayList<>();
             (new SharingRepository())
                     .getIndirectSharedChildren(domainId, entityId, permissionTypeId).stream()
                             .forEach(s -> temp.add(s));
-            for (Sharing sharing : temp) {
+            for (SharingEntity sharing : temp) {
                 String childEntityId = sharing.getEntityId();
                 for (String groupId : groupOrUserList) {
                     SharingPK sharingPK = new SharingPK();
@@ -1286,8 +1221,8 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac
             EntityPK entityPK = new EntityPK();
             entityPK.setDomainId(domainId);
             entityPK.setEntityId(entityId);
-            Entity entity = (new EntityRepository()).get(entityPK);
-            entity.setSharedCount((new SharingRepository()).getSharedCount(domainId, entityId));
+            EntityEntity entity = (new EntityRepository()).get(entityPK);
+            entity.setSharedCount((long) (new SharingRepository()).getSharedCount(domainId, entityId));
             (new EntityRepository()).update(entity);
             return true;
         } catch (Throwable ex) {
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventHandler.java b/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventHandler.java
index b5097bcf81..a3fca954bb 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventHandler.java
@@ -30,14 +30,8 @@ import org.apache.airavata.model.group.proto.ResourceType;
 import org.apache.airavata.model.user.proto.UserProfile;
 import org.apache.airavata.model.workspace.proto.Gateway;
 import org.apache.airavata.model.workspace.proto.Project;
-import org.apache.airavata.sharing.registry.models.Domain;
-import org.apache.airavata.sharing.registry.models.DuplicateEntryException;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.PermissionType;
-import org.apache.airavata.sharing.registry.models.User;
-import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService;
+import org.apache.airavata.sharing.model.*;
 import org.apache.airavata.sharing.util.ThriftDataModelConversion;
-import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,9 +42,9 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
     private static final Logger log = LoggerFactory.getLogger(SharingServiceDBEventHandler.class);
 
-    private final SharingRegistryService.Iface sharingRegistryClient;
+    private final SharingRegistryServerHandler sharingRegistryClient;
 
-    SharingServiceDBEventHandler() throws ApplicationSettingsException, TException {
+    SharingServiceDBEventHandler() throws ApplicationSettingsException, SharingRegistryException {
         log.info("Initializing sharing registry handler.....");
         sharingRegistryClient = new SharingRegistryServerHandler();
     }
@@ -81,7 +75,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                         .getPublisher()
                                         .getPublisherContext()
                                         .getEntityDataModel());
-                        User user = ThriftDataModelConversion.getUser(userProfile);
+                        UserEntity user = ThriftDataModelConversion.getUser(userProfile);
 
                         switch (dBEventMessageContext
                                 .getPublisher()
@@ -134,17 +128,10 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                 if (sharingRegistryClient.isDomainExists(gateway.getGatewayId())) {
                                     break;
                                 }
-                                /*
-                                Following set of DB operations should happen in a transaction
-                                As these are thrift calls we cannot enforce this restriction
-                                If something goes wrong, message would get queued again and try to create
-                                 DB entities which are already present. We catch DuplicateEntryException and
-                                 log as a warning to handle such scenarios and move ahead.
-                                 */
 
                                 log.info("Creating domain. Id : " + gateway.getGatewayId());
 
-                                Domain domain = new Domain();
+                                DomainEntity domain = new DomainEntity();
                                 domain.setDomainId(gateway.getGatewayId());
                                 domain.setName(gateway.getGatewayName());
                                 domain.setDescription("Domain entry for " + domain.getName());
@@ -160,8 +147,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
                                 // Creating Entity Types for each domain
                                 log.info("Creating entity type. Id : " + domain.getDomainId() + ":PROJECT");
-                                org.apache.airavata.sharing.registry.models.EntityType entityType =
-                                        new org.apache.airavata.sharing.registry.models.EntityType();
+                                EntityTypeEntity entityType = new EntityTypeEntity();
                                 entityType.setEntityTypeId(domain.getDomainId() + ":PROJECT");
                                 entityType.setDomainId(domain.getDomainId());
                                 entityType.setName("PROJECT");
@@ -178,7 +164,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                 }
 
                                 log.info("Creating entity type. Id : " + domain.getDomainId() + ":EXPERIMENT");
-                                entityType = new org.apache.airavata.sharing.registry.models.EntityType();
+                                entityType = new EntityTypeEntity();
                                 entityType.setEntityTypeId(domain.getDomainId() + ":EXPERIMENT");
                                 entityType.setDomainId(domain.getDomainId());
                                 entityType.setName("EXPERIMENT");
@@ -195,7 +181,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                 }
 
                                 log.info("Creating entity type. Id : " + domain.getDomainId() + ":FILE");
-                                entityType = new org.apache.airavata.sharing.registry.models.EntityType();
+                                entityType = new EntityTypeEntity();
                                 entityType.setEntityTypeId(domain.getDomainId() + ":FILE");
                                 entityType.setDomainId(domain.getDomainId());
                                 entityType.setName("FILE");
@@ -213,7 +199,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
                                 log.info("Creating entity type. Id : " + domain.getDomainId() + ":"
                                         + ResourceType.APPLICATION_DEPLOYMENT);
-                                entityType = new org.apache.airavata.sharing.registry.models.EntityType();
+                                entityType = new EntityTypeEntity();
                                 entityType.setEntityTypeId(
                                         domain.getDomainId() + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
                                 entityType.setDomainId(domain.getDomainId());
@@ -223,7 +209,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
                                 log.info("Creating entity type. Id : " + domain.getDomainId() + ":"
                                         + ResourceType.GROUP_RESOURCE_PROFILE);
-                                entityType = new org.apache.airavata.sharing.registry.models.EntityType();
+                                entityType = new EntityTypeEntity();
                                 entityType.setEntityTypeId(
                                         domain.getDomainId() + ":" + ResourceType.GROUP_RESOURCE_PROFILE.name());
                                 entityType.setDomainId(domain.getDomainId());
@@ -233,7 +219,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
                                 log.info("Creating entity type. Id : " + domain.getDomainId() + ":"
                                         + ResourceType.CREDENTIAL_TOKEN);
-                                entityType = new org.apache.airavata.sharing.registry.models.EntityType();
+                                entityType = new EntityTypeEntity();
                                 entityType.setEntityTypeId(
                                         domain.getDomainId() + ":" + ResourceType.CREDENTIAL_TOKEN.name());
                                 entityType.setDomainId(domain.getDomainId());
@@ -243,7 +229,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
                                 // Creating Permission Types for each domain
                                 log.info("Creating Permission Type. Id : " + domain.getDomainId() + ":READ");
-                                PermissionType permissionType = new PermissionType();
+                                PermissionTypeEntity permissionType = new PermissionTypeEntity();
                                 permissionType.setPermissionTypeId(domain.getDomainId() + ":READ");
                                 permissionType.setDomainId(domain.getDomainId());
                                 permissionType.setName("READ");
@@ -260,7 +246,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                 }
 
                                 log.info("Creating Permission Type. Id : " + domain.getDomainId() + ":WRITE");
-                                permissionType = new PermissionType();
+                                permissionType = new PermissionTypeEntity();
                                 permissionType.setPermissionTypeId(domain.getDomainId() + ":WRITE");
                                 permissionType.setDomainId(domain.getDomainId());
                                 permissionType.setName("WRITE");
@@ -277,7 +263,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                 }
 
                                 log.info("Creating Permission Type. Id : " + domain.getDomainId() + ":MANAGE_SHARING");
-                                permissionType = new PermissionType();
+                                permissionType = new PermissionTypeEntity();
                                 permissionType.setPermissionTypeId(domain.getDomainId() + ":MANAGE_SHARING");
                                 permissionType.setDomainId(domain.getDomainId());
                                 permissionType.setName("MANAGE_SHARING");
@@ -316,7 +302,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
                                 .getCrudType()) {
                             case CREATE:
                             case UPDATE:
-                                Entity entity = new Entity();
+                                EntityEntity entity = new EntityEntity();
                                 entity.setEntityId(entityId);
                                 entity.setDomainId(domainId);
                                 entity.setEntityTypeId(domainId + ":" + ResourceType.PROJECT.name());
@@ -367,7 +353,7 @@ public class SharingServiceDBEventHandler implements MessageHandler {
 
         } catch (InvalidProtocolBufferException e) {
             log.error("Error parsing proto message", e);
-        } catch (TException e) {
+        } catch (SharingRegistryException e) {
             log.error("Error processing message.", e);
         } catch (ApplicationSettingsException e) {
             log.error("Error fetching application settings.", e);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventMessagingFactory.java b/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventMessagingFactory.java
index 6403ed5bc6..7a841b831f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventMessagingFactory.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/handler/SharingServiceDBEventMessagingFactory.java
@@ -32,7 +32,6 @@ import org.apache.airavata.model.dbevent.DBEventMessageContext;
 import org.apache.airavata.model.dbevent.DBEventSubscriber;
 import org.apache.airavata.model.dbevent.DBEventType;
 import org.apache.airavata.model.messaging.event.proto.MessageType;
-import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,13 +65,17 @@ public class SharingServiceDBEventMessagingFactory {
         return dbEventPublisher;
     }
 
-    public static Subscriber getDBEventSubscriber() throws AiravataException, TException {
+    public static Subscriber getDBEventSubscriber() throws AiravataException {
         if (null == sharingServiceDBEventSubscriber) {
             synchronized (SharingServiceDBEventMessagingFactory.class) {
                 if (null == sharingServiceDBEventSubscriber) {
                     log.info("Creating DB Event publisher.....");
-                    sharingServiceDBEventSubscriber = MessagingFactory.getDBEventSubscriber(
-                            new SharingServiceDBEventHandler(), DBEventService.SHARING.toString());
+                    try {
+                        sharingServiceDBEventSubscriber = MessagingFactory.getDBEventSubscriber(
+                                new SharingServiceDBEventHandler(), DBEventService.SHARING.toString());
+                    } catch (org.apache.airavata.sharing.model.SharingRegistryException e) {
+                        throw new AiravataException("Failed to create SharingServiceDBEventHandler", e);
+                    }
                     log.info("DB Event publisher created");
                 }
             }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/mapper/SharingMapper.java b/airavata-api/src/main/java/org/apache/airavata/sharing/mapper/SharingMapper.java
deleted file mode 100644
index cb2eddc36a..0000000000
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/mapper/SharingMapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-package org.apache.airavata.sharing.mapper;
-
-import org.apache.airavata.sharing.model.*;
-import org.apache.airavata.sharing.registry.models.Domain;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntityType;
-import org.apache.airavata.sharing.registry.models.GroupAdmin;
-import org.apache.airavata.sharing.registry.models.GroupMembership;
-import org.apache.airavata.sharing.registry.models.PermissionType;
-import org.apache.airavata.sharing.registry.models.Sharing;
-import org.apache.airavata.sharing.registry.models.User;
-import org.apache.airavata.sharing.registry.models.UserGroup;
-import org.mapstruct.Mapper;
-import org.mapstruct.ReportingPolicy;
-import org.mapstruct.factory.Mappers;
-
-@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
-public interface SharingMapper {
-
-    SharingMapper INSTANCE = Mappers.getMapper(SharingMapper.class);
-
-    // --- Domain ---
-    Domain domainToModel(DomainEntity entity);
-
-    DomainEntity domainToEntity(Domain model);
-
-    // --- User ---
-    User userToModel(UserEntity entity);
-
-    UserEntity userToEntity(User model);
-
-    // --- UserGroup ---
-    UserGroup userGroupToModel(UserGroupEntity entity);
-
-    UserGroupEntity userGroupToEntity(UserGroup model);
-
-    // --- GroupAdmin ---
-    GroupAdmin groupAdminToModel(GroupAdminEntity entity);
-
-    GroupAdminEntity groupAdminToEntity(GroupAdmin model);
-
-    // --- GroupMembership ---
-    GroupMembership groupMembershipToModel(GroupMembershipEntity entity);
-
-    GroupMembershipEntity groupMembershipToEntity(GroupMembership model);
-
-    // --- EntityType ---
-    EntityType entityTypeToModel(EntityTypeEntity entity);
-
-    EntityTypeEntity entityTypeToEntity(EntityType model);
-
-    // --- Entity ---
-    Entity entityToModel(EntityEntity entity);
-
-    EntityEntity entityToEntity(Entity model);
-
-    // --- PermissionType ---
-    PermissionType permissionTypeToModel(PermissionTypeEntity entity);
-
-    PermissionTypeEntity permissionTypeToEntity(PermissionType model);
-
-    // --- Sharing ---
-    Sharing sharingToModel(SharingEntity entity);
-
-    SharingEntity sharingToEntity(Sharing model);
-}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/DuplicateEntryException.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/DuplicateEntryException.java
new file mode 100644
index 0000000000..4e2643b4f6
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/DuplicateEntryException.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.sharing.model;
+
+/**
+ * Exception thrown when attempting to create a duplicate entry.
+ * Replaces the Thrift-generated exception of the same name.
+ */
+public class DuplicateEntryException extends Exception {
+
+    public DuplicateEntryException(String message) {
+        super(message);
+    }
+
+    public DuplicateEntryException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/EntitySearchField.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/EntitySearchField.java
new file mode 100644
index 0000000000..24566a83cc
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/EntitySearchField.java
@@ -0,0 +1,14 @@
+package org.apache.airavata.sharing.model;
+
+public enum EntitySearchField {
+    NAME,
+    DESCRIPTION,
+    FULL_TEXT,
+    PARRENT_ENTITY_ID,
+    OWNER_ID,
+    PERMISSION_TYPE_ID,
+    CREATED_TIME,
+    UPDATED_TIME,
+    ENTITY_TYPE_ID,
+    SHARED_COUNT
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupCardinality.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupCardinality.java
new file mode 100644
index 0000000000..d330655701
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupCardinality.java
@@ -0,0 +1,6 @@
+package org.apache.airavata.sharing.model;
+
+public enum GroupCardinality {
+    SINGLE_USER,
+    MULTI_USER
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupChildType.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupChildType.java
new file mode 100644
index 0000000000..2f5023cc30
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupChildType.java
@@ -0,0 +1,6 @@
+package org.apache.airavata.sharing.model;
+
+public enum GroupChildType {
+    USER,
+    GROUP
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupType.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupType.java
new file mode 100644
index 0000000000..8cbcd46e94
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/GroupType.java
@@ -0,0 +1,6 @@
+package org.apache.airavata.sharing.model;
+
+public enum GroupType {
+    DOMAIN_LEVEL_GROUP,
+    USER_LEVEL_GROUP
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/SearchCondition.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SearchCondition.java
new file mode 100644
index 0000000000..f1c0b0895b
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SearchCondition.java
@@ -0,0 +1,10 @@
+package org.apache.airavata.sharing.model;
+
+public enum SearchCondition {
+    EQUAL,
+    LIKE,
+    FULL_TEXT_SEARCH,
+    GTE,
+    LTE,
+    NOT
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/SearchCriteria.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SearchCriteria.java
new file mode 100644
index 0000000000..948dfe6c8b
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SearchCriteria.java
@@ -0,0 +1,37 @@
+package org.apache.airavata.sharing.model;
+
+/**
+ * Container for search criteria, replacing the Thrift-generated SearchCriteria.
+ */
+public class SearchCriteria {
+
+    private EntitySearchField searchField;
+    private String value;
+    private SearchCondition searchCondition;
+
+    public SearchCriteria() {}
+
+    public EntitySearchField getSearchField() {
+        return searchField;
+    }
+
+    public void setSearchField(EntitySearchField searchField) {
+        this.searchField = searchField;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public SearchCondition getSearchCondition() {
+        return searchCondition;
+    }
+
+    public void setSearchCondition(SearchCondition searchCondition) {
+        this.searchCondition = searchCondition;
+    }
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/SharingRegistryException.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SharingRegistryException.java
new file mode 100644
index 0000000000..d4522487a3
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SharingRegistryException.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.sharing.model;
+
+/**
+ * Exception thrown by the sharing registry when an operation fails.
+ * Replaces the Thrift-generated exception of the same name.
+ */
+public class SharingRegistryException extends Exception {
+
+    public SharingRegistryException(String message) {
+        super(message);
+    }
+
+    public SharingRegistryException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/model/SharingType.java b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SharingType.java
new file mode 100644
index 0000000000..d775829b6e
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/model/SharingType.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.sharing.model;
+
+public enum SharingType {
+    DIRECT_NON_CASCADING,
+    DIRECT_CASCADING,
+    INDIRECT_CASCADING
+}
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/AbstractRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/AbstractRepository.java
index bde491a48b..7342d23a8d 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/AbstractRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/AbstractRepository.java
@@ -26,52 +26,43 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import org.apache.airavata.common.db.EntityManagerFactoryHolder;
-import org.apache.airavata.sharing.registry.models.SharingRegistryException;
+import org.apache.airavata.sharing.model.SharingRegistryException;
 import org.apache.airavata.sharing.util.Committer;
 import org.apache.airavata.sharing.util.DBConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractRepository<T, E, Id> {
+public abstract class AbstractRepository<E, Id> {
     private static final Logger logger = LoggerFactory.getLogger(AbstractRepository.class);
 
-    private Class<E> dbEntityGenericClass;
+    private Class<E> entityClass;
 
-    public AbstractRepository(Class<T> thriftGenericClass, Class<E> dbEntityGenericClass) {
-        this.dbEntityGenericClass = dbEntityGenericClass;
+    public AbstractRepository(Class<E> entityClass) {
+        this.entityClass = entityClass;
     }
 
-    /** Convert a JPA entity to the Thrift/model object. */
-    protected abstract T toModel(E entity);
-
-    /** Convert a Thrift/model object to a JPA entity. */
-    protected abstract E toEntity(T model);
-
-    public T create(T t) throws SharingRegistryException {
-        return update(t);
+    public E create(E entity) throws SharingRegistryException {
+        return update(entity);
     }
 
-    // FIXME do a bulk insert
-    public List<T> create(List<T> tList) throws SharingRegistryException {
-        return update(tList);
+    public List<E> create(List<E> entities) throws SharingRegistryException {
+        return update(entities);
     }
 
-    public T update(T t) throws SharingRegistryException {
-        E entity = toEntity(t);
+    public E update(E entity) throws SharingRegistryException {
         E persistedCopy = execute(entityManager -> entityManager.merge(entity));
-        return toModel(persistedCopy);
+        return persistedCopy;
     }
 
-    // FIXME do a bulk update
-    public List<T> update(List<T> tList) throws SharingRegistryException {
-        List<T> returnList = new ArrayList<>();
-        for (T temp : tList) returnList.add(update(temp));
+    public List<E> update(List<E> entities) throws SharingRegistryException {
+        List<E> returnList = new ArrayList<>();
+        for (E entity : entities) returnList.add(update(entity));
         return returnList;
     }
 
     public boolean delete(Id id) throws SharingRegistryException {
         execute(entityManager -> {
-            E entity = entityManager.find(dbEntityGenericClass, id);
+            E entity = entityManager.find(entityClass, id);
             entityManager.remove(entity);
             return entity;
         });
@@ -83,32 +74,27 @@ public abstract class AbstractRepository<T, E, Id> {
         return true;
     }
 
-    public T get(Id id) throws SharingRegistryException {
+    public E get(Id id) throws SharingRegistryException {
         EntityManager testEM = EntityManagerFactoryHolder.getTestEntityManager();
         if (testEM != null && testEM.isOpen()) {
             testEM.clear();
-            E entity = testEM.find(dbEntityGenericClass, id);
-            if (entity == null) return null;
-            return toModel(entity);
+            return testEM.find(entityClass, id);
         }
-        return execute(entityManager -> {
-            E entity = entityManager.find(dbEntityGenericClass, id);
-            if (entity == null) return null;
-            return toModel(entity);
-        });
+        return execute(entityManager -> entityManager.find(entityClass, id));
     }
 
     public boolean isExists(Id id) throws SharingRegistryException {
         return get(id) != null;
     }
 
-    public List<T> get(List<Id> idList) throws SharingRegistryException {
-        List<T> returnList = new ArrayList<>();
+    public List<E> get(List<Id> idList) throws SharingRegistryException {
+        List<E> returnList = new ArrayList<>();
         for (Id id : idList) returnList.add(get(id));
         return returnList;
     }
 
-    public List<T> select(Map<String, String> filters, int offset, int limit) throws SharingRegistryException {
+    @SuppressWarnings("unchecked")
+    public List<E> select(Map<String, String> filters, int offset, int limit) throws SharingRegistryException {
         String query = "SELECT DISTINCT p from " + getEntityName() + " as p";
         ArrayList<String> parameters = new ArrayList<>();
         int parameterCount = 1;
@@ -132,12 +118,11 @@ public abstract class AbstractRepository<T, E, Id> {
             }
             return q.setFirstResult(offset).setMaxResults(newLimit).getResultList();
         });
-        List<T> gatewayList = new ArrayList<>();
-        resultSet.stream().forEach(rs -> gatewayList.add(toModel((E) rs)));
-        return gatewayList;
+        return new ArrayList<>(resultSet);
     }
 
-    public List<T> select(String queryString, Map<String, Object> queryParameters, int offset, int limit)
+    @SuppressWarnings("unchecked")
+    public List<E> select(String queryString, Map<String, Object> queryParameters, int offset, int limit)
             throws SharingRegistryException {
         int newLimit = limit < 0 ? DBConstants.SELECT_MAX_ROWS : limit;
         List resultSet = execute(entityManager -> {
@@ -147,9 +132,7 @@ public abstract class AbstractRepository<T, E, Id> {
             }
             return q.setFirstResult(offset).setMaxResults(newLimit).getResultList();
         });
-        List<T> gatewayList = new ArrayList<>();
-        resultSet.stream().forEach(rs -> gatewayList.add(toModel((E) rs)));
-        return gatewayList;
+        return new ArrayList<>(resultSet);
     }
 
     public <R> R execute(Committer<EntityManager, R> committer) throws SharingRegistryException {
@@ -185,10 +168,10 @@ public abstract class AbstractRepository<T, E, Id> {
      * Falls back to the simple class name when no explicit name is set.
      */
     private String getEntityName() {
-        Entity annotation = dbEntityGenericClass.getAnnotation(Entity.class);
+        Entity annotation = entityClass.getAnnotation(Entity.class);
         if (annotation != null && !annotation.name().isEmpty()) {
             return annotation.name();
         }
-        return dbEntityGenericClass.getSimpleName();
+        return entityClass.getSimpleName();
     }
 }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/DomainRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/DomainRepository.java
index 9acf5ac266..f2a2d7c808 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/DomainRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/DomainRepository.java
@@ -19,26 +19,14 @@
 */
 package org.apache.airavata.sharing.repository;
 
-import org.apache.airavata.sharing.mapper.SharingMapper;
 import org.apache.airavata.sharing.model.DomainEntity;
-import org.apache.airavata.sharing.registry.models.Domain;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DomainRepository extends AbstractRepository<Domain, DomainEntity, String> {
+public class DomainRepository extends AbstractRepository<DomainEntity, String> {
     private static final Logger logger = LoggerFactory.getLogger(DomainRepository.class);
 
     public DomainRepository() {
-        super(Domain.class, DomainEntity.class);
-    }
-
-    @Override
-    protected Domain toModel(DomainEntity entity) {
-        return SharingMapper.INSTANCE.domainToModel(entity);
-    }
-
-    @Override
-    protected DomainEntity toEntity(Domain model) {
-        return SharingMapper.INSTANCE.domainToEntity(model);
+        super(DomainEntity.class);
     }
 }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityRepository.java
index ed1a9417da..4b441369e7 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityRepository.java
@@ -20,29 +20,16 @@
 package org.apache.airavata.sharing.repository;
 
 import java.util.*;
-import org.apache.airavata.sharing.mapper.SharingMapper;
-import org.apache.airavata.sharing.model.EntityEntity;
-import org.apache.airavata.sharing.model.EntityPK;
-import org.apache.airavata.sharing.registry.models.*;
+import org.apache.airavata.sharing.model.*;
 import org.apache.airavata.sharing.util.DBConstants;
 
-public class EntityRepository extends AbstractRepository<Entity, EntityEntity, EntityPK> {
+public class EntityRepository extends AbstractRepository<EntityEntity, EntityPK> {
 
     public EntityRepository() {
-        super(Entity.class, EntityEntity.class);
+        super(EntityEntity.class);
     }
 
-    @Override
-    protected Entity toModel(EntityEntity entity) {
-        return SharingMapper.INSTANCE.entityToModel(entity);
-    }
-
-    @Override
-    protected EntityEntity toEntity(Entity model) {
-        return SharingMapper.INSTANCE.entityToEntity(model);
-    }
-
-    public List<Entity> getChildEntities(String domainId, String parentId) throws SharingRegistryException {
+    public List<EntityEntity> getChildEntities(String domainId, String parentId) throws SharingRegistryException {
         HashMap<String, String> filters = new HashMap<>();
         filters.put(DBConstants.EntityTable.DOMAIN_ID, domainId);
         filters.put(DBConstants.EntityTable.PARENT_ENTITY_ID, parentId);
@@ -50,7 +37,8 @@ public class EntityRepository extends AbstractRepository<Entity, EntityEntity, E
     }
 
     // TODO Replace with prepared statements
-    public List<Entity> searchEntities(
+    @SuppressWarnings("unchecked")
+    public List<EntityEntity> searchEntities(
             String domainId, List<String> groupIds, List<SearchCriteria> filters, int offset, int limit)
             throws SharingRegistryException {
         String groupIdString = "'";
@@ -147,12 +135,12 @@ public class EntityRepository extends AbstractRepository<Entity, EntityEntity, E
                 .setFirstResult(offset)
                 .setMaxResults(newLimit)
                 .getResultList());
-        List<Entity> resultSet = new ArrayList<>();
+        List<EntityEntity> resultSet = new ArrayList<>();
 
         HashMap<String, Object> keys = new HashMap<>();
 
         temp.stream().forEach(rs -> {
-            Entity entity = new Entity();
+            EntityEntity entity = new EntityEntity();
             entity.setEntityId((String) (rs[0]));
             entity.setDomainId((String) (rs[1]));
             entity.setEntityTypeId((String) (rs[2]));
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityTypeRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityTypeRepository.java
index fe8001a5e3..7c8a9ca3c7 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityTypeRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/EntityTypeRepository.java
@@ -19,27 +19,15 @@
 */
 package org.apache.airavata.sharing.repository;
 
-import org.apache.airavata.sharing.mapper.SharingMapper;
 import org.apache.airavata.sharing.model.EntityTypeEntity;
 import org.apache.airavata.sharing.model.EntityTypePK;
-import org.apache.airavata.sharing.registry.models.EntityType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class EntityTypeRepository extends AbstractRepository<EntityType, EntityTypeEntity, EntityTypePK> {
+public class EntityTypeRepository extends AbstractRepository<EntityTypeEntity, EntityTypePK> {
     private static final Logger logger = LoggerFactory.getLogger(EntityTypeRepository.class);
 
     public EntityTypeRepository() {
-        super(EntityType.class, EntityTypeEntity.class);
-    }
-
-    @Override
-    protected EntityType toModel(EntityTypeEntity entity) {
-        return SharingMapper.INSTANCE.entityTypeToModel(entity);
-    }
-
-    @Override
-    protected EntityTypeEntity toEntity(EntityType model) {
-        return SharingMapper.INSTANCE.entityTypeToEntity(model);
+        super(EntityTypeEntity.class);
     }
 }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupAdminRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupAdminRepository.java
index 772aa59775..b12443874f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupAdminRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupAdminRepository.java
@@ -19,28 +19,16 @@
 */
 package org.apache.airavata.sharing.repository;
 
-import org.apache.airavata.sharing.mapper.SharingMapper;
 import org.apache.airavata.sharing.model.GroupAdminEntity;
 import org.apache.airavata.sharing.model.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> {
+public class GroupAdminRepository extends AbstractRepository<GroupAdminEntity, GroupAdminPK> {
 
     private static final Logger logger = LoggerFactory.getLogger(GroupAdminRepository.class);
 
     public GroupAdminRepository() {
-        super(GroupAdmin.class, GroupAdminEntity.class);
-    }
-
-    @Override
-    protected GroupAdmin toModel(GroupAdminEntity entity) {
-        return SharingMapper.INSTANCE.groupAdminToModel(entity);
-    }
-
-    @Override
-    protected GroupAdminEntity toEntity(GroupAdmin model) {
-        return SharingMapper.INSTANCE.groupAdminToEntity(model);
+        super(GroupAdminEntity.class);
     }
 }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupMembershipRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupMembershipRepository.java
index 6fbdcd8944..b29dd2f996 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupMembershipRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/GroupMembershipRepository.java
@@ -20,31 +20,17 @@
 package org.apache.airavata.sharing.repository;
 
 import java.util.*;
-import org.apache.airavata.sharing.mapper.SharingMapper;
-import org.apache.airavata.sharing.model.GroupMembershipEntity;
-import org.apache.airavata.sharing.model.GroupMembershipPK;
-import org.apache.airavata.sharing.model.UserGroupEntity;
-import org.apache.airavata.sharing.registry.models.*;
+import org.apache.airavata.sharing.model.*;
 import org.apache.airavata.sharing.util.DBConstants;
 
 public class GroupMembershipRepository
-        extends AbstractRepository<GroupMembership, GroupMembershipEntity, GroupMembershipPK> {
+        extends AbstractRepository<GroupMembershipEntity, GroupMembershipPK> {
 
     public GroupMembershipRepository() {
-        super(GroupMembership.class, GroupMembershipEntity.class);
+        super(GroupMembershipEntity.class);
     }
 
-    @Override
-    protected GroupMembership toModel(GroupMembershipEntity entity) {
-        return SharingMapper.INSTANCE.groupMembershipToModel(entity);
-    }
-
-    @Override
-    protected GroupMembershipEntity toEntity(GroupMembership model) {
-        return SharingMapper.INSTANCE.groupMembershipToEntity(model);
-    }
-
-    public List<User> getAllChildUsers(String domainId, String groupId) throws SharingRegistryException {
+    public List<UserEntity> getAllChildUsers(String domainId, String groupId) throws SharingRegistryException {
         String queryString = "SELECT DISTINCT U FROM " + "SharingUserEntity" + " U, "
                 + GroupMembershipEntity.class.getSimpleName()
                 + " GM WHERE GM." + DBConstants.GroupMembershipTable.CHILD_ID + " = U." + DBConstants.UserTable.USER_ID
@@ -61,11 +47,10 @@ public class GroupMembershipRepository
         queryParameters.put(DBConstants.GroupMembershipTable.PARENT_ID, groupId);
         queryParameters.put(DBConstants.GroupMembershipTable.CHILD_TYPE, GroupChildType.USER.toString());
         UserRepository userRepository = new UserRepository();
-        List<User> users = userRepository.select(queryString, queryParameters, 0, -1);
-        return users;
+        return userRepository.select(queryString, queryParameters, 0, -1);
     }
 
-    public List<UserGroup> getAllChildGroups(String domainId, String groupId) throws SharingRegistryException {
+    public List<UserGroupEntity> getAllChildGroups(String domainId, String groupId) throws SharingRegistryException {
         String queryString = "SELECT DISTINCT G FROM " + UserGroupEntity.class.getSimpleName() + " G, "
                 + GroupMembershipEntity.class.getSimpleName()
                 + " GM WHERE GM." + DBConstants.GroupMembershipTable.CHILD_ID + " = G."
@@ -82,11 +67,10 @@ public class GroupMembershipRepository
         queryParameters.put(DBConstants.GroupMembershipTable.PARENT_ID, groupId);
         queryParameters.put(DBConstants.GroupMembershipTable.CHILD_TYPE, GroupChildType.GROUP.toString());
         UserGroupRepository userGroupRepository = new UserGroupRepository();
-        List<UserGroup> groups = userGroupRepository.select(queryString, queryParameters, 0, -1);
-        return groups;
+        return userGroupRepository.select(queryString, queryParameters, 0, -1);
     }
 
-    public List<UserGroup> getAllMemberGroupsForUser(String domainId, String userId) throws SharingRegistryException {
+    public List<UserGroupEntity> getAllMemberGroupsForUser(String domainId, String userId) throws SharingRegistryException {
         String queryString = "SELECT DISTINCT G FROM " + UserGroupEntity.class.getSimpleName() + " G, "
                 + GroupMembershipEntity.class.getSimpleName()
                 + " GM WHERE GM." + DBConstants.GroupMembershipTable.PARENT_ID + " = G."
@@ -105,20 +89,19 @@ public class GroupMembershipRepository
         queryParameters.put(DBConstants.GroupMembershipTable.CHILD_TYPE, GroupChildType.USER.toString());
         queryParameters.put(DBConstants.UserGroupTable.GROUP_CARDINALITY, GroupCardinality.MULTI_USER.name());
         UserGroupRepository userGroupRepository = new UserGroupRepository();
-        List<UserGroup> groups = userGroupRepository.select(queryString, queryParameters, 0, -1);
-        return groups;
+        return userGroupRepository.select(queryString, queryParameters, 0, -1);
     }
 
-    public List<GroupMembership> getAllParentMembershipsForChild(String domainId, String childId)
+    public List<GroupMembershipEntity> getAllParentMembershipsForChild(String domainId, String childId)
             throws SharingRegistryException {
-        List<GroupMembership> finalParentGroups = new ArrayList<>();
+        List<GroupMembershipEntity> finalParentGroups = new ArrayList<>();
         Map<String, String> filters = new HashMap<>();
         filters.put(DBConstants.GroupMembershipTable.CHILD_ID, childId);
         filters.put(DBConstants.GroupMembershipTable.DOMAIN_ID, domainId);
-        LinkedList<GroupMembership> temp = new LinkedList<>();
+        LinkedList<GroupMembershipEntity> temp = new LinkedList<>();
         select(filters, 0, -1).stream().forEach(m -> temp.addLast(m));
         while (temp.size() > 0) {
-            GroupMembership gm = temp.pop();
+            GroupMembershipEntity gm = temp.pop();
             filters = new HashMap<>();
             filters.put(DBConstants.GroupMembershipTable.CHILD_ID, gm.getParentId());
             filters.put(DBConstants.GroupMembershipTable.DOMAIN_ID, domainId);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/PermissionTypeRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/PermissionTypeRepository.java
index fee082e6ba..5ea4d8bd40 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/PermissionTypeRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/PermissionTypeRepository.java
@@ -22,38 +22,26 @@ package org.apache.airavata.sharing.repository;
 import java.util.HashMap;
 import java.util.List;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.mapper.SharingMapper;
 import org.apache.airavata.sharing.model.PermissionTypeEntity;
 import org.apache.airavata.sharing.model.PermissionTypePK;
-import org.apache.airavata.sharing.registry.models.PermissionType;
-import org.apache.airavata.sharing.registry.models.SharingRegistryException;
+import org.apache.airavata.sharing.model.SharingRegistryException;
 import org.apache.airavata.sharing.util.DBConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class PermissionTypeRepository
-        extends AbstractRepository<PermissionType, PermissionTypeEntity, PermissionTypePK> {
+        extends AbstractRepository<PermissionTypeEntity, PermissionTypePK> {
     private static final Logger logger = LoggerFactory.getLogger(PermissionTypeRepository.class);
 
     public PermissionTypeRepository() {
-        super(PermissionType.class, PermissionTypeEntity.class);
-    }
-
-    @Override
-    protected PermissionType toModel(PermissionTypeEntity entity) {
-        return SharingMapper.INSTANCE.permissionTypeToModel(entity);
-    }
-
-    @Override
-    protected PermissionTypeEntity toEntity(PermissionType model) {
-        return SharingMapper.INSTANCE.permissionTypeToEntity(model);
+        super(PermissionTypeEntity.class);
     }
 
     public String getOwnerPermissionTypeIdForDomain(String domainId) throws SharingRegistryException {
         HashMap<String, String> filters = new HashMap<>();
         filters.put(DBConstants.PermissionTypeTable.DOMAIN_ID, domainId);
         filters.put(DBConstants.PermissionTypeTable.NAME, SharingRegistryServerHandler.OWNER_PERMISSION_NAME);
-        List<PermissionType> permissionTypeList = select(filters, 0, -1);
+        List<PermissionTypeEntity> permissionTypeList = select(filters, 0, -1);
         if (permissionTypeList.size() != 1) {
             throw new SharingRegistryException("GLOBAL Permission inconsistency. Found " + permissionTypeList.size()
                     + " records with " + SharingRegistryServerHandler.OWNER_PERMISSION_NAME + " name");
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/SharingRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/SharingRepository.java
index 2b05a754f0..5554468647 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/SharingRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/SharingRepository.java
@@ -23,34 +23,22 @@ import jakarta.persistence.Query;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.airavata.sharing.mapper.SharingMapper;
 import org.apache.airavata.sharing.model.SharingEntity;
 import org.apache.airavata.sharing.model.SharingPK;
-import org.apache.airavata.sharing.registry.models.Sharing;
-import org.apache.airavata.sharing.registry.models.SharingRegistryException;
-import org.apache.airavata.sharing.registry.models.SharingType;
+import org.apache.airavata.sharing.model.SharingRegistryException;
+import org.apache.airavata.sharing.model.SharingType;
 import org.apache.airavata.sharing.util.DBConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class SharingRepository extends AbstractRepository<Sharing, SharingEntity, SharingPK> {
+public class SharingRepository extends AbstractRepository<SharingEntity, SharingPK> {
     private static final Logger logger = LoggerFactory.getLogger(SharingRepository.class);
 
     public SharingRepository() {
-        super(Sharing.class, SharingEntity.class);
+        super(SharingEntity.class);
     }
 
-    @Override
-    protected Sharing toModel(SharingEntity entity) {
-        return SharingMapper.INSTANCE.sharingToModel(entity);
-    }
-
-    @Override
-    protected SharingEntity toEntity(Sharing model) {
-        return SharingMapper.INSTANCE.sharingToEntity(model);
-    }
-
-    public List<Sharing> getIndirectSharedChildren(String domainId, String parentId, String permissionTypeId)
+    public List<SharingEntity> getIndirectSharedChildren(String domainId, String parentId, String permissionTypeId)
             throws SharingRegistryException {
         HashMap<String, String> filters = new HashMap<>();
         filters.put(DBConstants.SharingTable.DOMAIN_ID, domainId);
@@ -61,7 +49,7 @@ public class SharingRepository extends AbstractRepository<Sharing, SharingEntity
         return select(filters, 0, -1);
     }
 
-    public List<Sharing> getCascadingPermissionsForEntity(String domainId, String entityId)
+    public List<SharingEntity> getCascadingPermissionsForEntity(String domainId, String entityId)
             throws SharingRegistryException {
         String query = "SELECT DISTINCT p from " + SharingEntity.class.getSimpleName() + " as p";
         query += " WHERE ";
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserGroupRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserGroupRepository.java
index 7d43ca4262..321007df93 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserGroupRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserGroupRepository.java
@@ -24,47 +24,30 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
-import org.apache.airavata.sharing.mapper.SharingMapper;
-import org.apache.airavata.sharing.model.SharingEntity;
-import org.apache.airavata.sharing.model.UserGroupEntity;
-import org.apache.airavata.sharing.model.UserGroupPK;
-import org.apache.airavata.sharing.registry.models.GroupCardinality;
-import org.apache.airavata.sharing.registry.models.SharingRegistryException;
-import org.apache.airavata.sharing.registry.models.SharingType;
-import org.apache.airavata.sharing.registry.models.UserGroup;
+import org.apache.airavata.sharing.model.*;
 import org.apache.airavata.sharing.util.DBConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class UserGroupRepository extends AbstractRepository<UserGroup, UserGroupEntity, UserGroupPK> {
+public class UserGroupRepository extends AbstractRepository<UserGroupEntity, UserGroupPK> {
     private static final Logger logger = LoggerFactory.getLogger(UserGroupRepository.class);
 
     public UserGroupRepository() {
-        super(UserGroup.class, UserGroupEntity.class);
+        super(UserGroupEntity.class);
     }
 
-    @Override
-    protected UserGroup toModel(UserGroupEntity entity) {
-        return SharingMapper.INSTANCE.userGroupToModel(entity);
-    }
-
-    @Override
-    protected UserGroupEntity toEntity(UserGroup model) {
-        return SharingMapper.INSTANCE.userGroupToEntity(model);
-    }
-
-    public List<UserGroup> getAccessibleGroups(String domainId, String entityId, String permissionTypeId)
+    public List<UserGroupEntity> getAccessibleGroups(String domainId, String entityId, String permissionTypeId)
             throws SharingRegistryException {
         return getAccessibleGroupsInternal(domainId, entityId, permissionTypeId);
     }
 
-    public List<UserGroup> getDirectlyAccessibleGroups(String domainId, String entityId, String permissionTypeId)
+    public List<UserGroupEntity> getDirectlyAccessibleGroups(String domainId, String entityId, String permissionTypeId)
             throws SharingRegistryException {
         return getAccessibleGroupsInternal(
                 domainId, entityId, permissionTypeId, SharingType.DIRECT_CASCADING, SharingType.DIRECT_NON_CASCADING);
     }
 
-    private List<UserGroup> getAccessibleGroupsInternal(
+    private List<UserGroupEntity> getAccessibleGroupsInternal(
             String domainId, String entityId, String permissionTypeId, SharingType... sharingTypes)
             throws SharingRegistryException {
         String query = "SELECT DISTINCT g from " + UserGroupEntity.class.getSimpleName() + " g, "
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserRepository.java
index ff4f0a09a7..64c3d58450 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/repository/UserRepository.java
@@ -24,35 +24,19 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
-import org.apache.airavata.sharing.mapper.SharingMapper;
-import org.apache.airavata.sharing.model.SharingEntity;
-import org.apache.airavata.sharing.model.UserEntity;
-import org.apache.airavata.sharing.model.UserPK;
-import org.apache.airavata.sharing.registry.models.SharingRegistryException;
-import org.apache.airavata.sharing.registry.models.SharingType;
-import org.apache.airavata.sharing.registry.models.User;
+import org.apache.airavata.sharing.model.*;
 import org.apache.airavata.sharing.util.DBConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class UserRepository extends AbstractRepository<User, UserEntity, UserPK> {
+public class UserRepository extends AbstractRepository<UserEntity, UserPK> {
     private static final Logger logger = LoggerFactory.getLogger(UserRepository.class);
 
     public UserRepository() {
-        super(User.class, UserEntity.class);
+        super(UserEntity.class);
     }
 
-    @Override
-    protected User toModel(UserEntity entity) {
-        return SharingMapper.INSTANCE.userToModel(entity);
-    }
-
-    @Override
-    protected UserEntity toEntity(User model) {
-        return SharingMapper.INSTANCE.userToEntity(model);
-    }
-
-    public List<User> getAccessibleUsers(String domainId, String entityId, String permissionTypeId)
+    public List<UserEntity> getAccessibleUsers(String domainId, String entityId, String permissionTypeId)
             throws SharingRegistryException {
         if (permissionTypeId.equals((new PermissionTypeRepository()).getOwnerPermissionTypeIdForDomain(domainId))) {
             return getAccessibleUsersInternal(
@@ -66,13 +50,13 @@ public class UserRepository extends AbstractRepository<User, UserEntity, UserPK>
         }
     }
 
-    public List<User> getDirectlyAccessibleUsers(String domainId, String entityId, String permissionTypeId)
+    public List<UserEntity> getDirectlyAccessibleUsers(String domainId, String entityId, String permissionTypeId)
             throws SharingRegistryException {
         return getAccessibleUsersInternal(
                 domainId, entityId, permissionTypeId, SharingType.DIRECT_CASCADING, SharingType.DIRECT_NON_CASCADING);
     }
 
-    private List<User> getAccessibleUsersInternal(
+    private List<UserEntity> getAccessibleUsersInternal(
             String domainId, String entityId, String permissionTypeId, SharingType... sharingTypes)
             throws SharingRegistryException {
         Map<String, Object> queryParameters = new HashMap<>();
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/service/ResourceSharingService.java b/airavata-api/src/main/java/org/apache/airavata/sharing/service/ResourceSharingService.java
index 9ee91b0341..c2b8027afe 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/service/ResourceSharingService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/service/ResourceSharingService.java
@@ -34,8 +34,8 @@ import org.apache.airavata.model.appcatalog.gatewaygroups.proto.GatewayGroups;
 import org.apache.airavata.model.group.proto.ResourcePermissionType;
 import org.apache.airavata.model.group.proto.ResourceType;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.User;
-import org.apache.airavata.sharing.registry.models.UserGroup;
+import org.apache.airavata.sharing.model.UserEntity;
+import org.apache.airavata.sharing.model.UserGroupEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -352,7 +352,7 @@ public class ResourceSharingService {
             String gatewayId,
             String resourceId,
             ResourcePermissionType permissionType,
-            BiFunction<SharingRegistryServerHandler, ResourcePermissionType, Collection<User>> userListFunction) {
+            BiFunction<SharingRegistryServerHandler, ResourcePermissionType, Collection<UserEntity>> userListFunction) {
         HashSet<String> accessibleUsers = new HashSet<>();
         if (permissionType.equals(ResourcePermissionType.WRITE)) {
             userListFunction
@@ -387,7 +387,7 @@ public class ResourceSharingService {
             String gatewayId,
             String resourceId,
             ResourcePermissionType permissionType,
-            BiFunction<SharingRegistryServerHandler, ResourcePermissionType, Collection<UserGroup>> groupListFunction) {
+            BiFunction<SharingRegistryServerHandler, ResourcePermissionType, Collection<UserGroupEntity>> groupListFunction) {
         HashSet<String> accessibleGroups = new HashSet<>();
         if (permissionType.equals(ResourcePermissionType.WRITE)) {
             groupListFunction
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/service/SharingHelper.java b/airavata-api/src/main/java/org/apache/airavata/sharing/service/SharingHelper.java
index 502048012b..25b5824af0 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/service/SharingHelper.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/service/SharingHelper.java
@@ -26,9 +26,8 @@ import org.apache.airavata.model.appcatalog.gatewaygroups.proto.GatewayGroups;
 import org.apache.airavata.model.group.proto.ResourcePermissionType;
 import org.apache.airavata.security.service.GatewayGroupsInitializer;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.PermissionType;
-import org.apache.thrift.TException;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.PermissionTypeEntity;
 
 public class SharingHelper {
 
@@ -72,7 +71,7 @@ public class SharingHelper {
     }
 
     public static void shareEntityWithAdminGatewayGroups(
-            SharingRegistryServerHandler sharingHandler, RegistryServerHandler registryHandler, Entity entity)
+            SharingRegistryServerHandler sharingHandler, RegistryServerHandler registryHandler, EntityEntity entity)
             throws Exception {
         String domainId = entity.getDomainId();
         GatewayGroups gatewayGroups = retrieveGatewayGroups(registryHandler, domainId);
@@ -98,10 +97,10 @@ public class SharingHelper {
     }
 
     public static void createManageSharingPermissionTypeIfMissing(
-            SharingRegistryServerHandler sharingHandler, String domainId) throws TException {
+            SharingRegistryServerHandler sharingHandler, String domainId) throws Exception {
         String permissionTypeId = domainId + ":MANAGE_SHARING";
         if (!sharingHandler.isPermissionExists(domainId, permissionTypeId)) {
-            PermissionType permissionType = new PermissionType();
+            PermissionTypeEntity permissionType = new PermissionTypeEntity();
             permissionType.setPermissionTypeId(permissionTypeId);
             permissionType.setDomainId(domainId);
             permissionType.setName("MANAGE_SHARING");
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/util/AiravataDataMigrator.java b/airavata-api/src/main/java/org/apache/airavata/sharing/util/AiravataDataMigrator.java
index ad0f7d2153..5991191975 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/util/AiravataDataMigrator.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/util/AiravataDataMigrator.java
@@ -32,8 +32,8 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.util.AiravataUtils;
-import org.apache.airavata.credential.handler.CredentialStoreServerHandler;
 import org.apache.airavata.credential.store.cpi.CredentialStoreService;
+import org.apache.airavata.credential.handler.CredentialStoreServerHandler;
 import org.apache.airavata.execution.handler.RegistryServerHandler;
 import org.apache.airavata.model.appcatalog.appdeployment.proto.ApplicationDeploymentDescription;
 import org.apache.airavata.model.appcatalog.computeresource.proto.ComputeResourceDescription;
@@ -57,18 +57,17 @@ import org.apache.airavata.security.service.AiravataSecurityManager;
 import org.apache.airavata.security.service.SecurityManagerFactory;
 import org.apache.airavata.security.util.AiravataSecurityException;
 import org.apache.airavata.sharing.handler.SharingRegistryServerHandler;
-import org.apache.airavata.sharing.registry.models.Domain;
-import org.apache.airavata.sharing.registry.models.Entity;
-import org.apache.airavata.sharing.registry.models.EntitySearchField;
-import org.apache.airavata.sharing.registry.models.EntityType;
-import org.apache.airavata.sharing.registry.models.GroupCardinality;
-import org.apache.airavata.sharing.registry.models.GroupType;
-import org.apache.airavata.sharing.registry.models.PermissionType;
-import org.apache.airavata.sharing.registry.models.SearchCondition;
-import org.apache.airavata.sharing.registry.models.SearchCriteria;
-import org.apache.airavata.sharing.registry.models.User;
-import org.apache.airavata.sharing.registry.models.UserGroup;
-import org.apache.thrift.TException;
+import org.apache.airavata.sharing.model.DomainEntity;
+import org.apache.airavata.sharing.model.EntityEntity;
+import org.apache.airavata.sharing.model.EntitySearchField;
+import org.apache.airavata.sharing.model.EntityTypeEntity;
+import org.apache.airavata.sharing.model.GroupCardinality;
+import org.apache.airavata.sharing.model.GroupType;
+import org.apache.airavata.sharing.model.PermissionTypeEntity;
+import org.apache.airavata.sharing.model.SearchCondition;
+import org.apache.airavata.sharing.model.SearchCriteria;
+import org.apache.airavata.sharing.model.UserEntity;
+import org.apache.airavata.sharing.model.UserGroupEntity;
 
 public class AiravataDataMigrator {
 
@@ -99,7 +98,7 @@ public class AiravataDataMigrator {
         while (rs.next()) {
             try {
                 // Creating domain entries
-                Domain domain = new Domain();
+                DomainEntity domain = new DomainEntity();
                 domain.setDomainId(rs.getString("GATEWAY_ID"));
                 domain.setName(rs.getString("GATEWAY_ID"));
                 domain.setDescription("Domain entry for " + domain.getName());
@@ -108,7 +107,7 @@ public class AiravataDataMigrator {
                     sharingRegistryServerHandler.createDomain(domain);
 
                 // Creating Entity Types for each domain
-                EntityType entityType = new EntityType();
+                EntityTypeEntity entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":PROJECT");
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("PROJECT");
@@ -117,7 +116,7 @@ public class AiravataDataMigrator {
                         entityType.getDomainId(), entityType.getEntityTypeId()))
                     sharingRegistryServerHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":EXPERIMENT");
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("EXPERIMENT");
@@ -126,7 +125,7 @@ public class AiravataDataMigrator {
                         entityType.getDomainId(), entityType.getEntityTypeId()))
                     sharingRegistryServerHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":FILE");
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("FILE");
@@ -135,7 +134,7 @@ public class AiravataDataMigrator {
                         entityType.getDomainId(), entityType.getEntityTypeId()))
                     sharingRegistryServerHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName("APPLICATION-DEPLOYMENT");
@@ -144,7 +143,7 @@ public class AiravataDataMigrator {
                         entityType.getDomainId(), entityType.getEntityTypeId()))
                     sharingRegistryServerHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":" + ResourceType.GROUP_RESOURCE_PROFILE.name());
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName(ResourceType.GROUP_RESOURCE_PROFILE.name());
@@ -153,7 +152,7 @@ public class AiravataDataMigrator {
                         entityType.getDomainId(), entityType.getEntityTypeId()))
                     sharingRegistryServerHandler.createEntityType(entityType);
 
-                entityType = new EntityType();
+                entityType = new EntityTypeEntity();
                 entityType.setEntityTypeId(domain.getDomainId() + ":" + ResourceType.CREDENTIAL_TOKEN.name());
                 entityType.setDomainId(domain.getDomainId());
                 entityType.setName(ResourceType.CREDENTIAL_TOKEN.name());
@@ -163,7 +162,7 @@ public class AiravataDataMigrator {
                     sharingRegistryServerHandler.createEntityType(entityType);
 
                 // Creating Permission Types for each domain
-                PermissionType permissionType = new PermissionType();
+                PermissionTypeEntity permissionType = new PermissionTypeEntity();
                 permissionType.setPermissionTypeId(domain.getDomainId() + ":READ");
                 permissionType.setDomainId(domain.getDomainId());
                 permissionType.setName("READ");
@@ -172,7 +171,7 @@ public class AiravataDataMigrator {
                         permissionType.getDomainId(), permissionType.getPermissionTypeId()))
                     sharingRegistryServerHandler.createPermissionType(permissionType);
 
-                permissionType = new PermissionType();
+                permissionType = new PermissionTypeEntity();
                 permissionType.setPermissionTypeId(domain.getDomainId() + ":WRITE");
                 permissionType.setDomainId(domain.getDomainId());
                 permissionType.setName("WRITE");
@@ -181,7 +180,7 @@ public class AiravataDataMigrator {
                         permissionType.getDomainId(), permissionType.getPermissionTypeId()))
                     sharingRegistryServerHandler.createPermissionType(permissionType);
 
-                permissionType = new PermissionType();
+                permissionType = new PermissionTypeEntity();
                 permissionType.setPermissionTypeId(domain.getDomainId() + ":MANAGE_SHARING");
                 permissionType.setDomainId(domain.getDomainId());
                 permissionType.setName("MANAGE_SHARING");
@@ -201,7 +200,7 @@ public class AiravataDataMigrator {
         rs = statement.executeQuery(query);
         while (rs.next()) {
             try {
-                User user = new User();
+                UserEntity user = new UserEntity();
                 user.setUserId(rs.getString("AIRAVATA_INTERNAL_USER_ID"));
                 user.setDomainId(rs.getString("GATEWAY_ID"));
                 user.setUserName(rs.getString("USER_NAME"));
@@ -218,9 +217,9 @@ public class AiravataDataMigrator {
         Map<String, GatewayGroups> gatewayGroupsMap = new HashMap<>();
 
         // Creating the gateway groups
-        List<Domain> domainList = sharingRegistryServerHandler.getDomains(0, -1);
+        List<DomainEntity> domainList = sharingRegistryServerHandler.getDomains(0, -1);
         final RegistryServerHandler registryServiceClient = getRegistryServiceClient();
-        for (Domain domain : domainList) {
+        for (DomainEntity domain : domainList) {
             // If we're only running migration for gatewayId, then skip other gateways
             if (gatewayId != null && !gatewayId.equals(domain.getDomainId())) {
                 continue;
@@ -260,10 +259,10 @@ public class AiravataDataMigrator {
         query = "SELECT * FROM PROJECT" + gatewayWhereClause;
         statement = expCatConnection.createStatement();
         rs = statement.executeQuery(query);
-        List<Entity> projectEntities = new ArrayList<>();
+        List<EntityEntity> projectEntities = new ArrayList<>();
         while (rs.next()) {
             try {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(rs.getString("PROJECT_ID"));
                 entity.setDomainId(rs.getString("GATEWAY_ID"));
                 entity.setEntityTypeId(rs.getString("GATEWAY_ID") + ":PROJECT");
@@ -284,10 +283,10 @@ public class AiravataDataMigrator {
         query = "SELECT * FROM EXPERIMENT" + gatewayWhereClause;
         statement = expCatConnection.createStatement();
         rs = statement.executeQuery(query);
-        List<Entity> experimentEntities = new ArrayList<>();
+        List<EntityEntity> experimentEntities = new ArrayList<>();
         while (rs.next()) {
             try {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(rs.getString("EXPERIMENT_ID"));
                 entity.setDomainId(rs.getString("GATEWAY_ID"));
                 entity.setEntityTypeId(rs.getString("GATEWAY_ID") + ":EXPERIMENT");
@@ -312,13 +311,13 @@ public class AiravataDataMigrator {
             }
         }
 
-        for (Entity entity : projectEntities) {
+        for (EntityEntity entity : projectEntities) {
             if (!sharingRegistryServerHandler.isEntityExists(entity.getDomainId(), entity.getEntityId())) {
                 sharingRegistryServerHandler.createEntity(entity);
             }
         }
 
-        for (Entity entity : experimentEntities) {
+        for (EntityEntity entity : experimentEntities) {
             if (!sharingRegistryServerHandler.isEntityExists(entity.getDomainId(), entity.getEntityId())) {
                 if (!sharingRegistryServerHandler.isEntityExists(entity.getDomainId(), entity.getParentEntityId())) {
                     System.out.println("Warning: project entity does exist for experiment entity "
@@ -343,7 +342,7 @@ public class AiravataDataMigrator {
             List<ApplicationDeploymentDescription> applicationDeploymentDescriptionList =
                     registryServiceClient.getAllApplicationDeployments(domainID);
             for (ApplicationDeploymentDescription description : applicationDeploymentDescriptionList) {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(description.getAppDeploymentId());
                 entity.setDomainId(domainID);
                 entity.setEntityTypeId(entity.getDomainId() + ":" + ResourceType.APPLICATION_DEPLOYMENT.name());
@@ -369,7 +368,7 @@ public class AiravataDataMigrator {
                         migrateGatewayResourceProfileToGroupResourceProfile(domainID, registryServiceClient);
 
                 // create GroupResourceProfile entity in sharing registry
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(groupResourceProfile.getGroupResourceProfileId());
                 entity.setDomainId(domainID);
                 entity.setEntityTypeId(entity.getDomainId() + ":" + ResourceType.GROUP_RESOURCE_PROFILE.name());
@@ -387,7 +386,7 @@ public class AiravataDataMigrator {
             List<CredentialSummary> gatewayCredentialSummaries =
                     credentialStoreServiceClient.getAllCredentialSummaryForGateway(SummaryType.SSH, domainID);
             for (CredentialSummary credentialSummary : gatewayCredentialSummaries) {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(credentialSummary.getToken());
                 entity.setDomainId(domainID);
                 entity.setEntityTypeId(entity.getDomainId() + ":" + ResourceType.CREDENTIAL_TOKEN.name());
@@ -405,8 +404,8 @@ public class AiravataDataMigrator {
 
         // Creating credential store token entries (USER SSH tokens)
         for (String domainID : domainOwnerMap.keySet()) {
-            List<User> sharingUsers = sharingRegistryServerHandler.getUsers(domainID, 0, Integer.MAX_VALUE);
-            for (User sharingUser : sharingUsers) {
+            List<UserEntity> sharingUsers = sharingRegistryServerHandler.getUsers(domainID, 0, Integer.MAX_VALUE);
+            for (UserEntity sharingUser : sharingUsers) {
 
                 String userId = sharingUser.getUserId();
                 if (!userId.endsWith("@" + domainID)) {
@@ -419,7 +418,7 @@ public class AiravataDataMigrator {
                         credentialStoreServiceClient.getAllCredentialSummaryForUserInGateway(
                                 SummaryType.SSH, domainID, username);
                 for (CredentialSummary credentialSummary : gatewayCredentialSummaries) {
-                    Entity entity = new Entity();
+                    EntityEntity entity = new EntityEntity();
                     entity.setEntityId(credentialSummary.getToken());
                     entity.setDomainId(domainID);
                     entity.setEntityTypeId(entity.getDomainId() + ":" + ResourceType.CREDENTIAL_TOKEN.name());
@@ -438,7 +437,7 @@ public class AiravataDataMigrator {
             Map<String, String> gatewayPasswords =
                     credentialStoreServiceClient.getAllPWDCredentialsForGateway(domainID);
             for (Map.Entry<String, String> gatewayPasswordEntry : gatewayPasswords.entrySet()) {
-                Entity entity = new Entity();
+                EntityEntity entity = new EntityEntity();
                 entity.setEntityId(gatewayPasswordEntry.getKey());
                 entity.setDomainId(domainID);
                 entity.setEntityTypeId(entity.getDomainId() + ":" + ResourceType.CREDENTIAL_TOKEN.name());
@@ -462,7 +461,7 @@ public class AiravataDataMigrator {
 
     private static void shareEntityWithGatewayGroups(
             SharingRegistryServerHandler sharingRegistryServerHandler,
-            Entity entity,
+            EntityEntity entity,
             GatewayGroups gatewayGroups,
             boolean cascadePermission)
             throws Exception {
@@ -478,7 +477,7 @@ public class AiravataDataMigrator {
 
     private static void shareEntityWithAdminGatewayGroups(
             SharingRegistryServerHandler sharingRegistryServerHandler,
-            Entity entity,
+            EntityEntity entity,
             GatewayGroups gatewayGroups,
             boolean cascadePermission)
             throws Exception {
@@ -609,7 +608,7 @@ public class AiravataDataMigrator {
     }
 
     private static GatewayGroups migrateRolesToGatewayGroups(
-            Domain domain,
+            DomainEntity domain,
             String ownerId,
             SharingRegistryServerHandler sharingRegistryServerHandler,
             RegistryServerHandler registryServiceClient)
@@ -625,7 +624,7 @@ public class AiravataDataMigrator {
                 .collect(Collectors.toList());
         Map<String, List<String>> roleMap = loadRolesForUsers(domain.getDomainId(), usernames);
 
-        UserGroup gatewayUsersGroup = createGroup(
+        UserGroupEntity gatewayUsersGroup = createGroup(
                 sharingRegistryServerHandler,
                 domain,
                 ownerId,
@@ -634,7 +633,7 @@ public class AiravataDataMigrator {
                 roleMap.containsKey("gateway-user") ? roleMap.get("gateway-user") : Collections.emptyList());
         gatewayGroupsBuilder.setDefaultGatewayUsersGroupId(gatewayUsersGroup.getGroupId());
 
-        UserGroup adminUsersGroup = createGroup(
+        UserGroupEntity adminUsersGroup = createGroup(
                 sharingRegistryServerHandler,
                 domain,
                 ownerId,
@@ -643,7 +642,7 @@ public class AiravataDataMigrator {
                 roleMap.containsKey("admin") ? roleMap.get("admin") : Collections.emptyList());
         gatewayGroupsBuilder.setAdminsGroupId(adminUsersGroup.getGroupId());
 
-        UserGroup readOnlyAdminsGroup = createGroup(
+        UserGroupEntity readOnlyAdminsGroup = createGroup(
                 sharingRegistryServerHandler,
                 domain,
                 ownerId,
@@ -658,7 +657,7 @@ public class AiravataDataMigrator {
     }
 
     private static String getAdminOwnerUser(
-            Domain domain,
+            DomainEntity domain,
             SharingRegistryServerHandler sharingRegistryServerHandler,
             CredentialStoreService.Iface credentialStoreServiceClient,
             RegistryServerHandler registryServiceClient)
@@ -734,25 +733,25 @@ public class AiravataDataMigrator {
         return csClient.getPasswordCredential(gwrp.getIdentityServerPwdCredToken(), gwrp.getGatewayId());
     }
 
-    private static UserGroup createGroup(
+    private static UserGroupEntity createGroup(
             SharingRegistryServerHandler sharingRegistryServerHandler,
-            Domain domain,
+            DomainEntity domain,
             String ownerId,
             String groupName,
             String groupDescription,
             List<String> usernames)
             throws Exception {
 
-        UserGroup userGroup = new UserGroup();
+        UserGroupEntity userGroup = new UserGroupEntity();
         userGroup.setGroupId(AiravataUtils.getId(groupName));
         userGroup.setDomainId(domain.getDomainId());
-        userGroup.setGroupCardinality(GroupCardinality.MULTI_USER);
+        userGroup.setGroupCardinality(GroupCardinality.MULTI_USER.name());
         userGroup.setCreatedTime(System.currentTimeMillis());
         userGroup.setUpdatedTime(System.currentTimeMillis());
         userGroup.setName(groupName);
         userGroup.setDescription(groupDescription);
         userGroup.setOwnerId(ownerId);
-        userGroup.setGroupType(GroupType.DOMAIN_LEVEL_GROUP);
+        userGroup.setGroupType(GroupType.DOMAIN_LEVEL_GROUP.name());
         sharingRegistryServerHandler.createGroup(userGroup);
 
         List<String> userIds = usernames.stream()
@@ -903,7 +902,7 @@ public class AiravataDataMigrator {
         try {
             return new CredentialStoreServerHandler();
         } catch (Exception e) {
-            throw new TException("Unable to create CredentialStoreServerHandler...", e);
+            throw new RuntimeException("Unable to create CredentialStoreServerHandler...", e);
         }
     }
 
@@ -917,7 +916,7 @@ public class AiravataDataMigrator {
             AuthzToken authzToken = securityManager.getUserManagementServiceAccountAuthzToken(tenantId);
             return authzToken;
         } catch (AiravataSecurityException e) {
-            throw new TException("Unable to fetch access token for management user for tenant: " + tenantId, e);
+            throw new RuntimeException("Unable to fetch access token for management user for tenant: " + tenantId, e);
         }
     }
 }
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/util/ThriftDataModelConversion.java b/airavata-api/src/main/java/org/apache/airavata/sharing/util/ThriftDataModelConversion.java
index a14fad2780..e3fddd163d 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/util/ThriftDataModelConversion.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/util/ThriftDataModelConversion.java
@@ -19,39 +19,39 @@
 */
 package org.apache.airavata.sharing.util;
 
-import org.apache.airavata.model.user.UserProfile;
-import org.apache.airavata.sharing.registry.models.User;
+import org.apache.airavata.model.user.proto.UserProfile;
+import org.apache.airavata.sharing.model.UserEntity;
 
 /**
- * Created by Ajinkya on 3/29/17.
+ * Converts proto data models to sharing entity types.
  */
 public class ThriftDataModelConversion {
 
     /**
-     * Build user object from UserProfile
-     * @param userProfile thrift object
-     * @return
-     * User corresponding to userProfile thrift
+     * Build UserEntity from proto UserProfile.
      */
-    public static User getUser(UserProfile userProfile) {
-        User user = new User();
+    public static UserEntity getUser(UserProfile userProfile) {
+        UserEntity user = new UserEntity();
         user.setUserId(userProfile.getAiravataInternalUserId());
         user.setDomainId(userProfile.getGatewayId());
         user.setUserName(userProfile.getUserId());
         user.setFirstName(userProfile.getFirstName());
         user.setLastName(userProfile.getLastName());
-        user.setEmail(userProfile.getEmails().get(0));
+        user.setEmail(userProfile.getEmailsList().get(0));
         return user;
     }
 
-    public static User getUser(org.apache.airavata.model.user.proto.UserProfile userProfile) {
-        User user = new User();
+    /**
+     * Build UserEntity from Thrift UserProfile (legacy overload for AiravataDataMigrator).
+     */
+    public static UserEntity getUser(org.apache.airavata.model.user.UserProfile userProfile) {
+        UserEntity user = new UserEntity();
         user.setUserId(userProfile.getAiravataInternalUserId());
         user.setDomainId(userProfile.getGatewayId());
         user.setUserName(userProfile.getUserId());
         user.setFirstName(userProfile.getFirstName());
         user.setLastName(userProfile.getLastName());
-        user.setEmail(userProfile.getEmailsList().get(0));
+        user.setEmail(userProfile.getEmails().get(0));
         return user;
     }
 }
diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java
index a86b421dac..56ecaee6a2 100644
--- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java
+++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java
@@ -951,9 +951,9 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- Domain ---
 
-    private static org.apache.airavata.sharing.registry.models.Domain toThriftDomain(
+    private static org.apache.airavata.sharing.model.DomainEntity toThriftDomain(
             org.apache.airavata.sharing.registry.models.proto.Domain proto) {
-        var t = new org.apache.airavata.sharing.registry.models.Domain();
+        var t = new org.apache.airavata.sharing.model.DomainEntity();
         if (!proto.getDomainId().isEmpty()) t.setDomainId(proto.getDomainId());
         if (!proto.getName().isEmpty()) t.setName(proto.getName());
         if (!proto.getDescription().isEmpty()) t.setDescription(proto.getDescription());
@@ -964,7 +964,7 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
     }
 
     private static org.apache.airavata.sharing.registry.models.proto.Domain toProtoDomain(
-            org.apache.airavata.sharing.registry.models.Domain t) {
+            org.apache.airavata.sharing.model.DomainEntity t) {
         var b = org.apache.airavata.sharing.registry.models.proto.Domain.newBuilder();
         if (t.getDomainId() != null) b.setDomainId(t.getDomainId());
         if (t.getName() != null) b.setName(t.getName());
@@ -977,9 +977,9 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- User ---
 
-    private static org.apache.airavata.sharing.registry.models.User toThriftUser(
+    private static org.apache.airavata.sharing.model.UserEntity toThriftUser(
             org.apache.airavata.sharing.registry.models.proto.User proto) {
-        var t = new org.apache.airavata.sharing.registry.models.User();
+        var t = new org.apache.airavata.sharing.model.UserEntity();
         if (!proto.getUserId().isEmpty()) t.setUserId(proto.getUserId());
         if (!proto.getDomainId().isEmpty()) t.setDomainId(proto.getDomainId());
         if (!proto.getUserName().isEmpty()) t.setUserName(proto.getUserName());
@@ -993,7 +993,7 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
     }
 
     private static org.apache.airavata.sharing.registry.models.proto.User toProtoUser(
-            org.apache.airavata.sharing.registry.models.User t) {
+            org.apache.airavata.sharing.model.UserEntity t) {
         var b = org.apache.airavata.sharing.registry.models.proto.User.newBuilder();
         if (t.getUserId() != null) b.setUserId(t.getUserId());
         if (t.getDomainId() != null) b.setDomainId(t.getDomainId());
@@ -1009,19 +1009,19 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- UserGroup ---
 
-    private static org.apache.airavata.sharing.registry.models.UserGroup toThriftUserGroup(
+    private static org.apache.airavata.sharing.model.UserGroupEntity toThriftUserGroup(
             org.apache.airavata.sharing.registry.models.proto.UserGroup proto) {
-        var t = new org.apache.airavata.sharing.registry.models.UserGroup();
+        var t = new org.apache.airavata.sharing.model.UserGroupEntity();
         if (!proto.getGroupId().isEmpty()) t.setGroupId(proto.getGroupId());
         if (!proto.getDomainId().isEmpty()) t.setDomainId(proto.getDomainId());
         if (!proto.getName().isEmpty()) t.setName(proto.getName());
         if (!proto.getDescription().isEmpty()) t.setDescription(proto.getDescription());
         if (!proto.getOwnerId().isEmpty()) t.setOwnerId(proto.getOwnerId());
         if (proto.getGroupTypeValue() != 0) {
-            t.setGroupType(org.apache.airavata.sharing.registry.models.GroupType.findByValue(proto.getGroupTypeValue()));
+            t.setGroupType(org.apache.airavata.sharing.registry.models.proto.GroupType.forNumber(proto.getGroupTypeValue()).name());
         }
         if (proto.getGroupCardinalityValue() != 0) {
-            t.setGroupCardinality(org.apache.airavata.sharing.registry.models.GroupCardinality.findByValue(proto.getGroupCardinalityValue()));
+            t.setGroupCardinality(org.apache.airavata.sharing.registry.models.proto.GroupCardinality.forNumber(proto.getGroupCardinalityValue()).name());
         }
         if (proto.getCreatedTime() != 0) t.setCreatedTime(proto.getCreatedTime());
         if (proto.getUpdatedTime() != 0) t.setUpdatedTime(proto.getUpdatedTime());
@@ -1029,15 +1029,15 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
     }
 
     private static org.apache.airavata.sharing.registry.models.proto.UserGroup toProtoUserGroup(
-            org.apache.airavata.sharing.registry.models.UserGroup t) {
+            org.apache.airavata.sharing.model.UserGroupEntity t) {
         var b = org.apache.airavata.sharing.registry.models.proto.UserGroup.newBuilder();
         if (t.getGroupId() != null) b.setGroupId(t.getGroupId());
         if (t.getDomainId() != null) b.setDomainId(t.getDomainId());
         if (t.getName() != null) b.setName(t.getName());
         if (t.getDescription() != null) b.setDescription(t.getDescription());
         if (t.getOwnerId() != null) b.setOwnerId(t.getOwnerId());
-        if (t.getGroupType() != null) b.setGroupTypeValue(t.getGroupType().getValue());
-        if (t.getGroupCardinality() != null) b.setGroupCardinalityValue(t.getGroupCardinality().getValue());
+        if (t.getGroupType() != null) b.setGroupTypeValue(org.apache.airavata.sharing.registry.models.proto.GroupType.valueOf(t.getGroupType()).getNumber());
+        if (t.getGroupCardinality() != null) b.setGroupCardinalityValue(org.apache.airavata.sharing.registry.models.proto.GroupCardinality.valueOf(t.getGroupCardinality()).getNumber());
         b.setCreatedTime(t.getCreatedTime());
         b.setUpdatedTime(t.getUpdatedTime());
         return b.build();
@@ -1045,9 +1045,9 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- EntityType ---
 
-    private static org.apache.airavata.sharing.registry.models.EntityType toThriftEntityType(
+    private static org.apache.airavata.sharing.model.EntityTypeEntity toThriftEntityType(
             org.apache.airavata.sharing.registry.models.proto.EntityType proto) {
-        var t = new org.apache.airavata.sharing.registry.models.EntityType();
+        var t = new org.apache.airavata.sharing.model.EntityTypeEntity();
         if (!proto.getEntityTypeId().isEmpty()) t.setEntityTypeId(proto.getEntityTypeId());
         if (!proto.getDomainId().isEmpty()) t.setDomainId(proto.getDomainId());
         if (!proto.getName().isEmpty()) t.setName(proto.getName());
@@ -1058,7 +1058,7 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
     }
 
     private static org.apache.airavata.sharing.registry.models.proto.EntityType toProtoEntityType(
-            org.apache.airavata.sharing.registry.models.EntityType t) {
+            org.apache.airavata.sharing.model.EntityTypeEntity t) {
         var b = org.apache.airavata.sharing.registry.models.proto.EntityType.newBuilder();
         if (t.getEntityTypeId() != null) b.setEntityTypeId(t.getEntityTypeId());
         if (t.getDomainId() != null) b.setDomainId(t.getDomainId());
@@ -1071,9 +1071,9 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- Entity ---
 
-    private static org.apache.airavata.sharing.registry.models.Entity toThriftEntity(
+    private static org.apache.airavata.sharing.model.EntityEntity toThriftEntity(
             org.apache.airavata.sharing.registry.models.proto.Entity proto) {
-        var t = new org.apache.airavata.sharing.registry.models.Entity();
+        var t = new org.apache.airavata.sharing.model.EntityEntity();
         if (!proto.getEntityId().isEmpty()) t.setEntityId(proto.getEntityId());
         if (!proto.getDomainId().isEmpty()) t.setDomainId(proto.getDomainId());
         if (!proto.getEntityTypeId().isEmpty()) t.setEntityTypeId(proto.getEntityTypeId());
@@ -1091,7 +1091,7 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
     }
 
     private static org.apache.airavata.sharing.registry.models.proto.Entity toProtoEntity(
-            org.apache.airavata.sharing.registry.models.Entity t) {
+            org.apache.airavata.sharing.model.EntityEntity t) {
         var b = org.apache.airavata.sharing.registry.models.proto.Entity.newBuilder();
         if (t.getEntityId() != null) b.setEntityId(t.getEntityId());
         if (t.getDomainId() != null) b.setDomainId(t.getDomainId());
@@ -1111,9 +1111,9 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- PermissionType ---
 
-    private static org.apache.airavata.sharing.registry.models.PermissionType toThriftPermissionType(
+    private static org.apache.airavata.sharing.model.PermissionTypeEntity toThriftPermissionType(
             org.apache.airavata.sharing.registry.models.proto.PermissionType proto) {
-        var t = new org.apache.airavata.sharing.registry.models.PermissionType();
+        var t = new org.apache.airavata.sharing.model.PermissionTypeEntity();
         if (!proto.getPermissionTypeId().isEmpty()) t.setPermissionTypeId(proto.getPermissionTypeId());
         if (!proto.getDomainId().isEmpty()) t.setDomainId(proto.getDomainId());
         if (!proto.getName().isEmpty()) t.setName(proto.getName());
@@ -1124,7 +1124,7 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
     }
 
     private static org.apache.airavata.sharing.registry.models.proto.PermissionType toProtoPermissionType(
-            org.apache.airavata.sharing.registry.models.PermissionType t) {
+            org.apache.airavata.sharing.model.PermissionTypeEntity t) {
         var b = org.apache.airavata.sharing.registry.models.proto.PermissionType.newBuilder();
         if (t.getPermissionTypeId() != null) b.setPermissionTypeId(t.getPermissionTypeId());
         if (t.getDomainId() != null) b.setDomainId(t.getDomainId());
@@ -1137,15 +1137,15 @@ public class SharingGrpcService extends SharingServiceGrpc.SharingServiceImplBas
 
     // --- SearchCriteria ---
 
-    private static org.apache.airavata.sharing.registry.models.SearchCriteria toThriftSearchCriteria(
+    private static org.apache.airavata.sharing.model.SearchCriteria toThriftSearchCriteria(
             org.apache.airavata.sharing.registry.models.proto.SearchCriteria proto) {
-        var t = new org.apache.airavata.sharing.registry.models.SearchCriteria();
+        var t = new org.apache.airavata.sharing.model.SearchCriteria();
         if (proto.getSearchFieldValue() != 0) {
-            t.setSearchField(org.apache.airavata.sharing.registry.models.EntitySearchField.findByValue(proto.getSearchFieldValue()));
+            t.setSearchField(org.apache.airavata.sharing.model.EntitySearchField.values()[proto.getSearchFieldValue() - 1]);
         }
         if (!proto.getValue().isEmpty()) t.setValue(proto.getValue());
         if (proto.getSearchConditionValue() != 0) {
-            t.setSearchCondition(org.apache.airavata.sharing.registry.models.SearchCondition.findByValue(proto.getSearchConditionValue()));
+            t.setSearchCondition(org.apache.airavata.sharing.model.SearchCondition.values()[proto.getSearchConditionValue() - 1]);
         }
         return t;
     }