Repository: incubator-ranger
Updated Branches:
  refs/heads/master 7ecfa0536 -> 53709aad8


RANGER-300 : Preserve ids during migration

Signed-off-by: Velmurugan Periasamy <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/53709aad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/53709aad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/53709aad

Branch: refs/heads/master
Commit: 53709aad8bca8b326c81766738a4ffbaeff66fb8
Parents: 7ecfa05
Author: Gautam Borad <[email protected]>
Authored: Tue Apr 7 20:26:53 2015 +0530
Committer: Velmurugan Periasamy <[email protected]>
Committed: Tue Apr 7 14:28:32 2015 -0400

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   |  26 +-
 .../org/apache/ranger/common/AppConstants.java  |   8 +
 .../apache/ranger/db/RangerDaoManagerBase.java  |  20 ++
 .../java/org/apache/ranger/db/XXPolicyDao.java  |   8 +
 .../ranger/db/XXPolicyWithAssignedIdDao.java    |  12 +
 .../java/org/apache/ranger/db/XXServiceDao.java |   8 +
 .../ranger/db/XXServiceWithAssignedIdDao.java   |  12 +
 .../java/org/apache/ranger/entity/XXPolicy.java | 291 +---------------
 .../org/apache/ranger/entity/XXPolicyBase.java  | 287 ++++++++++++++++
 .../ranger/entity/XXPolicyWithAssignedId.java   |  57 +++
 .../org/apache/ranger/entity/XXService.java     | 343 +------------------
 .../org/apache/ranger/entity/XXServiceBase.java | 333 ++++++++++++++++++
 .../ranger/entity/XXServiceWithAssignedId.java  |  59 ++++
 .../ranger/patch/PatchMigration_J10002.java     |  49 +++
 .../ranger/service/RangerPolicyService.java     | 147 +-------
 .../ranger/service/RangerPolicyServiceBase.java | 165 ++++++++-
 .../RangerPolicyWithAssignedIdService.java      |  61 ++++
 .../ranger/service/RangerServiceService.java    |  29 +-
 .../service/RangerServiceServiceBase.java       |  28 +-
 .../RangerServiceWithAssignedIdService.java     |  60 ++++
 .../resources/META-INF/jpa_named_queries.xml    |   8 +
 21 files changed, 1222 insertions(+), 789 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 6333b09..2506d66 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -98,11 +98,13 @@ import 
org.apache.ranger.plugin.model.RangerServiceDef.RangerServiceConfigDef;
 import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
 import org.apache.ranger.plugin.store.AbstractServiceStore;
 import org.apache.ranger.plugin.util.ServicePolicies;
+import org.apache.ranger.service.RangerPolicyWithAssignedIdService;
 import org.apache.ranger.service.RangerAuditFields;
 import org.apache.ranger.service.RangerDataHistService;
 import org.apache.ranger.service.RangerPolicyService;
 import org.apache.ranger.service.RangerServiceDefService;
 import org.apache.ranger.service.RangerServiceService;
+import org.apache.ranger.service.RangerServiceWithAssignedIdService;
 import org.apache.ranger.service.XUserService;
 import org.apache.ranger.view.RangerPolicyList;
 import org.apache.ranger.view.RangerServiceDefList;
