You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2016/10/03 15:38:45 UTC

[25/50] [abbrv] airavata git commit: initial commit

initial commit


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/4f9e7dcd
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/4f9e7dcd
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/4f9e7dcd

Branch: refs/heads/airavata-gov-registry
Commit: 4f9e7dcd8e08d95d410de580a8398b2a77e3e49f
Parents: 59142dd
Author: scnakandala <su...@gmail.com>
Authored: Tue Sep 20 15:51:18 2016 -0400
Committer: scnakandala <su...@gmail.com>
Committed: Mon Oct 3 11:33:13 2016 -0400

----------------------------------------------------------------------
 .../airavata-gov-registry-core/pom.xml          |    37 +
 .../src/main/java/META-INF/persistence.xml      |    15 +
 .../gov/registry/db/entities/DomainEntity.java  |   113 +
 .../gov/registry/db/entities/EntityEntity.java  |   162 +
 .../registry/db/entities/EntityTypeEntity.java  |   124 +
 .../db/entities/GroupMembershipEntity.java      |    88 +
 .../db/entities/GroupMembershipEntityPK.java    |    74 +
 .../db/entities/PermissionTypeEntity.java       |   112 +
 .../gov/registry/db/entities/SharingEntity.java |   111 +
 .../registry/db/entities/SharingEntityPK.java   |    88 +
 .../gov/registry/db/entities/UserEntity.java    |   111 +
 .../registry/db/entities/UserGroupEntity.java   |   148 +
 .../gov/registry/db/utils/JPAUtils.java         |    87 +
 .../gov/registry/server/GovRegistryServer.java  |    28 +
 .../server/GovRegistryServerHandler.java        |    28 +
 .../src/main/resources/gov-registry.sql         |   116 +
 .../airavata-gov-registry-stubs/pom.xml         |    16 +
 .../airavata/gov/registry/models/Domain.java    |   817 +
 .../airavata/gov/registry/models/Entitiy.java   |  1401 +
 .../airavata/gov/registry/models/Entity.java    |  1404 +
 .../gov/registry/models/EntityType.java         |   924 +
 .../registry/models/GovRegistryException.java   |   391 +
 .../airavata/gov/registry/models/Group.java     |  1154 +
 .../airavata/gov/registry/models/GroupType.java |    45 +
 .../gov/registry/models/PermissionType.java     |   817 +
 .../airavata/gov/registry/models/User.java      |   817 +
 .../models/gov_reg_modelsConstants.java         |    41 +
 .../service/cpi/GovRegistryService.java         | 33673 +++++++++++++++++
 airavata-gov-registry/pom.xml                   |    21 +
 .../thrift_models/gov_reg_cpi.thrift            |    85 +
 .../thrift_models/gov_reg_models.thrift         |    91 +
 .../thrift_models/thrift-gen.sh                 |    16 +
 32 files changed, 43155 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/pom.xml
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/pom.xml b/airavata-gov-registry/airavata-gov-registry-core/pom.xml
new file mode 100644
index 0000000..b0aac88
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>gov-registry</artifactId>
+        <groupId>org.apache.airavata</groupId>
+        <relativePath>../pom.xml</relativePath>
+        <version>${global.version}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>airavata-gov-registry-core</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.thrift</groupId>
+            <artifactId>libthrift</artifactId>
+            <version>0.9.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-gov-registry-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-commons</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/META-INF/persistence.xml b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/META-INF/persistence.xml
new file mode 100644
index 0000000..4a89174
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/META-INF/persistence.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
+
+    <persistence-unit name="airavata-gov-registry">
+        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+        <class>org.apache.airavata.gov.registry.db.entities.DomainEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.EntityEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.EntityTypeEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.GroupMembershipEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.PermissionTypeEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.SharingEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.UserEntity</class>
+        <class>org.apache.airavata.gov.registry.db.entities.UserGroupEntity</class>
+    </persistence-unit>
+</persistence>

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/DomainEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/DomainEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/DomainEntity.java
new file mode 100644
index 0000000..0de9d62
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/DomainEntity.java
@@ -0,0 +1,113 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "DOMAIN", schema = "" )
+public class DomainEntity {
+    private final static Logger logger = LoggerFactory.getLogger(DomainEntity.class);
+    private String domainId;
+    private String name;
+    private String description;
+    private String createdTime;
+    private String updatedTime;
+
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
+    @Basic
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Basic
+    @Column(name = "DESCRIPTION")
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Basic
+    @Column(name = "CREATED_TIME")
+    public String getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(String createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    @Basic
+    @Column(name = "UPDATED_TIME")
+    public String getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(String updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        DomainEntity that = (DomainEntity) o;
+
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
+        if (name != null ? !name.equals(that.name) : that.name != null) return false;
+        if (description != null ? !description.equals(that.description) : that.description != null) return false;
+        if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
+        if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = domainId != null ? domainId.hashCode() : 0;
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        result = 31 * result + (description != null ? description.hashCode() : 0);
+        result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
+        result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityEntity.java
new file mode 100644
index 0000000..6abed54
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityEntity.java
@@ -0,0 +1,162 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.util.Arrays;
+
+@Entity
+@Table(name = "ENTITY", schema = "")
+public class EntityEntity {
+    private final static Logger logger = LoggerFactory.getLogger(EntityEntity.class);
+    private String entityId;
+    private String name;
+    private String description;
+    private byte[] metadata;
+    private String fullText;
+    private String createdTime;
+    private String updatedTime;
+    private DomainEntity domainByDomainId;
+    private EntityEntity entityByParentEntityId;
+
+    @Id
+    @Column(name = "ENTITY_ID")
+    public String getEntityId() {
+        return entityId;
+    }
+
+    public void setEntityId(String entityId) {
+        this.entityId = entityId;
+    }
+
+    @Basic
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Basic
+    @Column(name = "DESCRIPTION")
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Basic
+    @Column(name = "METADATA")
+    public byte[] getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(byte[] metadata) {
+        this.metadata = metadata;
+    }
+
+    @Basic
+    @Column(name = "FULL_TEXT")
+    public String getFullText() {
+        return fullText;
+    }
+
+    public void setFullText(String fullText) {
+        this.fullText = fullText;
+    }
+
+    @Basic
+    @Column(name = "CREATED_TIME")
+    public String getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(String createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    @Basic
+    @Column(name = "UPDATED_TIME")
+    public String getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(String updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        EntityEntity that = (EntityEntity) o;
+
+        if (entityId != null ? !entityId.equals(that.entityId) : that.entityId != null) return false;
+        if (name != null ? !name.equals(that.name) : that.name != null) return false;
+        if (description != null ? !description.equals(that.description) : that.description != null) return false;
+        if (!Arrays.equals(metadata, that.metadata)) return false;
+        if (fullText != null ? !fullText.equals(that.fullText) : that.fullText != null) return false;
+        if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
+        if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = entityId != null ? entityId.hashCode() : 0;
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        result = 31 * result + (description != null ? description.hashCode() : 0);
+        result = 31 * result + (metadata != null ? Arrays.hashCode(metadata) : 0);
+        result = 31 * result + (fullText != null ? fullText.hashCode() : 0);
+        result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
+        result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "DOMAIN_ID", referencedColumnName = "DOMAIN_ID")
+    public DomainEntity getDomainByDomainId() {
+        return domainByDomainId;
+    }
+
+    public void setDomainByDomainId(DomainEntity domainByDomainId) {
+        this.domainByDomainId = domainByDomainId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PARENT_ENTITY_ID", referencedColumnName = "ENTITY_ID")
+    public EntityEntity getEntityByParentEntityId() {
+        return entityByParentEntityId;
+    }
+
+    public void setEntityByParentEntityId(EntityEntity entityByParentEntityId) {
+        this.entityByParentEntityId = entityByParentEntityId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityTypeEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityTypeEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityTypeEntity.java
new file mode 100644
index 0000000..f54eb91
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/EntityTypeEntity.java
@@ -0,0 +1,124 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "ENTITY_TYPE", schema = "")
+public class EntityTypeEntity {
+    private final static Logger logger = LoggerFactory.getLogger(EntityTypeEntity.class);
+    private String entityTypeId;
+    private String name;
+    private String description;
+    private String createdTime;
+    private String updatedTime;
+    private DomainEntity domainByDomainId;
+
+    @Id
+    @Column(name = "ENTITY_TYPE_ID")
+    public String getEntityTypeId() {
+        return entityTypeId;
+    }
+
+    public void setEntityTypeId(String entityTypeId) {
+        this.entityTypeId = entityTypeId;
+    }
+
+    @Basic
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Basic
+    @Column(name = "DESCRIPTION")
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Basic
+    @Column(name = "CREATED_TIME")
+    public String getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(String createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    @Basic
+    @Column(name = "UPDATED_TIME")
+    public String getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(String updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        EntityTypeEntity that = (EntityTypeEntity) o;
+
+        if (entityTypeId != null ? !entityTypeId.equals(that.entityTypeId) : that.entityTypeId != null) return false;
+        if (name != null ? !name.equals(that.name) : that.name != null) return false;
+        if (description != null ? !description.equals(that.description) : that.description != null) return false;
+        if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
+        if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = entityTypeId != null ? entityTypeId.hashCode() : 0;
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        result = 31 * result + (description != null ? description.hashCode() : 0);
+        result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
+        result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "DOMAIN_ID", referencedColumnName = "DOMAIN_ID")
+    public DomainEntity getDomainByDomainId() {
+        return domainByDomainId;
+    }
+
+    public void setDomainByDomainId(DomainEntity domainByDomainId) {
+        this.domainByDomainId = domainByDomainId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntity.java
new file mode 100644
index 0000000..8fd9329
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntity.java
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "GROUP_MEMBERSHIP", schema = "")
+@IdClass(GroupMembershipEntityPK.class)
+public class GroupMembershipEntity {
+    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntity.class);
+    private String parentId;
+    private String childId;
+    private String childType;
+
+    @Id
+    @Column(name = "PARENT_ID")
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    @Id
+    @Column(name = "CHILD_ID")
+    public String getChildId() {
+        return childId;
+    }
+
+    public void setChildId(String childId) {
+        this.childId = childId;
+    }
+
+    @Basic
+    @Column(name = "CHILD_TYPE")
+    public String getChildType() {
+        return childType;
+    }
+
+    public void setChildType(String childType) {
+        this.childType = childType;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        GroupMembershipEntity that = (GroupMembershipEntity) o;
+
+        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
+        if (childId != null ? !childId.equals(that.childId) : that.childId != null) return false;
+        if (childType != null ? !childType.equals(that.childType) : that.childType != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = parentId != null ? parentId.hashCode() : 0;
+        result = 31 * result + (childId != null ? childId.hashCode() : 0);
+        result = 31 * result + (childType != null ? childType.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntityPK.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntityPK.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntityPK.java
new file mode 100644
index 0000000..2dfbefb
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/GroupMembershipEntityPK.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class GroupMembershipEntityPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntityPK.class);
+    private String parentId;
+    private String childId;
+
+    @Column(name = "PARENT_ID")
+    @Id
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    @Column(name = "CHILD_ID")
+    @Id
+    public String getChildId() {
+        return childId;
+    }
+
+    public void setChildId(String childId) {
+        this.childId = childId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        GroupMembershipEntityPK that = (GroupMembershipEntityPK) o;
+
+        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
+        if (childId != null ? !childId.equals(that.childId) : that.childId != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = parentId != null ? parentId.hashCode() : 0;
+        result = 31 * result + (childId != null ? childId.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/PermissionTypeEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/PermissionTypeEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/PermissionTypeEntity.java
new file mode 100644
index 0000000..198bc9e
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/PermissionTypeEntity.java
@@ -0,0 +1,112 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "PERMISSION_TYPE", schema = "")
+public class PermissionTypeEntity {
+    private final static Logger logger = LoggerFactory.getLogger(PermissionTypeEntity.class);
+    private String permissionTypeId;
+    private String name;
+    private String createdTime;
+    private String updatedTime;
+    private DomainEntity domainByDomainId;
+
+    @Id
+    @Column(name = "PERMISSION_TYPE_ID")
+    public String getPermissionTypeId() {
+        return permissionTypeId;
+    }
+
+    public void setPermissionTypeId(String permissionTypeId) {
+        this.permissionTypeId = permissionTypeId;
+    }
+
+    @Basic
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Basic
+    @Column(name = "CREATED_TIME")
+    public String getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(String createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    @Basic
+    @Column(name = "UPDATED_TIME")
+    public String getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(String updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        PermissionTypeEntity that = (PermissionTypeEntity) o;
+
+        if (permissionTypeId != null ? !permissionTypeId.equals(that.permissionTypeId) : that.permissionTypeId != null)
+            return false;
+        if (name != null ? !name.equals(that.name) : that.name != null) return false;
+        if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
+        if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = permissionTypeId != null ? permissionTypeId.hashCode() : 0;
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
+        result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "DOMAIN_ID", referencedColumnName = "DOMAIN_ID")
+    public DomainEntity getDomainByDomainId() {
+        return domainByDomainId;
+    }
+
+    public void setDomainByDomainId(DomainEntity domainByDomainId) {
+        this.domainByDomainId = domainByDomainId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntity.java
new file mode 100644
index 0000000..e9b949d
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntity.java
@@ -0,0 +1,111 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "SHARING", schema = "")
+@IdClass(SharingEntityPK.class)
+public class SharingEntity {
+    private final static Logger logger = LoggerFactory.getLogger(SharingEntity.class);
+    private String permissionTypeId;
+    private String entityId;
+    private String groupId;
+    private PermissionTypeEntity permissionTypeByPermissionTypeId;
+    private EntityTypeEntity entityTypeByEntityTypeId;
+
+    @Id
+    @Column(name = "PERMISSION_TYPE_ID")
+    public String getPermissionTypeId() {
+        return permissionTypeId;
+    }
+
+    public void setPermissionTypeId(String permissionTypeId) {
+        this.permissionTypeId = permissionTypeId;
+    }
+
+    @Id
+    @Column(name = "ENTITY_ID")
+    public String getEntityId() {
+        return entityId;
+    }
+
+    public void setEntityId(String entityId) {
+        this.entityId = entityId;
+    }
+
+    @Id
+    @Column(name = "GROUP_ID")
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        SharingEntity that = (SharingEntity) o;
+
+        if (permissionTypeId != null ? !permissionTypeId.equals(that.permissionTypeId) : that.permissionTypeId != null)
+            return false;
+        if (entityId != null ? !entityId.equals(that.entityId) : that.entityId != null) return false;
+        if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = permissionTypeId != null ? permissionTypeId.hashCode() : 0;
+        result = 31 * result + (entityId != null ? entityId.hashCode() : 0);
+        result = 31 * result + (groupId != null ? groupId.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PERMISSION_TYPE_ID", referencedColumnName = "PERMISSION_TYPE_ID", nullable = false)
+    public PermissionTypeEntity getPermissionTypeByPermissionTypeId() {
+        return permissionTypeByPermissionTypeId;
+    }
+
+    public void setPermissionTypeByPermissionTypeId(PermissionTypeEntity permissionTypeByPermissionTypeId) {
+        this.permissionTypeByPermissionTypeId = permissionTypeByPermissionTypeId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "ENTITY_TYPE_ID", referencedColumnName = "ENTITY_TYPE_ID")
+    public EntityTypeEntity getEntityTypeByEntityTypeId() {
+        return entityTypeByEntityTypeId;
+    }
+
+    public void setEntityTypeByEntityTypeId(EntityTypeEntity entityTypeByEntityTypeId) {
+        this.entityTypeByEntityTypeId = entityTypeByEntityTypeId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntityPK.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntityPK.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntityPK.java
new file mode 100644
index 0000000..8274904
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/SharingEntityPK.java
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class SharingEntityPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(SharingEntityPK.class);
+    private String permissionTypeId;
+    private String entityId;
+    private String groupId;
+
+    @Column(name = "PERMISSION_TYPE_ID")
+    @Id
+    public String getPermissionTypeId() {
+        return permissionTypeId;
+    }
+
+    public void setPermissionTypeId(String permissionTypeId) {
+        this.permissionTypeId = permissionTypeId;
+    }
+
+    @Column(name = "ENTITY_ID")
+    @Id
+    public String getEntityId() {
+        return entityId;
+    }
+
+    public void setEntityId(String entityId) {
+        this.entityId = entityId;
+    }
+
+    @Column(name = "GROUP_ID")
+    @Id
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        SharingEntityPK that = (SharingEntityPK) o;
+
+        if (permissionTypeId != null ? !permissionTypeId.equals(that.permissionTypeId) : that.permissionTypeId != null)
+            return false;
+        if (entityId != null ? !entityId.equals(that.entityId) : that.entityId != null) return false;
+        if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = permissionTypeId != null ? permissionTypeId.hashCode() : 0;
+        result = 31 * result + (entityId != null ? entityId.hashCode() : 0);
+        result = 31 * result + (groupId != null ? groupId.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserEntity.java
new file mode 100644
index 0000000..a19321f
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserEntity.java
@@ -0,0 +1,111 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "USER", schema = "")
+public class UserEntity {
+    private final static Logger logger = LoggerFactory.getLogger(UserEntity.class);
+    private String userId;
+    private String userName;
+    private String createdTime;
+    private String updatedTime;
+    private DomainEntity domainByDomainId;
+
+    @Id
+    @Column(name = "USER_ID")
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    @Basic
+    @Column(name = "USER_NAME")
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    @Basic
+    @Column(name = "CREATED_TIME")
+    public String getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(String createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    @Basic
+    @Column(name = "UPDATED_TIME")
+    public String getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(String updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        UserEntity that = (UserEntity) o;
+
+        if (userId != null ? !userId.equals(that.userId) : that.userId != null) return false;
+        if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
+        if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
+        if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = userId != null ? userId.hashCode() : 0;
+        result = 31 * result + (userName != null ? userName.hashCode() : 0);
+        result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
+        result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "DOMAIN_ID", referencedColumnName = "DOMAIN_ID")
+    public DomainEntity getDomainByDomainId() {
+        return domainByDomainId;
+    }
+
+    public void setDomainByDomainId(DomainEntity domainByDomainId) {
+        this.domainByDomainId = domainByDomainId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserGroupEntity.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserGroupEntity.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserGroupEntity.java
new file mode 100644
index 0000000..d0a6bbb
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/entities/UserGroupEntity.java
@@ -0,0 +1,148 @@
+/*
+ *
+ * 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.gov.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "USER_GROUP", schema = "")
+public class UserGroupEntity {
+    private final static Logger logger = LoggerFactory.getLogger(UserGroupEntity.class);
+    private String groupId;
+    private String name;
+    private String description;
+    private String type;
+    private String createdTime;
+    private String updatedTime;
+    private DomainEntity domainByDomainId;
+    private UserEntity userByOwnerId;
+
+    @Id
+    @Column(name = "GROUP_ID")
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    @Basic
+    @Column(name = "NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Basic
+    @Column(name = "DESCRIPTION")
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Basic
+    @Column(name = "TYPE")
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    @Basic
+    @Column(name = "CREATED_TIME")
+    public String getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(String createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    @Basic
+    @Column(name = "UPDATED_TIME")
+    public String getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(String updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        UserGroupEntity that = (UserGroupEntity) o;
+
+        if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
+        if (name != null ? !name.equals(that.name) : that.name != null) return false;
+        if (description != null ? !description.equals(that.description) : that.description != null) return false;
+        if (type != null ? !type.equals(that.type) : that.type != null) return false;
+        if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
+        if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = groupId != null ? groupId.hashCode() : 0;
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        result = 31 * result + (description != null ? description.hashCode() : 0);
+        result = 31 * result + (type != null ? type.hashCode() : 0);
+        result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
+        result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "DOMAIN_ID", referencedColumnName = "DOMAIN_ID")
+    public DomainEntity getDomainByDomainId() {
+        return domainByDomainId;
+    }
+
+    public void setDomainByDomainId(DomainEntity domainByDomainId) {
+        this.domainByDomainId = domainByDomainId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "OWNER_ID", referencedColumnName = "USER_ID")
+    public UserEntity getUserByOwnerId() {
+        return userByOwnerId;
+    }
+
+    public void setUserByOwnerId(UserEntity userByOwnerId) {
+        this.userByOwnerId = userByOwnerId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/utils/JPAUtils.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/utils/JPAUtils.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/utils/JPAUtils.java
new file mode 100644
index 0000000..d94a0eb
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/db/utils/JPAUtils.java
@@ -0,0 +1,87 @@
+/*
+ *
+ * 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.gov.registry.db.utils;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.util.HashMap;
+import java.util.Map;
+
+public class JPAUtils {
+    private final static Logger logger = LoggerFactory.getLogger(JPAUtils.class);
+
+    private static final String PERSISTENCE_UNIT_NAME = "appcatalog_data";
+    private static final String GOV_REG_JDBC_DRIVER = "appcatalog.jdbc.driver";
+    private static final String GOV_REG_JDBC_URL = "appcatalog.jdbc.url";
+    private static final String GOV_REG_JDBC_USER = "appcatalog.jdbc.user";
+    private static final String GOV_REG_JDBC_PWD = "appcatalog.jdbc.password";
+    private static final String GOV_REG_VALIDATION_QUERY = "appcatalog.validationQuery";
+    private static final String JPA_CACHE_SIZE = "jpa.cache.size";
+    private static final String JPA_CACHE_ENABLED = "cache.enable";
+
+    @PersistenceUnit(unitName = "airavata-gov-registry")
+    protected static EntityManagerFactory factory;
+    @PersistenceContext(unitName = "airavata-gov-registry")
+    private static EntityManager appCatEntityManager;
+
+    public static EntityManager getEntityManager() throws ApplicationSettingsException {
+        if (factory == null) {
+//            String connectionProperties = "DriverClassName=" + readServerProperties(GOV_REG_JDBC_DRIVER) + "," +
+//                    "Url=" + readServerProperties(GOV_REG_JDBC_URL) + "?autoReconnect=true," +
+//                    "Username=" + readServerProperties(GOV_REG_JDBC_USER) + "," +
+//                    "Password=" + readServerProperties(GOV_REG_JDBC_PWD) +
+//                    ",validationQuery=" + readServerProperties(GOV_REG_VALIDATION_QUERY);
+//
+            String connectionProperties = "jdbc:mysql://localhost:3306/airavata_gov_registry;create=true;user=root;password=";
+
+            Map<String, String> properties = new HashMap<String, String>();
+            properties.put("openjpa.ConnectionDriverName", "org.apache.commons.dbcp.BasicDataSource");
+            properties.put("openjpa.ConnectionProperties", connectionProperties);
+            properties.put("openjpa.DynamicEnhancementAgent", "true");
+            properties.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
+            // For app catalog, we don't need caching
+//            properties.put("openjpa.DataCache","" + readServerProperties(JPA_CACHE_ENABLED) + "(CacheSize=" + Integer.valueOf(readServerProperties(JPA_CACHE_SIZE)) + ", SoftReferenceSize=0)");
+//            properties.put("openjpa.QueryCache","" + readServerProperties(JPA_CACHE_ENABLED) + "(CacheSize=" + Integer.valueOf(readServerProperties(JPA_CACHE_SIZE)) + ", SoftReferenceSize=0)");
+            properties.put("openjpa.RemoteCommitProvider", "sjvm");
+            properties.put("openjpa.Log", "DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=INFO");
+            properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
+            properties.put("openjpa.jdbc.QuerySQLCache", "false");
+            properties.put("openjpa.ConnectionFactoryProperties", "PrettyPrint=true, PrettyPrintLineLength=72," +
+                    " PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=31536000,  autoReconnect=true");
+            factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
+        }
+        appCatEntityManager = factory.createEntityManager();
+        return appCatEntityManager;
+    }
+
+    private static String readServerProperties(String propertyName) throws ApplicationSettingsException {
+        try {
+            return ServerSettings.getSetting(propertyName);
+        } catch (ApplicationSettingsException e) {
+            logger.error("Unable to read airavata-server.properties...", e);
+            throw new ApplicationSettingsException("Unable to read airavata-server.properties...");
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServer.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServer.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServer.java
new file mode 100644
index 0000000..276c99e
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServer.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.gov.registry.server;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GovRegistryServer {
+    private final static Logger logger = LoggerFactory.getLogger(GovRegistryServer.class);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServerHandler.java
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServerHandler.java b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServerHandler.java
new file mode 100644
index 0000000..2fdfb7e
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/java/org/apache/airavata/gov/registry/server/GovRegistryServerHandler.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.gov.registry.server;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GovRegistryServerHandler {
+    private final static Logger logger = LoggerFactory.getLogger(GovRegistryServerHandler.class);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-core/src/main/resources/gov-registry.sql
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-core/src/main/resources/gov-registry.sql b/airavata-gov-registry/airavata-gov-registry-core/src/main/resources/gov-registry.sql
new file mode 100644
index 0000000..239ecde
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-core/src/main/resources/gov-registry.sql
@@ -0,0 +1,116 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+CREATE TABLE DOMAIN (
+  DOMAIN_ID VARCHAR(255),
+  NAME VARCHAR(255),
+  DESCRIPTION VARCHAR(255),
+  CREATED_TIME LONG,
+  UPDATED_TIME LONG,
+  PRIMARY KEY (DOMAIN_ID)
+);
+
+CREATE TABLE USER (
+  USER_ID VARCHAR(255),
+  DOMAIN_ID VARCHAR(255),
+  USER_NAME VARCHAR(255),
+  CREATED_TIME LONG,
+  UPDATED_TIME LONG,
+  PRIMARY KEY (USER_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID)
+);
+
+CREATE TABLE USER_GROUP (
+  GROUP_ID VARCHAR(255),
+  DOMAIN_ID VARCHAR(255),
+  NAME VARCHAR(255),
+  DESCRIPTION VARCHAR(255),
+  OWNER_ID VARCHAR(255),
+  TYPE VARCHAR(255),
+  CREATED_TIME LONG,
+  UPDATED_TIME LONG,
+  PRIMARY KEY (GROUP_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID),
+  FOREIGN KEY (OWNER_ID) REFERENCES USER(USER_ID)
+);
+
+
+CREATE TABLE GROUP_MEMBERSHIP (
+  PARENT_ID VARCHAR(255),
+  CHILD_ID VARCHAR(255),
+  CHILD_TYPE VARCHAR(255),
+  PRIMARY KEY (PARENT_ID, CHILD_ID),
+  FOREIGN KEY (PARENT_ID) REFERENCES USER_GROUP(GROUP_ID),
+  FOREIGN KEY (CHILD_ID) REFERENCES USER_GROUP(GROUP_ID)
+);
+
+CREATE TABLE ENTITY_TYPE (
+  ENTITY_TYPE_ID VARCHAR(255),
+  DOMAIN_ID VARCHAR(255),
+  NAME VARCHAR(255),
+  DESCRIPTION VARCHAR(255),
+  CREATED_TIME LONG,
+  UPDATED_TIME LONG,
+  PRIMARY KEY (ENTITY_TYPE_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID)
+);
+
+CREATE TABLE PERMISSION_TYPE (
+  PERMISSION_TYPE_ID VARCHAR(255),
+  DOMAIN_ID VARCHAR(255),
+  NAME VARCHAR(255),
+  CREATED_TIME LONG,
+  UPDATED_TIME LONG,
+  PRIMARY KEY (PERMISSION_TYPE_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID)
+);
+
+CREATE TABLE ENTITY (
+  ENTITY_ID VARCHAR(255),
+  DOMAIN_ID VARCHAR(255),
+  ENITY_TYPE VARCHAR(255),
+  OWNER_ID VARCHAR(255),
+  PARENT_ENTITY_TYPE VARCHAR(255),
+  PARENT_ENTITY_ID VARCHAR(255),
+  NAME VARCHAR(255),
+  DESCRIPTION VARCHAR(255),
+  METADATA BLOB,
+  FULL_TEXT TEXT,
+  CREATED_TIME LONG,
+  UPDATED_TIME LONG,
+  PRIMARY KEY (ENTITY_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID),
+  FOREIGN KEY (ENITY_TYPE) REFERENCES ENTITY_TYPE(ENTITY_TYPE_ID),
+  FOREIGN KEY (OWNER_ID) REFERENCES USER(USER_ID),
+  FOREIGN KEY (PARENT_ENTITY_TYPE) REFERENCES ENTITY_TYPE(ENTITY_TYPE_ID),
+  FOREIGN KEY (PARENT_ENTITY_ID) REFERENCES ENTITY(ENTITY_ID)
+);
+
+CREATE TABLE SHARING (
+  PERMISSION_TYPE_ID VARCHAR(255),
+  ENTITY_TYPE_ID VARCHAR(255),
+  ENTITY_ID VARCHAR(255),
+  GROUP_ID VARCHAR(255),
+  PRIMARY KEY (PERMISSION_TYPE_ID, ENTITY_ID, GROUP_ID),
+  FOREIGN KEY (PERMISSION_TYPE_ID) REFERENCES PERMISSION_TYPE(PERMISSION_TYPE_ID),
+  FOREIGN KEY (ENTITY_TYPE_ID) REFERENCES  ENTITY_TYPE(ENTITY_TYPE_ID),
+  FOREIGN KEY (GROUP_ID) REFERENCES USER_GROUP(GROUP_ID)
+)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4f9e7dcd/airavata-gov-registry/airavata-gov-registry-stubs/pom.xml
----------------------------------------------------------------------
diff --git a/airavata-gov-registry/airavata-gov-registry-stubs/pom.xml b/airavata-gov-registry/airavata-gov-registry-stubs/pom.xml
new file mode 100644
index 0000000..72ec866
--- /dev/null
+++ b/airavata-gov-registry/airavata-gov-registry-stubs/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>gov-registry</artifactId>
+        <groupId>org.apache.airavata</groupId>
+        <relativePath>../pom.xml</relativePath>
+        <version>${global.version}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>airavata-gov-registry-stubs</artifactId>
+
+
+</project>
\ No newline at end of file