@@ -159,6 +161,12 @@ public class ServiceDBStore extends AbstractServiceStore {
     
     @Autowired
     RangerBizUtil bizUtil;
+    
+    @Autowired
+    RangerPolicyWithAssignedIdService assignedIdPolicyService;
+    
+    @Autowired
+    RangerServiceWithAssignedIdService svcServiceWithAssignedId;
 
        private static volatile boolean legacyServiceDefsInitDone = false;
        private Boolean populateExistingBaseFields = false;
@@ -444,9 +452,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                        service.setVersion(new Long(1));
                        
                        if(populateExistingBaseFields) {
-                               svcService.setPopulateExistingBaseFields(true);
-                               service = svcService.create(service);
-                               svcService.setPopulateExistingBaseFields(false);
+                               
svcServiceWithAssignedId.setPopulateExistingBaseFields(true);
+                               service = 
svcServiceWithAssignedId.create(service);
+                               
svcServiceWithAssignedId.setPopulateExistingBaseFields(false);
                                createDefaultPolicy = false;
                        } else {
                                service = svcService.create(service);
@@ -548,9 +556,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                service.setVersion(version);
 
                if(populateExistingBaseFields) {
-                       svcService.setPopulateExistingBaseFields(true);
-                       service = svcService.update(service);
-                       svcService.setPopulateExistingBaseFields(false);
+                       
svcServiceWithAssignedId.setPopulateExistingBaseFields(true);
+                       service = svcServiceWithAssignedId.update(service);
+                       
svcServiceWithAssignedId.setPopulateExistingBaseFields(false);
                } else {
                        service = svcService.update(service);
                }
@@ -716,9 +724,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                policy.setVersion(new Long(1));
 
                if(populateExistingBaseFields) {
-                       policyService.setPopulateExistingBaseFields(true);
-                       policy = policyService.create(policy);
-                       policyService.setPopulateExistingBaseFields(false);
+                       
assignedIdPolicyService.setPopulateExistingBaseFields(true);
+                       policy = assignedIdPolicyService.create(policy);
+                       
assignedIdPolicyService.setPopulateExistingBaseFields(false);
                } else {
                        policy = policyService.create(policy);
                }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java 
b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
index a5ecff7..f9eb61b 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
@@ -505,6 +505,14 @@ public class AppConstants extends RangerCommonEnums {
         * CLASS_TYPE_XA_SERVICE_DEF is an element of enum ClassTypes. Its 
value is "CLASS_TYPE_XA_SERVICE_DEF".
         */
        public static final int CLASS_TYPE_XA_SERVICE_DEF = 1033;
+       /**
+        * CLASS_TYPE_RANGER_POLICY_WITH_ASSIGNED_ID is an element of enum 
ClassTypes. Its value is "CLASS_TYPE_RANGER_POLICY_WITH_ASSIGNED_ID".
+        */
+       public static final int CLASS_TYPE_RANGER_POLICY_WITH_ASSIGNED_ID = 
1037;
+       /**
+        * CLASS_TYPE_RANGER_SERVICE_WITH_ASSIGNED_ID is an element of enum 
ClassTypes. Its value is "CLASS_TYPE_RANGER_SERVICE_WITH_ASSIGNED_ID".
+        */
+       public static final int CLASS_TYPE_RANGER_SERVICE_WITH_ASSIGNED_ID = 
1038;
 
        /**
         * CLASS_TYPE_RANGER_MODULE_DEF is an element of enum ClassTypes. Its 
value is "CLASS_TYPE_RANGER_MODULE_DEF".

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java 
b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
index 2dd0797..06bb6db 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
@@ -143,6 +143,12 @@ public abstract class RangerDaoManagerBase {
                if (classType == AppConstants.CLASS_TYPE_XA_DATA_HIST) {
                        return getXXDataHist();
                }
+               if (classType == 
AppConstants.CLASS_TYPE_RANGER_POLICY_WITH_ASSIGNED_ID) {
+                       return getXXPolicyWithAssignedId();
+               }
+               if (classType == 
AppConstants.CLASS_TYPE_RANGER_SERVICE_WITH_ASSIGNED_ID) {
+                       return getXXServiceWithAssignedId();
+               }
                if (classType == AppConstants.CLASS_TYPE_RANGER_MODULE_DEF) {
                        return getXXModuleDef();
                }
@@ -263,6 +269,12 @@ public abstract class RangerDaoManagerBase {
                if (className.equals("XXDataHist")) {
                        return getXXDataHist();
                }
+               if (className.equals("XXPolicyWithAssignedId")) {
+                       return getXXPolicyWithAssignedId();
+               }
+               if (className.equals("XXServiceWithAssignedId")) {
+                       return getXXServiceWithAssignedId();
+               }
                if (className.equals("XXModuleDef")) {
                        return getXXModuleDef();
                }
@@ -423,6 +435,14 @@ public abstract class RangerDaoManagerBase {
        public XXDataHistDao getXXDataHist() {
                return new XXDataHistDao(this);
        }
+       
+       public XXPolicyWithAssignedIdDao getXXPolicyWithAssignedId() {
+               return new XXPolicyWithAssignedIdDao(this);
+       }
+       
+       public XXServiceWithAssignedIdDao getXXServiceWithAssignedId() {
+               return new XXServiceWithAssignedIdDao(this);
+       }
 
        public XXModuleDefDao getXXModuleDef(){
                return new XXModuleDefDao(this);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
index 89eff56..c132f3c 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
@@ -47,4 +47,12 @@ public class XXPolicyDao extends BaseDao<XXPolicy> {
                }
        }
 
+       public Long getMaxIdOfXXPolicy() {
+               try {
+                       return (Long) 
getEntityManager().createNamedQuery("XXPolicy.getMaxIdOfXXPolicy").getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/db/XXPolicyWithAssignedIdDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyWithAssignedIdDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyWithAssignedIdDao.java
new file mode 100644
index 0000000..434847b
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyWithAssignedIdDao.java
@@ -0,0 +1,12 @@
+package org.apache.ranger.db;
+
+import org.apache.ranger.common.db.BaseDao;
+import org.apache.ranger.entity.XXPolicyWithAssignedId;
+
+public class XXPolicyWithAssignedIdDao extends BaseDao<XXPolicyWithAssignedId> 
{
+
+       public XXPolicyWithAssignedIdDao(RangerDaoManagerBase daoManager) {
+               super(daoManager);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
index 50d1e94..2ea8b29 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
@@ -29,4 +29,12 @@ public class XXServiceDao extends BaseDao<XXService> {
                }
        }
 
+       public Long getMaxIdOfXXService() {
+               try {
+                       return (Long) 
getEntityManager().createNamedQuery("XXService.getMaxIdOfXXService").getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/db/XXServiceWithAssignedIdDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceWithAssignedIdDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceWithAssignedIdDao.java
new file mode 100644
index 0000000..246c162
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceWithAssignedIdDao.java
@@ -0,0 +1,12 @@
+package org.apache.ranger.db;
+
+import org.apache.ranger.common.db.BaseDao;
+import org.apache.ranger.entity.XXServiceWithAssignedId;
+
+public class XXServiceWithAssignedIdDao extends 
BaseDao<XXServiceWithAssignedId> {
+
+       public XXServiceWithAssignedIdDao(RangerDaoManagerBase daoManager) {
+               super(daoManager);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/entity/XXPolicy.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicy.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicy.java
index abbfeb4..d24695a 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicy.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicy.java
@@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 @Cacheable
 @XmlRootElement
 @Table(name = "x_policy")
-public class XXPolicy extends XXDBBase implements java.io.Serializable {
+public class XXPolicy extends XXPolicyBase implements java.io.Serializable {
        private static final long serialVersionUID = 1L;
        /**
         * id of the XXPolicy
@@ -39,307 +39,36 @@ public class XXPolicy extends XXDBBase implements 
java.io.Serializable {
        @Column(name = "id")
        protected Long id;
 
-       /**
-        * Global Id for the object
-        * <ul>
-        * <li>The maximum length for this attribute is <b>512</b>.
-        * </ul>
-        *
-        */
-       @Column(name = "guid", unique = true, nullable = false, length = 512)
-       protected String guid;
-       
-       /**
-        * version of the XXPolicy
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "version")
-       protected Long version;
-
-       /**
-        * service of the XXPolicy
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "service")
-       protected Long service;
-
-       /**
-        * name of the XXPolicy
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "name")
-       protected String name;
-
-       /**
-        * description of the XXPolicy
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "description")
-       protected String description;
-
-       /**
-        * isEnabled of the XXPolicy
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "is_enabled")
-       protected boolean isEnabled;
-
-       /**
-        * isAuditEnabled of the XXPolicy
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "is_audit_enabled")
-       protected boolean isAuditEnabled;
-
-       /**
-        * This method sets the value to the member attribute <b> id</b> . You
-        * cannot set null to the attribute.
-        * 
-        * @param id
-        *            Value to set member attribute <b> id</b>
-        */
+       @Override
        public void setId(Long id) {
                this.id = id;
        }
 
-       /**
-        * Returns the value for the member attribute <b>id</b>
-        * 
-        * @return Date - value of member attribute <b>id</b> .
-        */
+       @Override
        public Long getId() {
-               return this.id;
-       }
-
-       /**
-        * @return the gUID
-        */
-       public String getGuid() {
-               return guid;
-       }
-
-       /**
-        * @param gUID
-        *            the gUID to set
-        */
-       public void setGuid(String gUID) {
-               guid = gUID;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> version</b> . 
You
-        * cannot set null to the attribute.
-        * 
-        * @param version
-        *            Value to set member attribute <b> version</b>
-        */
-       public void setVersion(Long version) {
-               this.version = version;
+               return id;
        }
 
-       /**
-        * Returns the value for the member attribute <b>version</b>
-        * 
-        * @return Date - value of member attribute <b>version</b> .
-        */
-       public Long getVersion() {
-               return this.version;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> service</b> . 
You
-        * cannot set null to the attribute.
-        * 
-        * @param service
-        *            Value to set member attribute <b> service</b>
-        */
-       public void setService(Long service) {
-               this.service = service;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>service</b>
-        * 
-        * @return Date - value of member attribute <b>service</b> .
-        */
-       public Long getService() {
-               return this.service;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> name</b> . You
-        * cannot set null to the attribute.
-        * 
-        * @param name
-        *            Value to set member attribute <b> name</b>
-        */
-       public void setName(String name) {
-               this.name = name;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>name</b>
-        * 
-        * @return Date - value of member attribute <b>name</b> .
-        */
-       public String getName() {
-               return this.name;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> 
description</b> .
-        * You cannot set null to the attribute.
-        * 
-        * @param description
-        *            Value to set member attribute <b> description</b>
-        */
-       public void setDescription(String description) {
-               this.description = description;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>description</b>
-        * 
-        * @return Date - value of member attribute <b>description</b> .
-        */
-       public String getDescription() {
-               return this.description;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> isEnabled</b> 
.
-        * You cannot set null to the attribute.
-        * 
-        * @param isEnabled
-        *            Value to set member attribute <b> isEnabled</b>
-        */
-       public void setIsEnabled(boolean isEnabled) {
-               this.isEnabled = isEnabled;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>isEnabled</b>
-        * 
-        * @return Date - value of member attribute <b>isEnabled</b> .
-        */
-       public boolean getIsEnabled() {
-               return this.isEnabled;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> 
isAuditEnabled</b>
-        * . You cannot set null to the attribute.
-        * 
-        * @param isAuditEnabled
-        *            Value to set member attribute <b> isAuditEnabled</b>
-        */
-       public void setIsAuditEnabled(boolean isAuditEnabled) {
-               this.isAuditEnabled = isAuditEnabled;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>isAuditEnabled</b>
-        * 
-        * @return Date - value of member attribute <b>isAuditEnabled</b> .
-        */
-       public boolean getIsAuditEnabled() {
-               return this.isAuditEnabled;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see java.lang.Object#equals(java.lang.Object)
-        */
        @Override
        public boolean equals(Object obj) {
-               if(!super.equals(obj)) {
-                       return false;
-               }
-               if (this == obj) {
+               if (this == obj)
                        return true;
-               }
-               if (!super.equals(obj)) {
+               if (!super.equals(obj))
                        return false;
-               }
-               if (getClass() != obj.getClass()) {
+               if (getClass() != obj.getClass())
                        return false;
-               }
                XXPolicy other = (XXPolicy) obj;
-               if (guid == null) {
-                       if (other.guid != null) {
-                               return false;
-                       }
-               } else if (!guid.equals(other.guid)) {
-                       return false;
-               }
-               if (description == null) {
-                       if (other.description != null) {
-                               return false;
-                       }
-               } else if (!description.equals(other.description)) {
-                       return false;
-               }
                if (id == null) {
-                       if (other.id != null) {
-                               return false;
-                       }
-               } else if (!id.equals(other.id)) {
-                       return false;
-               }
-               if (isAuditEnabled != other.isAuditEnabled) {
-                       return false;
-               }
-               if (isEnabled != other.isEnabled) {
-                       return false;
-               }
-               if (name == null) {
-                       if (other.name != null) {
-                               return false;
-                       }
-               } else if (!name.equals(other.name)) {
-                       return false;
-               }
-               if (service == null) {
-                       if (other.service != null) {
+                       if (other.id != null)
                                return false;
-                       }
-               } else if (!service.equals(other.service)) {
+               } else if (!id.equals(other.id))
                        return false;
-               }
-               if (version == null) {
-                       if (other.version != null) {
-                               return false;
-                       }
-               } else if (!version.equals(other.version)) {
-                       return false;
-               }
                return true;
        }
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see java.lang.Object#toString()
-        */
        @Override
        public String toString() {
-               return "XXPolicy [" + super.toString() + " id=" + id + ", 
guid=" + guid
-                               + ", version=" + version + ", service=" + 
service + ", name="
-                               + name + ", description=" + description + ", 
isEnabled="
-                               + isEnabled + ", isAuditEnabled=" + 
isAuditEnabled + "]";
+               return "XXPolicy [id=" + id + "]";
        }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java
new file mode 100644
index 0000000..7ee05c8
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyBase.java
@@ -0,0 +1,287 @@
+package org.apache.ranger.entity;
+
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@MappedSuperclass
+@XmlRootElement
+public abstract class XXPolicyBase extends XXDBBase {
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Global Id for the object
+        * <ul>
+        * <li>The maximum length for this attribute is <b>512</b>.
+        * </ul>
+        *
+        */
+       @Column(name = "guid", unique = true, nullable = false, length = 512)
+       protected String guid;
+
+       /**
+        * version of the XXPolicy
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "version")
+       protected Long version;
+
+       /**
+        * service of the XXPolicy
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "service")
+       protected Long service;
+
+       /**
+        * name of the XXPolicy
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "name")
+       protected String name;
+
+       /**
+        * description of the XXPolicy
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "description")
+       protected String description;
+
+       /**
+        * isEnabled of the XXPolicy
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "is_enabled")
+       protected boolean isEnabled;
+
+       /**
+        * isAuditEnabled of the XXPolicy
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "is_audit_enabled")
+       protected boolean isAuditEnabled;
+
+       /**
+        * @return the gUID
+        */
+       public String getGuid() {
+               return guid;
+       }
+
+       /**
+        * @param gUID
+        *            the gUID to set
+        */
+       public void setGuid(String gUID) {
+               guid = gUID;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> version</b> . 
You
+        * cannot set null to the attribute.
+        * 
+        * @param version
+        *            Value to set member attribute <b> version</b>
+        */
+       public void setVersion(Long version) {
+               this.version = version;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>version</b>
+        * 
+        * @return Date - value of member attribute <b>version</b> .
+        */
+       public Long getVersion() {
+               return this.version;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> service</b> . 
You
+        * cannot set null to the attribute.
+        * 
+        * @param service
+        *            Value to set member attribute <b> service</b>
+        */
+       public void setService(Long service) {
+               this.service = service;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>service</b>
+        * 
+        * @return Date - value of member attribute <b>service</b> .
+        */
+       public Long getService() {
+               return this.service;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> name</b> . You
+        * cannot set null to the attribute.
+        * 
+        * @param name
+        *            Value to set member attribute <b> name</b>
+        */
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>name</b>
+        * 
+        * @return Date - value of member attribute <b>name</b> .
+        */
+       public String getName() {
+               return this.name;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> 
description</b> .
+        * You cannot set null to the attribute.
+        * 
+        * @param description
+        *            Value to set member attribute <b> description</b>
+        */
+       public void setDescription(String description) {
+               this.description = description;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>description</b>
+        * 
+        * @return Date - value of member attribute <b>description</b> .
+        */
+       public String getDescription() {
+               return this.description;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> isEnabled</b> 
.
+        * You cannot set null to the attribute.
+        * 
+        * @param isEnabled
+        *            Value to set member attribute <b> isEnabled</b>
+        */
+       public void setIsEnabled(boolean isEnabled) {
+               this.isEnabled = isEnabled;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>isEnabled</b>
+        * 
+        * @return Date - value of member attribute <b>isEnabled</b> .
+        */
+       public boolean getIsEnabled() {
+               return this.isEnabled;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> 
isAuditEnabled</b>
+        * . You cannot set null to the attribute.
+        * 
+        * @param isAuditEnabled
+        *            Value to set member attribute <b> isAuditEnabled</b>
+        */
+       public void setIsAuditEnabled(boolean isAuditEnabled) {
+               this.isAuditEnabled = isAuditEnabled;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>isAuditEnabled</b>
+        * 
+        * @return Date - value of member attribute <b>isAuditEnabled</b> .
+        */
+       public boolean getIsAuditEnabled() {
+               return this.isAuditEnabled;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see java.lang.Object#equals(java.lang.Object)
+        */
+       @Override
+       public boolean equals(Object obj) {
+               if (!super.equals(obj)) {
+                       return false;
+               }
+               if (this == obj) {
+                       return true;
+               }
+               if (!super.equals(obj)) {
+                       return false;
+               }
+               if (getClass() != obj.getClass()) {
+                       return false;
+               }
+               XXPolicyBase other = (XXPolicyBase) obj;
+               if (guid == null) {
+                       if (other.guid != null) {
+                               return false;
+                       }
+               } else if (!guid.equals(other.guid)) {
+                       return false;
+               }
+               if (description == null) {
+                       if (other.description != null) {
+                               return false;
+                       }
+               } else if (!description.equals(other.description)) {
+                       return false;
+               }
+               if (isAuditEnabled != other.isAuditEnabled) {
+                       return false;
+               }
+               if (isEnabled != other.isEnabled) {
+                       return false;
+               }
+               if (name == null) {
+                       if (other.name != null) {
+                               return false;
+                       }
+               } else if (!name.equals(other.name)) {
+                       return false;
+               }
+               if (service == null) {
+                       if (other.service != null) {
+                               return false;
+                       }
+               } else if (!service.equals(other.service)) {
+                       return false;
+               }
+               if (version == null) {
+                       if (other.version != null) {
+                               return false;
+                       }
+               } else if (!version.equals(other.version)) {
+                       return false;
+               }
+               return true;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see java.lang.Object#toString()
+        */
+       @Override
+       public String toString() {
+               return "XXPolicyBase [" + super.toString() + " guid=" + guid + 
", version=" + version + ", service=" + service
+                               + ", name=" + name + ", description=" + 
description + ", isEnabled=" + isEnabled + ", isAuditEnabled="
+                               + isAuditEnabled + "]";
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyWithAssignedId.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyWithAssignedId.java
 
b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyWithAssignedId.java
new file mode 100644
index 0000000..b5cf6c3
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/entity/XXPolicyWithAssignedId.java
@@ -0,0 +1,57 @@
+package org.apache.ranger.entity;
+
+import javax.persistence.Cacheable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@Entity
+@Cacheable
+@XmlRootElement
+@Table(name = "x_policy")
+public class XXPolicyWithAssignedId extends XXPolicyBase {
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * id of the XXPolicy
+        *
+        */
+       @Id
+       @Column(name = "id")
+       protected Long id;
+
+       @Override
+       public void setId(Long id) {
+               this.id = id;
+       }
+
+       @Override
+       public Long getId() {
+               return id;
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (this == obj)
+                       return true;
+               if (!super.equals(obj))
+                       return false;
+               if (getClass() != obj.getClass())
+                       return false;
+               XXPolicyWithAssignedId other = (XXPolicyWithAssignedId) obj;
+               if (id == null) {
+                       if (other.id != null)
+                               return false;
+               } else if (!id.equals(other.id))
+                       return false;
+               return true;
+       }
+
+       @Override
+       public String toString() {
+               return "XXPolicyWithAssignedId [id=" + id + "]";
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/entity/XXService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXService.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXService.java
index 9d6cf4d..a1efc94 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXService.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXService.java
@@ -18,8 +18,6 @@
  */
 package org.apache.ranger.entity;
 
-import java.util.Date;
-
 import javax.persistence.*;
 import javax.xml.bind.annotation.XmlRootElement;
 
@@ -27,8 +25,9 @@ import javax.xml.bind.annotation.XmlRootElement;
 @Cacheable
 @XmlRootElement
 @Table(name = "x_service")
-public class XXService extends XXDBBase implements java.io.Serializable {
+public class XXService extends XXServiceBase implements java.io.Serializable {
        private static final long serialVersionUID = 1L;
+
        /**
         * id of the XXService
         * <ul>
@@ -40,351 +39,37 @@ public class XXService extends XXDBBase implements 
java.io.Serializable {
        @GeneratedValue(strategy = GenerationType.AUTO, generator = 
"x_service_SEQ")
        @Column(name = "id")
        protected Long id;
-       
-       /**
-        * Global Id for the object
-        * <ul>
-        * <li>The maximum length for this attribute is <b>512</b>.
-        * </ul>
-        *
-        */
-       @Column(name = "guid", unique = true, nullable = false, length = 512)
-       protected String guid;
-
-       /**
-        * version of the XXServiceDef
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "version")
-       protected Long version;
-
-       /**
-        * type of the XXService
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "type")
-       protected Long type;
-
-       /**
-        * name of the XXService
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "name")
-       protected String name;
-
-       /**
-        * policyVersion of the XXService
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "policy_version")
-       protected Long policyVersion;
 
-       /**
-        * policyUpdateTime of the XXService
-        * <ul>
-        * </ul>
-        *
-        */
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name = "policy_update_time")
-       protected Date policyUpdateTime;
-
-       /**
-        * description of the XXService
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "description")
-       protected String description;
-
-       /**
-        * isEnabled of the XXService
-        * <ul>
-        * </ul>
-        *
-        */
-       @Column(name = "is_enabled")
-       protected Boolean isEnabled;
-
-       /**
-        * This method sets the value to the member attribute <b> id</b> . You
-        * cannot set null to the attribute.
-        * 
-        * @param id
-        *            Value to set member attribute <b> id</b>
-        */
+       @Override
        public void setId(Long id) {
                this.id = id;
        }
 
-       /**
-        * Returns the value for the member attribute <b>id</b>
-        * 
-        * @return Date - value of member attribute <b>id</b> .
-        */
+       @Override
        public Long getId() {
-               return this.id;
-       }
-       
-       /**
-        * @return the gUID
-        */
-       public String getGuid() {
-               return this.guid;
-       }
-
-       /**
-        * @param guid
-        *            the gUID to set
-        */
-       public void setGuid(String guid) {
-               this.guid = guid;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> version</b> . 
You
-        * cannot set null to the attribute.
-        * 
-        * @param version
-        *            Value to set member attribute <b> version</b>
-        */
-       public void setVersion(Long version) {
-               this.version = version;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>version</b>
-        * 
-        * @return Date - value of member attribute <b>version</b> .
-        */
-       public Long getVersion() {
-               return this.version;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> type</b> . You
-        * cannot set null to the attribute.
-        * 
-        * @param type
-        *            Value to set member attribute <b> type</b>
-        */
-       public void setType(Long type) {
-               this.type = type;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>type</b>
-        * 
-        * @return Date - value of member attribute <b>type</b> .
-        */
-       public Long getType() {
-               return this.type;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> name</b> . You
-        * cannot set null to the attribute.
-        * 
-        * @param name
-        *            Value to set member attribute <b> name</b>
-        */
-       public void setName(String name) {
-               this.name = name;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>name</b>
-        * 
-        * @return Date - value of member attribute <b>name</b> .
-        */
-       public String getName() {
-               return this.name;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> 
policyVersion</b>
-        * . You cannot set null to the attribute.
-        * 
-        * @param policyVersion
-        *            Value to set member attribute <b> policyVersion</b>
-        */
-       public void setPolicyVersion(Long policyVersion) {
-               this.policyVersion = policyVersion;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>policyVersion</b>
-        * 
-        * @return Date - value of member attribute <b>policyVersion</b> .
-        */
-       public Long getPolicyVersion() {
-               return this.policyVersion;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b>
-        * policyUpdateTime</b> . You cannot set null to the attribute.
-        * 
-        * @param policyUpdateTime
-        *            Value to set member attribute <b> policyUpdateTime</b>
-        */
-       public void setPolicyUpdateTime(Date policyUpdateTime) {
-               this.policyUpdateTime = policyUpdateTime;
+               return id;
        }
 
-       /**
-        * Returns the value for the member attribute <b>policyUpdateTime</b>
-        * 
-        * @return Date - value of member attribute <b>policyUpdateTime</b> .
-        */
-       public Date getPolicyUpdateTime() {
-               return this.policyUpdateTime;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> 
description</b> .
-        * You cannot set null to the attribute.
-        * 
-        * @param description
-        *            Value to set member attribute <b> description</b>
-        */
-       public void setDescription(String description) {
-               this.description = description;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>description</b>
-        * 
-        * @return Date - value of member attribute <b>description</b> .
-        */
-       public String getDescription() {
-               return this.description;
-       }
-
-       /**
-        * This method sets the value to the member attribute <b> isEnabled</b> 
.
-        * You cannot set null to the attribute.
-        * 
-        * @param isEnabled
-        *            Value to set member attribute <b> isEnabled</b>
-        */
-       public void setIsEnabled(Boolean isEnabled) {
-               this.isEnabled = isEnabled;
-       }
-
-       /**
-        * Returns the value for the member attribute <b>isEnabled</b>
-        * 
-        * @return Date - value of member attribute <b>isEnabled</b> .
-        */
-       public Boolean getIsenabled() {
-               return this.isEnabled;
+       @Override
+       public String toString() {
+               return "XXService [id=" + id + "]";
        }
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see java.lang.Object#equals(java.lang.Object)
-        */
        @Override
        public boolean equals(Object obj) {
-               if (!super.equals(obj)) {
-                       return false;
-               }
-               if (this == obj) {
+               if (this == obj)
                        return true;
-               }
-               if (getClass() != obj.getClass()) {
+               if (!super.equals(obj))
                        return false;
-               }
-               XXService other = (XXService) obj;
-               if (description == null) {
-                       if (other.description != null) {
-                               return false;
-                       }
-               } else if (!description.equals(other.description)) {
+               if (getClass() != obj.getClass())
                        return false;
-               }
+               XXService other = (XXService) obj;
                if (id == null) {
-                       if (other.id != null) {
-                               return false;
-                       }
-               } else if (!id.equals(other.id)) {
-                       return false;
-               }
-               if (isEnabled == null) {
-                       if (other.isEnabled != null) {
+                       if (other.id != null)
                                return false;
-                       }
-               } else if (!isEnabled.equals(other.isEnabled)) {
+               } else if (!id.equals(other.id))
                        return false;
-               }
-               if (name == null) {
-                       if (other.name != null) {
-                               return false;
-                       }
-               } else if (!name.equals(other.name)) {
-                       return false;
-               }
-               if (policyUpdateTime == null) {
-                       if (other.policyUpdateTime != null) {
-                               return false;
-                       }
-               } else if (!policyUpdateTime.equals(other.policyUpdateTime)) {
-                       return false;
-               }
-               if (policyVersion == null) {
-                       if (other.policyVersion != null) {
-                               return false;
-                       }
-               } else if (!policyVersion.equals(other.policyVersion)) {
-                       return false;
-               }
-               if (type == null) {
-                       if (other.type != null) {
-                               return false;
-                       }
-               } else if (!type.equals(other.type)) {
-                       return false;
-               }
-               if (version == null) {
-                       if (other.version != null) {
-                               return false;
-                       }
-               } else if (!version.equals(other.version)) {
-                       return false;
-               }
-               if (guid == null) {
-                       if (other.guid != null) {
-                               return false;
-                       }
-               } else if (!guid.equals(other.guid)) {
-                       return false;
-               }
                return true;
        }
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see java.lang.Object#toString()
-        */
-       @Override
-       public String toString() {
-               return "XXService [" + super.toString() + " id=" + id + ", 
guid="
-                               + guid + ", version=" + version + ", type=" + 
type + ", name="
-                               + name + ", policyVersion=" + policyVersion
-                               + ", policyUpdateTime=" + policyUpdateTime + ", 
description="
-                               + description + ", isEnabled=" + isEnabled + 
"]";
-       }
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/entity/XXServiceBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXServiceBase.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXServiceBase.java
new file mode 100644
index 0000000..ad193d4
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXServiceBase.java
@@ -0,0 +1,333 @@
+package org.apache.ranger.entity;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@MappedSuperclass
+@XmlRootElement
+public abstract class XXServiceBase extends XXDBBase {
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Global Id for the object
+        * <ul>
+        * <li>The maximum length for this attribute is <b>512</b>.
+        * </ul>
+        *
+        */
+       @Column(name = "guid", unique = true, nullable = false, length = 512)
+       protected String guid;
+
+       /**
+        * version of the XXServiceDef
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "version")
+       protected Long version;
+
+       /**
+        * type of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "type")
+       protected Long type;
+
+       /**
+        * name of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "name")
+       protected String name;
+
+       /**
+        * policyVersion of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "policy_version")
+       protected Long policyVersion;
+
+       /**
+        * policyUpdateTime of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Temporal(TemporalType.TIMESTAMP)
+       @Column(name = "policy_update_time")
+       protected Date policyUpdateTime;
+
+       /**
+        * description of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "description")
+       protected String description;
+
+       /**
+        * isEnabled of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Column(name = "is_enabled")
+       protected Boolean isEnabled;
+
+       /**
+        * @return the gUID
+        */
+       public String getGuid() {
+               return this.guid;
+       }
+
+       /**
+        * @param guid
+        *            the gUID to set
+        */
+       public void setGuid(String guid) {
+               this.guid = guid;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> version</b> . 
You
+        * cannot set null to the attribute.
+        * 
+        * @param version
+        *            Value to set member attribute <b> version</b>
+        */
+       public void setVersion(Long version) {
+               this.version = version;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>version</b>
+        * 
+        * @return Date - value of member attribute <b>version</b> .
+        */
+       public Long getVersion() {
+               return this.version;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> type</b> . You
+        * cannot set null to the attribute.
+        * 
+        * @param type
+        *            Value to set member attribute <b> type</b>
+        */
+       public void setType(Long type) {
+               this.type = type;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>type</b>
+        * 
+        * @return Date - value of member attribute <b>type</b> .
+        */
+       public Long getType() {
+               return this.type;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> name</b> . You
+        * cannot set null to the attribute.
+        * 
+        * @param name
+        *            Value to set member attribute <b> name</b>
+        */
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>name</b>
+        * 
+        * @return Date - value of member attribute <b>name</b> .
+        */
+       public String getName() {
+               return this.name;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> 
policyVersion</b>
+        * . You cannot set null to the attribute.
+        * 
+        * @param policyVersion
+        *            Value to set member attribute <b> policyVersion</b>
+        */
+       public void setPolicyVersion(Long policyVersion) {
+               this.policyVersion = policyVersion;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>policyVersion</b>
+        * 
+        * @return Date - value of member attribute <b>policyVersion</b> .
+        */
+       public Long getPolicyVersion() {
+               return this.policyVersion;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b>
+        * policyUpdateTime</b> . You cannot set null to the attribute.
+        * 
+        * @param policyUpdateTime
+        *            Value to set member attribute <b> policyUpdateTime</b>
+        */
+       public void setPolicyUpdateTime(Date policyUpdateTime) {
+               this.policyUpdateTime = policyUpdateTime;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>policyUpdateTime</b>
+        * 
+        * @return Date - value of member attribute <b>policyUpdateTime</b> .
+        */
+       public Date getPolicyUpdateTime() {
+               return this.policyUpdateTime;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> 
description</b> .
+        * You cannot set null to the attribute.
+        * 
+        * @param description
+        *            Value to set member attribute <b> description</b>
+        */
+       public void setDescription(String description) {
+               this.description = description;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>description</b>
+        * 
+        * @return Date - value of member attribute <b>description</b> .
+        */
+       public String getDescription() {
+               return this.description;
+       }
+
+       /**
+        * This method sets the value to the member attribute <b> isEnabled</b> 
.
+        * You cannot set null to the attribute.
+        * 
+        * @param isEnabled
+        *            Value to set member attribute <b> isEnabled</b>
+        */
+       public void setIsEnabled(Boolean isEnabled) {
+               this.isEnabled = isEnabled;
+       }
+
+       /**
+        * Returns the value for the member attribute <b>isEnabled</b>
+        * 
+        * @return Date - value of member attribute <b>isEnabled</b> .
+        */
+       public Boolean getIsenabled() {
+               return this.isEnabled;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see java.lang.Object#equals(java.lang.Object)
+        */
+       @Override
+       public boolean equals(Object obj) {
+               if (!super.equals(obj)) {
+                       return false;
+               }
+               if (this == obj) {
+                       return true;
+               }
+               if (getClass() != obj.getClass()) {
+                       return false;
+               }
+               XXServiceBase other = (XXServiceBase) obj;
+               if (description == null) {
+                       if (other.description != null) {
+                               return false;
+                       }
+               } else if (!description.equals(other.description)) {
+                       return false;
+               }
+               if (isEnabled == null) {
+                       if (other.isEnabled != null) {
+                               return false;
+                       }
+               } else if (!isEnabled.equals(other.isEnabled)) {
+                       return false;
+               }
+               if (name == null) {
+                       if (other.name != null) {
+                               return false;
+                       }
+               } else if (!name.equals(other.name)) {
+                       return false;
+               }
+               if (policyUpdateTime == null) {
+                       if (other.policyUpdateTime != null) {
+                               return false;
+                       }
+               } else if (!policyUpdateTime.equals(other.policyUpdateTime)) {
+                       return false;
+               }
+               if (policyVersion == null) {
+                       if (other.policyVersion != null) {
+                               return false;
+                       }
+               } else if (!policyVersion.equals(other.policyVersion)) {
+                       return false;
+               }
+               if (type == null) {
+                       if (other.type != null) {
+                               return false;
+                       }
+               } else if (!type.equals(other.type)) {
+                       return false;
+               }
+               if (version == null) {
+                       if (other.version != null) {
+                               return false;
+                       }
+               } else if (!version.equals(other.version)) {
+                       return false;
+               }
+               if (guid == null) {
+                       if (other.guid != null) {
+                               return false;
+                       }
+               } else if (!guid.equals(other.guid)) {
+                       return false;
+               }
+               return true;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see java.lang.Object#toString()
+        */
+       @Override
+       public String toString() {
+               return "XXServiceBase [" + super.toString() + " guid=" + guid + 
", version=" + version + ", type=" + type
+                               + ", name=" + name + ", policyVersion=" + 
policyVersion + ", policyUpdateTime=" + policyUpdateTime
+                               + ", description=" + description + ", 
isEnabled=" + isEnabled + "]";
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/entity/XXServiceWithAssignedId.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/entity/XXServiceWithAssignedId.java
 
b/security-admin/src/main/java/org/apache/ranger/entity/XXServiceWithAssignedId.java
new file mode 100644
index 0000000..54e88c6
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/entity/XXServiceWithAssignedId.java
@@ -0,0 +1,59 @@
+package org.apache.ranger.entity;
+
+import javax.persistence.Cacheable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@Entity
+@Cacheable
+@XmlRootElement
+@Table(name = "x_service")
+public class XXServiceWithAssignedId extends XXServiceBase {
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * id of the XXService
+        * <ul>
+        * </ul>
+        *
+        */
+       @Id
+       @Column(name = "id")
+       protected Long id;
+
+       @Override
+       public void setId(Long id) {
+               this.id = id;
+       }
+
+       @Override
+       public Long getId() {
+               return id;
+       }
+       
+       @Override
+       public String toString() {
+               return "XXService [id=" + id + "]";
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (this == obj)
+                       return true;
+               if (!super.equals(obj))
+                       return false;
+               if (getClass() != obj.getClass())
+                       return false;
+               XXServiceWithAssignedId other = (XXServiceWithAssignedId) obj;
+               if (id == null) {
+                       if (other.id != null)
+                               return false;
+               } else if (!id.equals(other.id))
+                       return false;
+               return true;
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
 
b/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
index 34b6541..7b97cc1 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.log4j.Logger;
+import org.apache.ranger.biz.RangerBizUtil;
 import org.apache.ranger.biz.ServiceDBStore;
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.JSONUtil;
@@ -62,6 +63,9 @@ public class PatchMigration_J10002 extends BaseLoader {
 
        @Autowired
        XPermMapService xPermMapService;
+       
+       @Autowired
+       RangerBizUtil bizUtil;
 
        private static int policyCounter = 0;
        private static int serviceCounter = 0;
@@ -93,6 +97,7 @@ public class PatchMigration_J10002 extends BaseLoader {
                try {
                        migrateServicesToNewSchema();
                        migratePoliciesToNewSchema();
+                       updateSequences();
                } catch (Exception e) {
                        logger.error("Error whille migrating data.", e);
                }
@@ -410,5 +415,49 @@ public class PatchMigration_J10002 extends BaseLoader {
                }
                return policyItems;
        }
+       
+       private void updateSequences() {
+               
+               if(RangerBizUtil.getDBFlavor() != 
AppConstants.DB_FLAVOR_ORACLE) {
+                       return;
+               }
+               
+               List<String> queryList = new ArrayList<String>();
+               String policySequence = "X_POLICY_SEQ";
+               String svcSequence = "X_SERVICE_SEQ";
+               
+               if(serviceCounter > 0) {
+                       
+                       Long maxSvcId = 
daoMgr.getXXService().getMaxIdOfXXService();
+                       
+                       if(maxSvcId != null) {
+                               String query1 = "ALTER SEQUENCE " + svcSequence 
+ " INCREMENT BY " + maxSvcId;
+                               String query2 = "select " + svcSequence + 
".nextval from dual";
+                               String query3 = "ALTER SEQUENCE " + svcSequence 
+ " INCREMENT BY 1 NOCACHE NOCYCLE";
+                               queryList.add(query1);
+                               queryList.add(query2);
+                               queryList.add(query3);
+                       }
+               }
+               
+               if(policyCounter > 0) {
+                       
+                       Long maxPolId = 
daoMgr.getXXPolicy().getMaxIdOfXXPolicy();
+                       
+                       if(maxPolId != null) {                          
+                               String query1 = "ALTER SEQUENCE " + 
policySequence + " INCREMENT BY " + maxPolId;
+                               String query2 = "select " + policySequence + 
".nextval from dual";
+                               String query3 = "ALTER SEQUENCE " + 
policySequence + " INCREMENT BY 1 NOCACHE NOCYCLE";
+                               queryList.add(query1);
+                               queryList.add(query2);
+                               queryList.add(query3);
+                       }
+               }
+               
+               for(String query : queryList) {
+                       
daoMgr.getEntityManager().createNativeQuery(query).executeUpdate();
+               }
+               
+       }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index 3193407..3fef565 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -10,30 +10,14 @@ import java.util.Map;
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.common.MessageEnums;
-import org.apache.ranger.common.SearchField;
-import org.apache.ranger.common.SortField;
-import org.apache.ranger.common.SearchField.DATA_TYPE;
-import org.apache.ranger.common.SearchField.SEARCH_TYPE;
 import org.apache.ranger.common.view.VTrxLogAttr;
-import org.apache.ranger.db.XXAccessTypeDefDao;
-import org.apache.ranger.db.XXPolicyResourceDao;
-import org.apache.ranger.entity.XXAccessTypeDef;
 import org.apache.ranger.entity.XXPolicy;
-import org.apache.ranger.entity.XXPolicyConditionDef;
-import org.apache.ranger.entity.XXPolicyItem;
-import org.apache.ranger.entity.XXPolicyItemAccess;
-import org.apache.ranger.entity.XXPolicyItemCondition;
-import org.apache.ranger.entity.XXPolicyResource;
-import org.apache.ranger.entity.XXPolicyResourceMap;
-import org.apache.ranger.entity.XXResourceDef;
+import org.apache.ranger.entity.XXPolicyBase;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXTrxLog;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
-import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItemAccess;
-import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItemCondition;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
-import org.apache.ranger.plugin.util.SearchFilter;
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;
@@ -70,33 +54,16 @@ public class RangerPolicyService extends 
RangerPolicyServiceBase<XXPolicy, Range
                actionCreate = "create";
                actionUpdate = "update";
                actionDelete = "delete";
-               
-               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, 
"xSvcDef.name", DATA_TYPE.STRING, 
-                               SEARCH_TYPE.FULL, "XXServiceDef xSvcDef, 
XXService xSvc", "xSvc.type = xSvcDef.id and xSvc.id = obj.service"));
-               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, 
"xSvc.type", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL, 
-                               "XXService xSvc", "xSvc.id = obj.service"));
-               searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, 
"xSvc.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, 
-                               "XXService xSvc", "xSvc.id = obj.service"));
-               searchFields.add(new SearchField(SearchFilter.SERVICE_ID, 
"xSvc.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL, 
-                               "XXService xSvc", "xSvc.id = obj.service"));
-               searchFields.add(new SearchField(SearchFilter.IS_ENABLED, 
"obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.POLICY_ID, 
"obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.POLICY_NAME, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.USER, 
"xUser.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, 
-                               "XXUser xUser, XXPolicyItem xPolItem, 
XXPolicyItemUserPerm userPerm", "obj.id = xPolItem.policyId "
-                                               + "and userPerm.policyItemId = 
xPolItem.id and xUser.id = userPerm.userId"));
-               searchFields.add(new SearchField(SearchFilter.GROUP, 
"xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, 
-                               "XXGroup xGrp, XXPolicyItem xPolItem, 
XXPolicyItemGroupPerm grpPerm", "obj.id = xPolItem.policyId "
-                                               + "and grpPerm.policyItemId = 
xPolItem.id and xGrp.id = grpPerm.groupId"));
-               searchFields.add(new SearchField(SearchFilter.POL_RESOURCE, 
"resMap.value", DATA_TYPE.STRING,
-                               SEARCH_TYPE.PARTIAL, "XXPolicyResourceMap 
resMap, XXPolicyResource polRes",
-                               "resMap.resourceId = polRes.id and 
polRes.policyId = obj.id"));
-               searchFields.add(new 
SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING, 
SEARCH_TYPE.PARTIAL));
-               
-               sortFields.add(new SortField(SearchFilter.CREATE_TIME, 
"obj.createTime"));
-               sortFields.add(new SortField(SearchFilter.UPDATE_TIME, 
"obj.updateTime"));
-               sortFields.add(new SortField(SearchFilter.POLICY_ID, "obj.id"));
-               sortFields.add(new SortField(SearchFilter.POLICY_NAME, 
"obj.name"));
+       }
+
+       @Override
+       protected XXPolicy mapViewToEntityBean(RangerPolicy vObj, XXPolicy 
xObj, int OPERATION_CONTEXT) {
+               return (XXPolicy)super.mapViewToEntityBean(vObj, 
(XXPolicyBase)xObj, OPERATION_CONTEXT);
+       }
+
+       @Override
+       protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicy 
xObj) {
+               return super.mapEntityToViewBean(vObj, (XXPolicyBase)xObj);
        }
        
        @Override
@@ -124,98 +91,6 @@ public class RangerPolicyService extends 
RangerPolicyServiceBase<XXPolicy, Range
                return vPolicy;
        }
        
-       public List<RangerPolicyItem> getPolicyItemListForXXPolicy(XXPolicy 
xPolicy) {
-               
-               List<RangerPolicyItem> policyItems = new 
ArrayList<RangerPolicyItem>();
-               List<XXPolicyItem> xPolicyItemList = 
daoMgr.getXXPolicyItem().findByPolicyId(xPolicy.getId());
-               
-               for(XXPolicyItem xPolItem : xPolicyItemList) {
-                       RangerPolicyItem policyItem = 
populateXXToRangerPolicyItem(xPolItem);
-                       policyItems.add(policyItem);
-               }
-               return policyItems;
-       }
-
-       public RangerPolicyItem populateXXToRangerPolicyItem(XXPolicyItem 
xPolItem) {
-               
-               RangerPolicyItem rangerPolItem = new RangerPolicyItem();
-               
-               List<XXPolicyItemAccess> xPolItemAccList = daoMgr
-                               
.getXXPolicyItemAccess().findByPolicyItemId(xPolItem.getId());
-               List<RangerPolicyItemAccess> accesses = new 
ArrayList<RangerPolicyItemAccess>();
-               
-               XXAccessTypeDefDao xAccDefDao = daoMgr.getXXAccessTypeDef();
-               for(XXPolicyItemAccess xPolAccess : xPolItemAccList) {
-                       RangerPolicyItemAccess access = new 
RangerPolicyItemAccess();
-                       access.setIsAllowed(xPolAccess.getIsallowed());
-                       XXAccessTypeDef xAccessType = 
xAccDefDao.getById(xPolAccess.getType());
-                       access.setType(xAccessType.getName());
-                       
-                       accesses.add(access);
-               }
-               rangerPolItem.setAccesses(accesses);
-               
-               List<RangerPolicyItemCondition> conditions = new 
ArrayList<RangerPolicyItemCondition>();
-               List<XXPolicyConditionDef> xConditionDefList = daoMgr
-                               .getXXPolicyConditionDef()
-                               .findByPolicyItemId(xPolItem.getId());
-               for(XXPolicyConditionDef xCondDef : xConditionDefList) {
-                       
-                       List<XXPolicyItemCondition> xPolCondItemList = daoMgr
-                                       
.getXXPolicyItemCondition().findByPolicyItemAndDefId(
-                                                       xPolItem.getId(), 
xCondDef.getId());
-                       List<String> values = new ArrayList<String>();
-                       
-                       for(XXPolicyItemCondition polCond : xPolCondItemList) {
-                               values.add(polCond.getValue());
-                       }
-                       
-                       RangerPolicyItemCondition condition = new 
RangerPolicyItemCondition();
-                       condition.setType(xCondDef.getName());
-                       condition.setValues(values);
-                       
-                       conditions.add(condition);
-               }
-               rangerPolItem.setConditions(conditions);
-               
-               List<String> userList = 
daoMgr.getXXUser().findByPolicyItemId(xPolItem.getId());
-               List<String> grpList = 
daoMgr.getXXGroup().findByPolicyItemId(xPolItem.getId());
-               
-               rangerPolItem.setUsers(userList);
-               rangerPolItem.setGroups(grpList);
-               
-               rangerPolItem.setDelegateAdmin(xPolItem.getDelegateAdmin());
-               return rangerPolItem;
-       }
-
-       public Map<String, RangerPolicyResource> 
getResourcesForXXPolicy(XXPolicy xPolicy) {
-               List<XXResourceDef> resDefList = 
daoMgr.getXXResourceDef().findByPolicyId(xPolicy.getId());
-               Map<String, RangerPolicyResource> resources = new 
HashMap<String, RangerPolicyResource>();
-               
-               XXPolicyResourceDao xPolResDao = daoMgr.getXXPolicyResource();
-               for(XXResourceDef xResDef : resDefList) {
-                       XXPolicyResource xPolRes = 
xPolResDao.findByResDefIdAndPolicyId(
-                                       xResDef.getId(), xPolicy.getId());
-                       if(xPolRes == null) {
-                               continue;
-                       }
-                       List<String> values = new ArrayList<>();
-                       List<XXPolicyResourceMap> xPolResMapList = daoMgr
-                                       .getXXPolicyResourceMap()
-                                       .findByPolicyResId(xPolRes.getId());
-                       for(XXPolicyResourceMap xPolResMap : xPolResMapList) {
-                               values.add(xPolResMap.getValue());
-                       }
-                       RangerPolicyResource resource = new 
RangerPolicyResource();
-                       resource.setValues(values);
-                       resource.setIsExcludes(xPolRes.getIsexcludes());
-                       resource.setIsRecursive(xPolRes.getIsrecursive());
-                       
-                       resources.put(xResDef.getName(), resource);
-               }
-               return resources;
-       }
-       
        public RangerPolicy getPopulatedViewObject(XXPolicy xPolicy) {
                return this.populateViewBean(xPolicy);
        }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
index 58c2b69..290d85c 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
@@ -1,46 +1,98 @@
 package org.apache.ranger.service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.GUIDUtil;
 import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.common.SearchField;
+import org.apache.ranger.common.SortField;
+import org.apache.ranger.common.SearchField.DATA_TYPE;
+import org.apache.ranger.common.SearchField.SEARCH_TYPE;
+import org.apache.ranger.db.XXAccessTypeDefDao;
+import org.apache.ranger.db.XXPolicyResourceDao;
+import org.apache.ranger.entity.XXAccessTypeDef;
 import org.apache.ranger.entity.XXPolicy;
+import org.apache.ranger.entity.XXPolicyBase;
+import org.apache.ranger.entity.XXPolicyConditionDef;
+import org.apache.ranger.entity.XXPolicyItem;
+import org.apache.ranger.entity.XXPolicyItemAccess;
+import org.apache.ranger.entity.XXPolicyItemCondition;
+import org.apache.ranger.entity.XXPolicyResource;
+import org.apache.ranger.entity.XXPolicyResourceMap;
+import org.apache.ranger.entity.XXResourceDef;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.plugin.model.RangerPolicy;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItemAccess;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItemCondition;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.view.RangerPolicyList;
 
-public abstract class RangerPolicyServiceBase<T extends XXPolicy, V extends 
RangerPolicy> extends RangerBaseModelService<T, V> {
-       
+public abstract class RangerPolicyServiceBase<T extends XXPolicyBase, V 
extends RangerPolicy> extends
+               RangerBaseModelService<T, V> {
+
+       public RangerPolicyServiceBase() {
+               super();
+               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, 
"xSvcDef.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
+                               "XXServiceDef xSvcDef, XXService xSvc", 
"xSvc.type = xSvcDef.id and xSvc.id = obj.service"));
+               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, 
"xSvc.type", DATA_TYPE.INTEGER,
+                               SEARCH_TYPE.FULL, "XXService xSvc", "xSvc.id = 
obj.service"));
+               searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, 
"xSvc.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
+                               "XXService xSvc", "xSvc.id = obj.service"));
+               searchFields.add(new SearchField(SearchFilter.SERVICE_ID, 
"xSvc.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL,
+                               "XXService xSvc", "xSvc.id = obj.service"));
+               searchFields
+                               .add(new SearchField(SearchFilter.IS_ENABLED, 
"obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.POLICY_ID, 
"obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.POLICY_NAME, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.USER, 
"xUser.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
+                               "XXUser xUser, XXPolicyItem xPolItem, 
XXPolicyItemUserPerm userPerm", "obj.id = xPolItem.policyId "
+                                               + "and userPerm.policyItemId = 
xPolItem.id and xUser.id = userPerm.userId"));
+               searchFields.add(new SearchField(SearchFilter.GROUP, 
"xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
+                               "XXGroup xGrp, XXPolicyItem xPolItem, 
XXPolicyItemGroupPerm grpPerm", "obj.id = xPolItem.policyId "
+                                               + "and grpPerm.policyItemId = 
xPolItem.id and xGrp.id = grpPerm.groupId"));
+               searchFields.add(new SearchField(SearchFilter.POL_RESOURCE, 
"resMap.value", DATA_TYPE.STRING,
+                               SEARCH_TYPE.PARTIAL, "XXPolicyResourceMap 
resMap, XXPolicyResource polRes",
+                               "resMap.resourceId = polRes.id and 
polRes.policyId = obj.id"));
+               searchFields.add(new 
SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING,
+                               SEARCH_TYPE.PARTIAL));
+
+               sortFields.add(new SortField(SearchFilter.CREATE_TIME, 
"obj.createTime"));
+               sortFields.add(new SortField(SearchFilter.UPDATE_TIME, 
"obj.updateTime"));
+               sortFields.add(new SortField(SearchFilter.POLICY_ID, "obj.id"));
+               sortFields.add(new SortField(SearchFilter.POLICY_NAME, 
"obj.name"));
+       }
+
        @Override
        @SuppressWarnings("unchecked")
-       protected XXPolicy mapViewToEntityBean(RangerPolicy vObj, XXPolicy 
xObj, int OPERATION_CONTEXT) {
+       protected XXPolicyBase mapViewToEntityBean(RangerPolicy vObj, 
XXPolicyBase xObj, int OPERATION_CONTEXT) {
                String guid = (StringUtils.isEmpty(vObj.getGuid())) ? 
GUIDUtil.genGUI() : vObj.getGuid();
-               
+
                xObj.setGuid(guid);
                xObj.setVersion(vObj.getVersion());
-               
+
                XXService xService = 
daoMgr.getXXService().findByName(vObj.getService());
-               if(xService == null) {
-                       throw restErrorUtil.createRESTException(
-                                       "No corresponding service found for 
policyName: "
-                                                       + vObj.getName() + 
"Service Not Found : "
-                                                       + vObj.getName(), 
MessageEnums.INVALID_INPUT_DATA);
+               if (xService == null) {
+                       throw restErrorUtil.createRESTException("No 
corresponding service found for policyName: " + vObj.getName()
+                                       + "Service Not Found : " + 
vObj.getName(), MessageEnums.INVALID_INPUT_DATA);
                }
                xObj.setService(xService.getId());
                xObj.setName(vObj.getName());
                xObj.setDescription(vObj.getDescription());
                xObj.setIsAuditEnabled(vObj.getIsAuditEnabled());
                xObj.setIsEnabled(vObj.getIsEnabled());
-               
+
                return xObj;
        }
 
        @Override
        @SuppressWarnings("unchecked")
-       protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicy 
xObj) {
+       protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, 
XXPolicyBase xObj) {
                XXService xService = 
daoMgr.getXXService().getById(xObj.getService());
                vObj.setGuid(xObj.getGuid());
                vObj.setVersion(xObj.getVersion());
@@ -56,7 +108,7 @@ public abstract class RangerPolicyServiceBase<T extends 
XXPolicy, V extends Rang
        public RangerPolicyList searchRangerPolicies(SearchFilter searchFilter) 
{
                List<RangerPolicy> policyList = new ArrayList<RangerPolicy>();
                RangerPolicyList retList = new RangerPolicyList();
-               
+
                List<XXPolicy> xPolList = (List<XXPolicy>) 
searchResources(searchFilter, searchFields, sortFields, retList);
                for (XXPolicy xPol : xPolList) {
                        policyList.add(populateViewBean((T) xPol));
@@ -66,4 +118,91 @@ public abstract class RangerPolicyServiceBase<T extends 
XXPolicy, V extends Rang
                return retList;
        }
 
+       public List<RangerPolicyItem> getPolicyItemListForXXPolicy(XXPolicyBase 
xPolicy) {
+
+               List<RangerPolicyItem> policyItems = new 
ArrayList<RangerPolicyItem>();
+               List<XXPolicyItem> xPolicyItemList = 
daoMgr.getXXPolicyItem().findByPolicyId(xPolicy.getId());
+
+               for (XXPolicyItem xPolItem : xPolicyItemList) {
+                       RangerPolicyItem policyItem = 
populateXXToRangerPolicyItem(xPolItem);
+                       policyItems.add(policyItem);
+               }
+               return policyItems;
+       }
+
+       public RangerPolicyItem populateXXToRangerPolicyItem(XXPolicyItem 
xPolItem) {
+
+               RangerPolicyItem rangerPolItem = new RangerPolicyItem();
+
+               List<XXPolicyItemAccess> xPolItemAccList = 
daoMgr.getXXPolicyItemAccess().findByPolicyItemId(xPolItem.getId());
+               List<RangerPolicyItemAccess> accesses = new 
ArrayList<RangerPolicyItemAccess>();
+
+               XXAccessTypeDefDao xAccDefDao = daoMgr.getXXAccessTypeDef();
+               for (XXPolicyItemAccess xPolAccess : xPolItemAccList) {
+                       RangerPolicyItemAccess access = new 
RangerPolicyItemAccess();
+                       access.setIsAllowed(xPolAccess.getIsallowed());
+                       XXAccessTypeDef xAccessType = 
xAccDefDao.getById(xPolAccess.getType());
+                       access.setType(xAccessType.getName());
+
+                       accesses.add(access);
+               }
+               rangerPolItem.setAccesses(accesses);
+
+               List<RangerPolicyItemCondition> conditions = new 
ArrayList<RangerPolicyItemCondition>();
+               List<XXPolicyConditionDef> xConditionDefList = 
daoMgr.getXXPolicyConditionDef().findByPolicyItemId(
+                               xPolItem.getId());
+               for (XXPolicyConditionDef xCondDef : xConditionDefList) {
+
+                       List<XXPolicyItemCondition> xPolCondItemList = 
daoMgr.getXXPolicyItemCondition().findByPolicyItemAndDefId(
+                                       xPolItem.getId(), xCondDef.getId());
+                       List<String> values = new ArrayList<String>();
+
+                       for (XXPolicyItemCondition polCond : xPolCondItemList) {
+                               values.add(polCond.getValue());
+                       }
+
+                       RangerPolicyItemCondition condition = new 
RangerPolicyItemCondition();
+                       condition.setType(xCondDef.getName());
+                       condition.setValues(values);
+
+                       conditions.add(condition);
+               }
+               rangerPolItem.setConditions(conditions);
+
+               List<String> userList = 
daoMgr.getXXUser().findByPolicyItemId(xPolItem.getId());
+               List<String> grpList = 
daoMgr.getXXGroup().findByPolicyItemId(xPolItem.getId());
+
+               rangerPolItem.setUsers(userList);
+               rangerPolItem.setGroups(grpList);
+
+               rangerPolItem.setDelegateAdmin(xPolItem.getDelegateAdmin());
+               return rangerPolItem;
+       }
+
+       public Map<String, RangerPolicyResource> 
getResourcesForXXPolicy(XXPolicyBase xPolicy) {
+               List<XXResourceDef> resDefList = 
daoMgr.getXXResourceDef().findByPolicyId(xPolicy.getId());
+               Map<String, RangerPolicyResource> resources = new 
HashMap<String, RangerPolicyResource>();
+
+               XXPolicyResourceDao xPolResDao = daoMgr.getXXPolicyResource();
+               for (XXResourceDef xResDef : resDefList) {
+                       XXPolicyResource xPolRes = 
xPolResDao.findByResDefIdAndPolicyId(xResDef.getId(), xPolicy.getId());
+                       if (xPolRes == null) {
+                               continue;
+                       }
+                       List<String> values = new ArrayList<>();
+                       List<XXPolicyResourceMap> xPolResMapList = 
daoMgr.getXXPolicyResourceMap().findByPolicyResId(
+                                       xPolRes.getId());
+                       for (XXPolicyResourceMap xPolResMap : xPolResMapList) {
+                               values.add(xPolResMap.getValue());
+                       }
+                       RangerPolicyResource resource = new 
RangerPolicyResource();
+                       resource.setValues(values);
+                       resource.setIsExcludes(xPolRes.getIsexcludes());
+                       resource.setIsRecursive(xPolRes.getIsrecursive());
+
+                       resources.put(xResDef.getName(), resource);
+               }
+               return resources;
+       }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
new file mode 100644
index 0000000..589fc44
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
@@ -0,0 +1,61 @@
+package org.apache.ranger.service;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ranger.common.JSONUtil;
+import org.apache.ranger.entity.XXPolicyBase;
+import org.apache.ranger.entity.XXPolicyWithAssignedId;
+import org.apache.ranger.plugin.model.RangerPolicy;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RangerPolicyWithAssignedIdService extends 
RangerPolicyServiceBase<XXPolicyWithAssignedId, RangerPolicy> {
+
+       @Autowired
+       JSONUtil jsonUtil;
+
+       @Override
+       protected XXPolicyWithAssignedId mapViewToEntityBean(RangerPolicy vObj, 
XXPolicyWithAssignedId xObj,
+                       int OPERATION_CONTEXT) {
+               return (XXPolicyWithAssignedId) super.mapViewToEntityBean(vObj, 
(XXPolicyBase) xObj, OPERATION_CONTEXT);
+       }
+
+       @Override
+       protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, 
XXPolicyWithAssignedId xObj) {
+               return super.mapEntityToViewBean(vObj, (XXPolicyBase) xObj);
+       }
+
+       @Override
+       protected void validateForCreate(RangerPolicy vObj) {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       protected void validateForUpdate(RangerPolicy vObj, 
XXPolicyWithAssignedId entityObj) {
+               // TODO Auto-generated method stub
+
+       }
+
+       @Override
+       protected RangerPolicy populateViewBean(XXPolicyWithAssignedId xPolicy) 
{
+               RangerPolicy vPolicy = super.populateViewBean(xPolicy);
+
+               Map<String, RangerPolicyResource> resources = 
getResourcesForXXPolicy(xPolicy);
+               vPolicy.setResources(resources);
+
+               List<RangerPolicyItem> policyItems = 
getPolicyItemListForXXPolicy(xPolicy);
+               vPolicy.setPolicyItems(policyItems);
+
+               return vPolicy;
+       }
+
+       public RangerPolicy getPopulatedViewObject(XXPolicyWithAssignedId 
xPolicy) {
+               return this.populateViewBean(xPolicy);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
index 9d1ebd6..cbfb810 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceService.java
@@ -10,18 +10,13 @@ import java.util.Map.Entry;
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.common.PropertiesUtil;
-import org.apache.ranger.common.SearchField;
-import org.apache.ranger.common.SearchField.DATA_TYPE;
-import org.apache.ranger.common.SearchField.SEARCH_TYPE;
-import org.apache.ranger.common.SearchUtil;
-import org.apache.ranger.common.SortField;
 import org.apache.ranger.common.view.VTrxLogAttr;
 import org.apache.ranger.entity.XXService;
+import org.apache.ranger.entity.XXServiceBase;
 import org.apache.ranger.entity.XXServiceConfigMap;
 import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.entity.XXTrxLog;
 import org.apache.ranger.plugin.model.RangerService;
-import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
@@ -52,18 +47,16 @@ public class RangerServiceService extends 
RangerServiceServiceBase<XXService, Ra
                actionCreate = "create";
                actionUpdate = "update";
                actionDelete = "delete";
-               
-               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, 
"xSvcDef.name", DATA_TYPE.STRING, 
-                               SEARCH_TYPE.FULL, "XXServiceDef xSvcDef", 
"obj.type = xSvcDef.id"));
-               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, 
"obj.type", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.SERVICE_ID, 
"obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.IS_ENABLED, 
"obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
-               
-               sortFields.add(new SortField(SearchFilter.CREATE_TIME, 
"obj.createTime"));
-               sortFields.add(new SortField(SearchFilter.UPDATE_TIME, 
"obj.updateTime"));
-               sortFields.add(new SortField(SearchFilter.SERVICE_ID, 
"obj.id"));
-               sortFields.add(new SortField(SearchFilter.SERVICE_NAME, 
"obj.name"));
+       }
+
+       @Override
+       protected XXService mapViewToEntityBean(RangerService vObj, XXService 
xObj, int OPERATION_CONTEXT) {
+               return (XXService)super.mapViewToEntityBean(vObj, 
(XXServiceBase)xObj, OPERATION_CONTEXT);
+       }
+
+       @Override
+       protected RangerService mapEntityToViewBean(RangerService vObj, 
XXService xObj) {
+               return super.mapEntityToViewBean(vObj, (XXServiceBase)xObj);
        }
        
        @Override

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
index fb6142e..ad318fd 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
@@ -6,17 +6,39 @@ import java.util.List;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.GUIDUtil;
 import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.common.SearchField;
+import org.apache.ranger.common.SortField;
+import org.apache.ranger.common.SearchField.DATA_TYPE;
+import org.apache.ranger.common.SearchField.SEARCH_TYPE;
 import org.apache.ranger.entity.XXService;
+import org.apache.ranger.entity.XXServiceBase;
 import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.plugin.model.RangerService;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.view.RangerServiceList;
 
-public abstract class RangerServiceServiceBase<T extends XXService, V extends 
RangerService> extends RangerBaseModelService<T, V> {
+public abstract class RangerServiceServiceBase<T extends XXServiceBase, V 
extends RangerService> extends RangerBaseModelService<T, V> {
+       
+       public RangerServiceServiceBase() {
+               super();
+               
+               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, 
"xSvcDef.name", DATA_TYPE.STRING, 
+                               SEARCH_TYPE.FULL, "XXServiceDef xSvcDef", 
"obj.type = xSvcDef.id"));
+               searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_ID, 
"obj.type", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.SERVICE_ID, 
"obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.IS_ENABLED, 
"obj.isEnabled", DATA_TYPE.BOOLEAN, SEARCH_TYPE.FULL));
+               
+               sortFields.add(new SortField(SearchFilter.CREATE_TIME, 
"obj.createTime"));
+               sortFields.add(new SortField(SearchFilter.UPDATE_TIME, 
"obj.updateTime"));
+               sortFields.add(new SortField(SearchFilter.SERVICE_ID, 
"obj.id"));
+               sortFields.add(new SortField(SearchFilter.SERVICE_NAME, 
"obj.name"));
+               
+       }
        
        @Override
        @SuppressWarnings("unchecked")
-       protected XXService mapViewToEntityBean(RangerService vObj, XXService 
xObj, int OPERATION_CONTEXT) {
+       protected XXServiceBase mapViewToEntityBean(RangerService vObj, 
XXServiceBase xObj, int OPERATION_CONTEXT) {
                String guid = (StringUtils.isEmpty(vObj.getGuid())) ? 
GUIDUtil.genGUI() : vObj.getGuid();
                
                xObj.setGuid(guid);
@@ -39,7 +61,7 @@ public abstract class RangerServiceServiceBase<T extends 
XXService, V extends Ra
 
        @Override
        @SuppressWarnings("unchecked")
-       protected RangerService mapEntityToViewBean(RangerService vObj, 
XXService xObj) {
+       protected RangerService mapEntityToViewBean(RangerService vObj, 
XXServiceBase xObj) {
                XXServiceDef xServiceDef = 
daoMgr.getXXServiceDef().getById(xObj.getType());
                vObj.setType(xServiceDef.getName());
                vObj.setGuid(xObj.getGuid());

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/java/org/apache/ranger/service/RangerServiceWithAssignedIdService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceWithAssignedIdService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceWithAssignedIdService.java
new file mode 100644
index 0000000..5ba3f54
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceWithAssignedIdService.java
@@ -0,0 +1,60 @@
+package org.apache.ranger.service;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.ranger.common.JSONUtil;
+import org.apache.ranger.entity.XXServiceBase;
+import org.apache.ranger.entity.XXServiceWithAssignedId;
+import org.apache.ranger.entity.XXServiceConfigMap;
+import org.apache.ranger.plugin.model.RangerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RangerServiceWithAssignedIdService extends 
RangerServiceServiceBase<XXServiceWithAssignedId, RangerService> {
+
+       @Autowired
+       JSONUtil jsonUtil;
+
+       @Override
+       protected XXServiceWithAssignedId mapViewToEntityBean(RangerService 
vObj, XXServiceWithAssignedId xObj, int OPERATION_CONTEXT) {
+               return (XXServiceWithAssignedId)super.mapViewToEntityBean(vObj, 
(XXServiceBase)xObj, OPERATION_CONTEXT);
+       }
+
+       @Override
+       protected RangerService mapEntityToViewBean(RangerService vObj, 
XXServiceWithAssignedId xObj) {
+               return super.mapEntityToViewBean(vObj, (XXServiceBase)xObj);
+       }
+       
+       @Override
+       protected void validateForCreate(RangerService vObj) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       protected void validateForUpdate(RangerService vService, 
XXServiceWithAssignedId xService) {
+               
+       }
+       
+       @Override
+       protected RangerService populateViewBean(XXServiceWithAssignedId 
xService) {
+               RangerService vService = super.populateViewBean(xService);
+               
+               HashMap<String, String> configs = new HashMap<String, String>();
+               List<XXServiceConfigMap> svcConfigMapList = 
daoMgr.getXXServiceConfigMap()
+                               .findByServiceId(xService.getId());
+               for(XXServiceConfigMap svcConfMap : svcConfigMapList) {
+                       configs.put(svcConfMap.getConfigkey(), 
svcConfMap.getConfigvalue());
+               }
+               vService.setConfigs(configs);
+               
+               return vService;
+       }
+       
+       public RangerService getPopulatedViewObject(XXServiceWithAssignedId 
xService) {
+               return this.populateViewBean(xService);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/53709aad/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
----------------------------------------------------------------------
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml 
b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index b94ef13..6a3d795 100644
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -207,6 +207,10 @@
        <named-query name="XXPolicy.findByServiceId">
                <query>select obj from XXPolicy obj where obj.service = 
:serviceId</query>
        </named-query>
+       
+       <named-query name="XXPolicy.getMaxIdOfXXPolicy">
+               <query>select MAX(obj.id) from XXPolicy obj</query>
+       </named-query>
 
        <!-- XXServiceDef -->
        <named-query name="XXServiceDef.findByName">
@@ -315,6 +319,10 @@
        <named-query name="XXService.findByName">
                <query>select obj from XXService obj where obj.name = 
:name</query>
        </named-query>
+       
+       <named-query name="XXService.getMaxIdOfXXService">
+               <query>select MAX(obj.id) from XXService obj</query>
+       </named-query>
 
        <!-- XXPolicyResource -->
        <named-query name="XXPolicyResource.findByResDefIdAndPolicyId">

Reply via email to