You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2025/01/13 10:12:50 UTC

(ranger) 12/14: RANGER-5061: checkstyle compliance updates - security-admin org.apache.ranger.service (#503)

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

pradeep pushed a commit to branch RANGER-5061_master
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit 942b3ce1ba11f84233edc7d609d62b7ed2121388
Author: PradeeP AgrawaL <pr...@apache.org>
AuthorDate: Sat Jan 11 11:17:35 2025 +0530

    RANGER-5061: checkstyle compliance updates - security-admin org.apache.ranger.service (#503)
---
 .../service/AbstractAuditedResourceService.java    |  396 +++---
 .../service/AbstractBaseResourceService.java       | 1490 +++++++++-----------
 .../apache/ranger/service/AuthSessionService.java  |  266 ++--
 .../ranger/service/PublicAPIServiceBase.java       |   35 +-
 .../apache/ranger/service/RangerAuditFields.java   |   28 +-
 .../ranger/service/RangerAuditedModelService.java  |  404 +++---
 .../ranger/service/RangerBaseModelService.java     |  847 ++++++-----
 .../ranger/service/RangerDataHistService.java      |  239 ++--
 .../ranger/service/RangerGdsBaseModelService.java  |   18 +-
 .../RangerGdsDataShareInDatasetService.java        |  162 +--
 .../ranger/service/RangerGdsDataShareService.java  |  189 ++-
 .../service/RangerGdsDatasetInProjectService.java  |  146 +-
 .../ranger/service/RangerGdsDatasetService.java    |  123 +-
 .../ranger/service/RangerGdsProjectService.java    |  101 +-
 .../service/RangerGdsSharedResourceService.java    |  175 ++-
 .../ranger/service/RangerPluginInfoService.java    |  521 +++----
 .../ranger/service/RangerPolicyLabelsService.java  |   57 +-
 .../apache/ranger/service/RangerPolicyService.java |   70 +-
 .../ranger/service/RangerPolicyServiceBase.java    |  455 +++---
 .../service/RangerPolicyWithAssignedIdService.java |   74 +-
 .../apache/ranger/service/RangerRoleService.java   |  127 +-
 .../ranger/service/RangerRoleServiceBase.java      |   42 +-
 .../service/RangerSecurityZoneServiceBase.java     |   63 +-
 .../service/RangerSecurityZoneServiceService.java  |  243 ++--
 .../ranger/service/RangerServiceDefService.java    |  141 +-
 .../service/RangerServiceDefServiceBase.java       | 1490 ++++++++++----------
 .../RangerServiceDefWithAssignedIdService.java     |   47 +-
 .../service/RangerServiceResourceService.java      |   80 +-
 .../service/RangerServiceResourceServiceBase.java  |  121 +-
 .../RangerServiceResourceWithTagsService.java      |  123 +-
 .../RangerServiceResourceWithTagsServiceBase.java  |   59 +-
 .../ranger/service/RangerServiceService.java       |  311 ++--
 .../ranger/service/RangerServiceServiceBase.java   |  293 ++--
 .../RangerServiceWithAssignedIdService.java        |   80 +-
 .../apache/ranger/service/RangerTagDefService.java |  145 +-
 .../ranger/service/RangerTagDefServiceBase.java    |  212 +--
 .../service/RangerTagResourceMapService.java       |  248 ++--
 .../service/RangerTagResourceMapServiceBase.java   |   64 +-
 .../apache/ranger/service/RangerTagService.java    |  253 ++--
 .../ranger/service/RangerTagServiceBase.java       |  224 ++-
 .../ranger/service/RangerTransactionService.java   |   73 +-
 .../ranger/service/RangerTrxLogV2Service.java      |  452 +++---
 .../org/apache/ranger/service/UserService.java     |  554 ++++----
 .../org/apache/ranger/service/UserServiceBase.java |   65 +-
 .../apache/ranger/service/XAccessAuditService.java |  379 ++---
 .../ranger/service/XAccessAuditServiceBase.java    |  155 +-
 .../org/apache/ranger/service/XAssetService.java   |  385 +++--
 .../apache/ranger/service/XAssetServiceBase.java   |  123 +-
 .../apache/ranger/service/XAuditMapService.java    |  142 +-
 .../ranger/service/XAuditMapServiceBase.java       |  122 +-
 .../ranger/service/XCredentialStoreService.java    |   24 +-
 .../service/XCredentialStoreServiceBase.java       |   79 +-
 .../apache/ranger/service/XGroupGroupService.java  |   24 +-
 .../ranger/service/XGroupGroupServiceBase.java     |   83 +-
 .../ranger/service/XGroupPermissionService.java    |  160 +--
 .../service/XGroupPermissionServiceBase.java       |   77 +-
 .../org/apache/ranger/service/XGroupService.java   |  266 ++--
 .../apache/ranger/service/XGroupServiceBase.java   |  169 ++-
 .../apache/ranger/service/XGroupUserService.java   |  401 +++---
 .../ranger/service/XGroupUserServiceBase.java      |  147 +-
 .../apache/ranger/service/XModuleDefService.java   |  327 ++---
 .../ranger/service/XModuleDefServiceBase.java      |  111 +-
 .../org/apache/ranger/service/XPermMapService.java |  235 +--
 .../apache/ranger/service/XPermMapServiceBase.java |  197 ++-
 .../ranger/service/XPolicyExportAuditService.java  |   55 +-
 .../service/XPolicyExportAuditServiceBase.java     |  121 +-
 .../org/apache/ranger/service/XPolicyService.java  | 1393 +++++++++---------
 .../apache/ranger/service/XPortalUserService.java  |  318 +++--
 .../ranger/service/XPortalUserServiceBase.java     |  130 +-
 .../apache/ranger/service/XRepositoryService.java  |  183 ++-
 .../apache/ranger/service/XResourceService.java    |  719 +++++-----
 .../ranger/service/XResourceServiceBase.java       |  231 ++-
 .../ranger/service/XUgsyncAuditInfoService.java    |  223 ++-
 .../service/XUgsyncAuditInfoServiceBase.java       |   66 +-
 .../ranger/service/XUserPermissionService.java     |  157 ++-
 .../ranger/service/XUserPermissionServiceBase.java |  183 ++-
 .../org/apache/ranger/service/XUserService.java    |  483 +++----
 .../apache/ranger/service/XUserServiceBase.java    |  179 ++-
 .../ranger/service/filter/RangerRESTAPIFilter.java |  459 +++---
 79 files changed, 9665 insertions(+), 10147 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java
index b39b83293..fdda33f33 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/AbstractAuditedResourceService.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
- package org.apache.ranger.service;
+package org.apache.ranger.service;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ranger.common.JSONUtil;
@@ -35,203 +35,211 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.annotation.PostConstruct;
-import java.util.*;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import static org.apache.ranger.service.RangerBaseModelService.OPERATION_CREATE_CONTEXT;
 import static org.apache.ranger.service.RangerBaseModelService.OPERATION_DELETE_CONTEXT;
 import static org.apache.ranger.service.RangerBaseModelService.OPERATION_UPDATE_CONTEXT;
 
 public abstract class AbstractAuditedResourceService<T extends XXDBBase, V extends VXDataObject> extends AbstractBaseResourceService<T, V> {
-	protected static final Logger logger = LoggerFactory.getLogger(AbstractAuditedResourceService.class);
-
-	@Autowired
-	JSONUtil jsonUtil;
-
-	@Autowired
-	RangerEnumUtil xaEnumUtil;
-
-	protected final Map<String, VTrxLogAttr> trxLogAttrs = new HashMap<>();
-	protected final String                   hiddenPasswordString;
-	private   final int                      classType;
-	private   final int                      parentClassType;
-	private   final List<VTrxLogAttr>        objNameAttrs = new ArrayList<>();
-
-	protected AbstractAuditedResourceService(int classType) {
-		this(classType, -1);
-	}
-
-	protected AbstractAuditedResourceService(int classType, int parentClassType) {
-		this.classType            = classType;
-		this.parentClassType      = parentClassType;
-		this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
-	}
-
-	@PostConstruct
-	public void init() {
-		for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
-			if (vTrxLog.isObjName()) {
-				objNameAttrs.add(vTrxLog);
-			}
-		}
-
-		if (objNameAttrs.isEmpty()) {
-			objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
-		}
-	}
-
-	public void createTransactionLog(XXTrxLogV2 trxLog) {
-		bizUtil.createTrxLog(Collections.singletonList(trxLog));
-	}
-
-	public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
-		try {
-			ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-			if("Password".equalsIgnoreCase(attrName)) {
-				oldValue = hiddenPasswordString;
-				newValue = hiddenPasswordString;
-			}
-
-			objChangeInfo.addAttribute(attrName, oldValue, newValue);
-
-			trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
-		} catch (Exception excp) {
-			logger.warn("failed to convert attribute change info to json");
-		}
-
-		bizUtil.createTrxLog(Collections.singletonList(trxLog));
-	}
-
-	public void createTransactionLog(V obj, V oldObj, int action, Long userId) {
-		List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
-
-		if (trxLogList != null) {
-			for (XXTrxLogV2 trxLog : trxLogList) {
-				trxLog.setAddedByUserId(userId);
-			}
-
-			bizUtil.createTrxLog(trxLogList);
-		}
-
-		createTransactionLog(obj, null, action);
-	}
-
-	public void createTransactionLog(V obj, V oldObj, int action) {
-		List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
-
-		if (trxLogList != null) {
-			bizUtil.createTrxLog(trxLogList);
-		}
-	}
-
-	public List<XXTrxLogV2> getTransactionLog(V obj, V oldObj, int action) {
-		if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
-			return null;
-		}
-
-		List<XXTrxLogV2> trxLogList = new ArrayList<>();
-
-		try {
-			ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-
-			for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
-				processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
-			}
-
-			if(objChangeInfo.getAttributes() != null && objChangeInfo.getAttributes().size() > 0) {
-				for(AttributeChangeInfo changeInfo : objChangeInfo.getAttributes()) {
-					if("Password".equalsIgnoreCase(changeInfo.getAttributeName())) {
-						changeInfo.setNewValue(hiddenPasswordString);
-						changeInfo.setOldValue(hiddenPasswordString);
-					}
-				}
-				trxLogList.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
-			}
-		} catch (Exception e) {
-			logger.warn("failed to get transaction log for object: type=" + obj.getClass().getName() + ", id=" + obj.getId(), e);
-		}
-
-		return trxLogList;
-	}
-
-	public String getObjectName(V obj) {
-		String ret = null;
-
-		for (VTrxLogAttr attr : objNameAttrs) {
-			ret = attr.getAttrValue(obj, xaEnumUtil);
-
-			if (StringUtils.isNotBlank(ret)) {
-				break;
-			}
-		}
-
-		return ret;
-	}
-
-	public int getParentObjectType(V obj, V oldObj) {
-		return parentClassType;
-	}
-
-	public String getParentObjectName(V obj, V oldObj) {
-		return null;
-	}
-
-	public Long getParentObjectId(V obj, V oldObj) {
-		return null;
-	}
-
-	public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
-		return false;
-	}
-
-	public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
-		return trxLogAttr.getAttrValue(obj, xaEnumUtil);
-	}
-
-	private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
-		if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
-			return;
-		}
-
-		String value = getTrxLogAttrValue(obj, trxLogAttr);
-
-		if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
-			return;
-		}
-
-		final String prevValue;
-		final String newValue;
-
-		if (action == OPERATION_CREATE_CONTEXT) {
-			prevValue = null;
-			newValue  = value;
-		} else if (action == OPERATION_DELETE_CONTEXT) {
-			prevValue = value;
-			newValue  = null;
-		} else if (action == OPERATION_UPDATE_CONTEXT) {
-			prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
-			newValue  = value;
-		} else {
-			prevValue = null;
-			newValue  = null;
-		}
-
-		if ((StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue)) || StringUtils.equals(prevValue, newValue)) {
-			return;
-		}
-
-		objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
-	}
-
-	private String toActionString(int action) {
-		switch (action) {
-			case OPERATION_CREATE_CONTEXT:
-				return "create";
-			case OPERATION_UPDATE_CONTEXT:
-				return "update";
-			case OPERATION_DELETE_CONTEXT:
-				return "delete";
-		}
-
-		return "unknown";
-	}
+    protected static final Logger logger = LoggerFactory.getLogger(AbstractAuditedResourceService.class);
+
+    protected final Map<String, VTrxLogAttr> trxLogAttrs  = new HashMap<>();
+    protected final String                   hiddenPasswordString;
+
+    private final   int               classType;
+    private final   int               parentClassType;
+    private final   List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
+
+    @Autowired
+    JSONUtil       jsonUtil;
+
+    @Autowired
+    RangerEnumUtil xaEnumUtil;
+
+    protected AbstractAuditedResourceService(int classType) {
+        this(classType, -1);
+    }
+
+    protected AbstractAuditedResourceService(int classType, int parentClassType) {
+        this.classType            = classType;
+        this.parentClassType      = parentClassType;
+        this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
+    }
+
+    @PostConstruct
+    public void init() {
+        for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
+            if (vTrxLog.isObjName()) {
+                objNameAttrs.add(vTrxLog);
+            }
+        }
+
+        if (objNameAttrs.isEmpty()) {
+            objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
+        }
+    }
+
+    public void createTransactionLog(XXTrxLogV2 trxLog) {
+        bizUtil.createTrxLog(Collections.singletonList(trxLog));
+    }
+
+    public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
+        try {
+            ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
+
+            if ("Password".equalsIgnoreCase(attrName)) {
+                oldValue = hiddenPasswordString;
+                newValue = hiddenPasswordString;
+            }
+
+            objChangeInfo.addAttribute(attrName, oldValue, newValue);
+
+            trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
+        } catch (Exception excp) {
+            logger.warn("failed to convert attribute change info to json");
+        }
+
+        bizUtil.createTrxLog(Collections.singletonList(trxLog));
+    }
+
+    public void createTransactionLog(V obj, V oldObj, int action, Long userId) {
+        List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
+
+        if (trxLogList != null) {
+            for (XXTrxLogV2 trxLog : trxLogList) {
+                trxLog.setAddedByUserId(userId);
+            }
+
+            bizUtil.createTrxLog(trxLogList);
+        }
+
+        createTransactionLog(obj, null, action);
+    }
+
+    public void createTransactionLog(V obj, V oldObj, int action) {
+        List<XXTrxLogV2> trxLogList = getTransactionLog(obj, oldObj, action);
+
+        if (trxLogList != null) {
+            bizUtil.createTrxLog(trxLogList);
+        }
+    }
+
+    public List<XXTrxLogV2> getTransactionLog(V obj, V oldObj, int action) {
+        if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
+            return null;
+        }
+
+        List<XXTrxLogV2> trxLogList = new ArrayList<>();
+
+        try {
+            ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
+
+            for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
+                processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
+            }
+
+            if (objChangeInfo.getAttributes() != null && !objChangeInfo.getAttributes().isEmpty()) {
+                for (AttributeChangeInfo changeInfo : objChangeInfo.getAttributes()) {
+                    if ("Password".equalsIgnoreCase(changeInfo.getAttributeName())) {
+                        changeInfo.setNewValue(hiddenPasswordString);
+                        changeInfo.setOldValue(hiddenPasswordString);
+                    }
+                }
+
+                trxLogList.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
+            }
+        } catch (Exception e) {
+            logger.warn("failed to get transaction log for object: type={}, id={}", obj.getClass().getName(), obj.getId(), e);
+        }
+
+        return trxLogList;
+    }
+
+    public String getObjectName(V obj) {
+        String ret = null;
+
+        for (VTrxLogAttr attr : objNameAttrs) {
+            ret = attr.getAttrValue(obj, xaEnumUtil);
+
+            if (StringUtils.isNotBlank(ret)) {
+                break;
+            }
+        }
+
+        return ret;
+    }
+
+    public int getParentObjectType(V obj, V oldObj) {
+        return parentClassType;
+    }
+
+    public String getParentObjectName(V obj, V oldObj) {
+        return null;
+    }
+
+    public Long getParentObjectId(V obj, V oldObj) {
+        return null;
+    }
+
+    public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
+        return false;
+    }
+
+    public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
+        return trxLogAttr.getAttrValue(obj, xaEnumUtil);
+    }
+
+    private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
+        if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
+            return;
+        }
+
+        String value = getTrxLogAttrValue(obj, trxLogAttr);
+
+        if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
+            return;
+        }
+
+        final String prevValue;
+        final String newValue;
+
+        if (action == OPERATION_CREATE_CONTEXT) {
+            prevValue = null;
+            newValue  = value;
+        } else if (action == OPERATION_DELETE_CONTEXT) {
+            prevValue = value;
+            newValue  = null;
+        } else if (action == OPERATION_UPDATE_CONTEXT) {
+            prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
+            newValue  = value;
+        } else {
+            prevValue = null;
+            newValue  = null;
+        }
+
+        if ((StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue)) || StringUtils.equals(prevValue, newValue)) {
+            return;
+        }
+
+        objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
+    }
+
+    private String toActionString(int action) {
+        switch (action) {
+            case OPERATION_CREATE_CONTEXT:
+                return "create";
+            case OPERATION_UPDATE_CONTEXT:
+                return "update";
+            case OPERATION_DELETE_CONTEXT:
+                return "delete";
+        }
+
+        return "unknown";
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java
index 020e1dff5..4b6c78a61 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/AbstractBaseResourceService.java
@@ -17,27 +17,7 @@
  * under the License.
  */
 
- package org.apache.ranger.service;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.TypeVariable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Expression;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.servlet.http.HttpServletResponse;
+package org.apache.ranger.service;
 
 import org.apache.ranger.biz.RangerBizUtil;
 import org.apache.ranger.common.ContextUtil;
@@ -66,776 +46,708 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletResponse;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import static org.apache.ranger.service.RangerBaseModelService.OPERATION_CREATE_CONTEXT;
 import static org.apache.ranger.service.RangerBaseModelService.OPERATION_UPDATE_CONTEXT;
 
 public abstract class AbstractBaseResourceService<T extends XXDBBase, V extends VXDataObject> {
-	protected static final Logger logger = LoggerFactory.getLogger(AbstractBaseResourceService.class);
-
-	protected static final Map<Class<?>, String> tEntityValueMap = new HashMap<>();
-
-	protected final Class<T> tEntityClass;
-	protected final Class<V> tViewClass;
-	protected final String   className;
-	protected final String   viewClassName;
-	protected final String   countQueryStr;
-	protected final String   queryStr;
-	protected final String   distinctCountQueryStr;
-	protected final String   distinctQueryStr;
-
-	public final List<SortField>   sortFields   = new ArrayList<>();
-	public final List<SearchField> searchFields = new ArrayList<>();
-
-	static {
-		tEntityValueMap.put(XXAuthSession.class, "Auth Session");
-		tEntityValueMap.put(XXDBBase.class, "Base");
-	}
-
-	@Autowired
-	BaseDao<T> entityDao;
-
-	@Autowired
-	StringUtil stringUtil;
-
-	@Autowired
-	protected RangerDaoManager daoManager;
-
-	@Autowired
-	protected SearchUtil searchUtil;
-
-	@Autowired
-	protected RESTErrorUtil restErrorUtil;
-
-	@Autowired
-	RangerDomainObjectSecurityHandler objectSecurityHandler;
-
-	@Autowired
-	RangerBizUtil bizUtil;
-
-	@Autowired
-	RangerConfigUtil msConfigUtil;
-
-	protected abstract void validateForCreate(V viewBaseBean);
-
-	protected abstract void validateForUpdate(V viewBaseBean, T t);
-
-	protected abstract T mapViewToEntityBean(V viewBean, T t,
-			int OPERATION_CONTEXT);
-
-	protected abstract V mapEntityToViewBean(V viewBean, T t);
-
-	protected String getResourceName() {
-
-		String resourceName = tEntityValueMap.get(tEntityClass);
-		if (resourceName == null || resourceName.isEmpty()) {
-			resourceName = "Object";
-		}
-		return resourceName;
-
-		// if (className.startsWith("M")) {
-		// return className.substring(1);
-		// } else if (className.startsWith("org.apache.ranger.entity.M")){
-		// return className.substring(14);
-		// }
-		// return className;
-	}
-
-	protected BaseDao<T> getDao() {
-		if (entityDao == null) {
-			throw new NullPointerException("entityDao is not injected by Spring!");
-		}
-		return entityDao;
-	}
-
-	protected T createEntityObject() {
-		try {
-			return tEntityClass.newInstance();
-		} catch (Throwable e) {
-			logger.error("Error instantiating entity class. tEntityClass="
-					+ tEntityClass.toString(), e);
-		}
-		return null;
-	}
-
-	protected V createViewObject() {
-		try {
-			return tViewClass.newInstance();
-		} catch (Throwable e) {
-			logger.error("Error instantiating view class. tViewClass="
-					+ tViewClass.toString(), e);
-		}
-		return null;
-	}
-
-	/**
-	 * constructor
-	 */
-	@SuppressWarnings("unchecked")
-	public AbstractBaseResourceService() {
-
-		Class klass = getClass();
-		ParameterizedType genericSuperclass = (ParameterizedType) klass
-				.getGenericSuperclass();
-		TypeVariable<Class<?>> var[] = klass.getTypeParameters();
-
-		if (genericSuperclass.getActualTypeArguments()[0] instanceof Class) {
-			tEntityClass = (Class<T>) genericSuperclass
-					.getActualTypeArguments()[0];
-			tViewClass = (Class<V>) genericSuperclass.getActualTypeArguments()[1];
-		} else if (var.length > 0) {
-			tEntityClass = (Class<T>) var[0].getBounds()[0];
-			tViewClass = (Class<V>) var[1].getBounds()[0];
-		} else {
-			tEntityClass = null;
-			tViewClass   = null;
-
-			logger.error("Cannot find class for template", new Throwable());
-		}
-		if (tEntityClass != null) {
-			className = tEntityClass.getName();
-		} else {
-			className = null;
-		}
-
-		if (tViewClass != null) {
-			viewClassName = tViewClass.getName();
-		} else {
-			viewClassName = null;
-		}
-
-		// Get total count of the rows which meet the search criteria
-		countQueryStr = "SELECT COUNT(obj) FROM " + className
-				+ " obj ";
-		queryStr = "SELECT obj FROM " + className + " obj ";
-
-		distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM "
-				+ className + " obj ";
-		distinctQueryStr = "SELECT distinct obj FROM " + className + " obj ";
-		sortFields.add(new SortField("id", "obj.id",true,SORT_ORDER.ASC));
-	}
-
-	// ----------------------------------------------------------------------------------
-	// Create Operation
-	// ----------------------------------------------------------------------------------
-	/**
-	 * Create Entity object and populate it from view object. Used in create
-	 * operation
-	 */
-
-	protected void mapBaseAttributesToEntityBean(T resource, V viewBean) {
-		if (resource.getCreateTime() == null) {
-			resource.setCreateTime(DateUtil.getUTCDate());
-		}
-
-		resource.setUpdateTime(DateUtil.getUTCDate());
-
-		if (resource.getAddedByUserId() == null) {
-			resource.setAddedByUserId(ContextUtil.getCurrentUserId());
-		}
-
-		resource.setUpdatedByUserId(ContextUtil.getCurrentUserId());
-	}
-
-	protected T populateEntityBeanForCreate(T t, V viewBaseBean) {
-		mapBaseAttributesToEntityBean(t, viewBaseBean);
-		return mapViewToEntityBean(viewBaseBean, t, OPERATION_CREATE_CONTEXT);
-	}
-
-	protected T preCreate(V viewBaseBean) {
-		validateGenericAttributes(viewBaseBean);
-		validateForCreate(viewBaseBean);
-
-		T t = createEntityObject();
-		t = populateEntityBeanForCreate(t, viewBaseBean);
-		return t;
-	}
-
-	public V createResource(V viewBaseBean) {
-		T resource = preCreate(viewBaseBean);
-
-		// object security
-		if (!objectSecurityHandler.hasAccess(resource,
-				Permission.PermissionType.CREATE)) {
-			throw restErrorUtil.create403RESTException(getResourceName()
-					+ " access denied. classType=" + resource.getMyClassType()
-					+ ", className=" + resource.getClass().getName()
-					+ ", objectId=" + resource.getId());
-		}
-
-		resource = getDao().create(resource);
-
-		V view = postCreate(resource);
-		return view;
-	}
-
-	protected V postCreate(T resource) {
-		V view = populateViewBean(resource);
-		return view;
-	}
-
-	// ----------------------------------------------------------------------------------
-	// Read Operation
-	// ----------------------------------------------------------------------------------
-
-	protected T preRead(Long id) {
-		return null;
-	}
-
-	public V readResource(Long id) {
-		// T resource = preRead(id);
-
-		T resource = getDao().getById(id);
-		if (resource == null) {
-			// Returns code 404 with DATA_NOT_FOUND as the error message
-			throw restErrorUtil.createRESTException(getResourceName()
-					+ " not found", MessageEnums.DATA_NOT_FOUND, id, null,
-					"preRead: " + id + " not found.",HttpServletResponse.SC_NOT_FOUND);
-		}
-
-		V viewBean = readResource(resource);
-		return viewBean;
-	}
-
-	/**
-	 * @param resource
-	 * @return
-	 */
-	@SuppressWarnings("unchecked")
-	private V readResource(T resource) {
-		// object security
-		if (!objectSecurityHandler.hasAccess(resource,
-				Permission.PermissionType.READ)) {
-
-			throw restErrorUtil.create403RESTException(getResourceName()
-					+ " access denied. classType=" + resource.getMyClassType()
-					+ ", className=" + resource.getClass().getName()
-					+ ", objectId=" + resource.getId() + ", object="
-					+ resource.toString());
-		}
-
-		V viewBean = postRead(resource);
-		return viewBean;
-	}
-
-	protected V postRead(T resource) {
-		V viewBean = populateViewBean(resource);
-		return viewBean;
-	}
-
-	// ----------------------------------------------------------------------------------
-	// Update Operation
-	// ----------------------------------------------------------------------------------
-
-	/**
-	 * Populate Entity object from view object. Used in update operation
-	 */
-	protected T populateEntityBeanForUpdate(T t, V viewBaseBean) {
-		mapBaseAttributesToEntityBean(t, viewBaseBean);
-		return mapViewToEntityBean(viewBaseBean, t, OPERATION_UPDATE_CONTEXT);
-	}
-
-	protected T preUpdate(V viewBaseBean) {
-		T resource = getDao().getById(viewBaseBean.getId());
-		if (resource == null) {
-			// Returns code 400 with DATA_NOT_FOUND as the error message
-			throw restErrorUtil.createRESTException(getResourceName()
-					+ " not found", MessageEnums.DATA_NOT_FOUND,
-					viewBaseBean.getId(), null, "preUpdate: id not found.");
-		}
-		validateForUpdate(viewBaseBean, resource);
-
-		return populateEntityBeanForUpdate(resource, viewBaseBean);
-	}
-
-	public V updateResource(V viewBaseBean) {
-		T resource = preUpdate(viewBaseBean);
-
-		// object security
-		if (!objectSecurityHandler.hasAccess(resource,
-				Permission.PermissionType.UPDATE)) {
-			throw restErrorUtil.create403RESTException(getResourceName()
-					+ " access denied. classType=" + resource.getMyClassType()
-					+ ", className=" + resource.getClass().getName()
-					+ ", objectId=" + resource.getId());
-		}
-
-		resource = getDao().update(resource);
-		V viewBean = postUpdate(resource);
-		return viewBean;
-	}
-
-	protected V postUpdate(T resource) {
-		V view = populateViewBean(resource);
-		return view;
-	}
-
-	// ----------------------------------------------------------------------------------
-	// Delete Operation
-	// ----------------------------------------------------------------------------------
-	protected T preDelete(Long id) {
-		T resource = getDao().getById(id);
-		if (resource == null) {
-			// Return without error
-			logger.info("Delete ignored for non-existent " + getResourceName()
-					+ " id=" + id);
-		}
-		return resource;
-	}
-
-	public boolean deleteResource(Long id) {
-		boolean result = false;
-		T resource = preDelete(id);
-		if (resource == null) {
-			throw restErrorUtil.createRESTException(getResourceName()
-					+ " not found", MessageEnums.DATA_NOT_FOUND, id, null,
-					getResourceName() + ":" + id);
-		}
-
-		// object security
-		if (!objectSecurityHandler.hasAccess(resource,
-				Permission.PermissionType.DELETE)) {
-			// throw 401
-			logger.debug("OBJECT SECURITY");
-		}
-		// Need to delete all dependent common objects like Notes and
-		// UserDataPref
-		try {
-			result = getDao().remove(resource);
-		} catch (Exception e) {
-			logger.error("Error deleting " + getResourceName() + ". Id=" + id,
-					e);
-
-			throw restErrorUtil.createRESTException(getResourceName()
-					+ " can't be deleted",
-					MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id
-							+ ", error=" + e.getMessage());
-		}
-
-		postDelete(resource);
-
-		return result;
-	}
-
-	protected void postDelete(T resource) {
-
-	}
-
-	// ----------------------------------------------------------------------------------
-	// Validation
-	// ----------------------------------------------------------------------------------
-	protected void validateGenericAttributes(V viewBaseBean) {
-	}
-
-	// ----------------------------------------------------------------------------------
-	// mapping view bean attributes
-	// ----------------------------------------------------------------------------------
-	public V populateViewBean(T resource) {
-		V viewBean = createViewObject();
-		populateViewBean(resource, viewBean);
-		return mapEntityToViewBean(viewBean, resource);
-	}
-
-	protected V populateViewBean(T resource, V viewBean) {
-		mapBaseAttributesToViewBean(resource, viewBean);
-		// TODO:Current:Open: Need to set original and updated
-		// content
-		return viewBean;
-	}
-
-	protected void mapBaseAttributesToViewBean(T resource, V viewBean) {
-		viewBean.setId(resource.getId());
-
-		// TBD: Need to review this change later
-		viewBean.setMObj(resource);
-		viewBean.setCreateDate(resource.getCreateTime());
-		viewBean.setUpdateDate(resource.getUpdateTime());
-
-		Long ownerId = resource.getAddedByUserId();
-		UserSessionBase currentUserSession = ContextUtil
-				.getCurrentUserSession();
-
-		if (currentUserSession == null) {
-			return;
-		}
-
-		if (ownerId != null) {
-			XXPortalUser tUser = daoManager.getXXPortalUser().getById(
-					resource.getAddedByUserId());
-			if (tUser != null) {
-				if (tUser.getPublicScreenName() != null
-						&& !tUser.getPublicScreenName().trim().isEmpty()
-						&& !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
-					viewBean.setOwner(tUser.getPublicScreenName());
-				} else {
-					if (tUser.getFirstName() != null
-							&& !tUser.getFirstName().trim().isEmpty()
-							&& !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
-						if (tUser.getLastName() != null
-								&& !tUser.getLastName().trim().isEmpty()
-								&& !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
-							viewBean.setOwner(tUser.getFirstName() + " "
-									+ tUser.getLastName());
-						} else {
-							viewBean.setOwner(tUser.getFirstName());
-						}
-					} else {
-						viewBean.setOwner(tUser.getLoginId());
-					}
-				}
-			}
-		}
-		if (resource.getUpdatedByUserId() != null) {
-			XXPortalUser tUser = daoManager.getXXPortalUser().getById(
-					resource.getUpdatedByUserId());
-			if (tUser != null) {
-				if (tUser.getPublicScreenName() != null
-						&& !tUser.getPublicScreenName().trim().isEmpty()
-						&& !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
-					viewBean.setUpdatedBy(tUser.getPublicScreenName());
-				} else {
-					if (tUser.getFirstName() != null
-							&& !tUser.getFirstName().trim().isEmpty()
-							&& !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
-						if (tUser.getLastName() != null
-								&& !tUser.getLastName().trim().isEmpty()
-								&& !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
-							viewBean.setUpdatedBy(tUser.getFirstName() + " "
-									+ tUser.getLastName());
-						} else {
-							viewBean.setUpdatedBy(tUser.getFirstName());
-						}
-					} else {
-						viewBean.setUpdatedBy(tUser.getLoginId());
-					}
-				}
-			}
-		}
-
-	}
-
-	// ----------------------------------------------------------------------------------
-	// Search Operation
-	// ----------------------------------------------------------------------------------
-
-	protected Query createQuery(String searchString, String sortString,
-			SearchCriteria searchCriteria, List<SearchField> searchFieldList,
-			boolean isCountQuery) {
-//		EntityManager em = entityDao != null ? entityDao.getEntityManager() : daoManager.getEntityManager();
-		EntityManager em = getDao().getEntityManager();
-		
-		Query query = searchUtil.createSearchQuery(em, searchString, sortString,
-				searchCriteria, searchFieldList, false,
-				isCountQuery);
-		return query;
-	}
-
-	protected long getCountForSearchQuery(SearchCriteria searchCriteria,
-			List<SearchField> searchFieldList) {
-
-		String q = countQueryStr;
-		// Get total count of the rows which meet the search criteria
-		if (searchCriteria.isDistinct()) {
-			q = distinctCountQueryStr;
-		}
-
-		// Get total count of the rows which meet the search criteria
-		Query query = createQuery(q, null, searchCriteria, searchFieldList,
-				true);
-
-		// Make the database call to get the total count
-		Long count = getDao().executeCountQueryInSecurityContext(tEntityClass,
-				query);
-		if (count == null) {
-			// If no data that meets the criteria, return 0
-			return 0;
-		}
-		return count.longValue();
-	}
-
-	public VXLong getSearchCount(SearchCriteria searchCriteria,
-			List<SearchField> searchFieldList) {
-		long count = getCountForSearchQuery(searchCriteria, searchFieldList);
-
-		VXLong vXLong = new VXLong();
-		vXLong.setValue(count);
-		return vXLong;
-	}
-
-	protected List<T> searchResources(SearchCriteria searchCriteria,
-			List<SearchField> searchFieldList, List<SortField> sortFieldList,
-			VList vList) {
-
-		// Get total count of the rows which meet the search criteria
-		long count = -1;
-		if (searchCriteria.isGetCount()) {
-			count = getCountForSearchQuery(searchCriteria, searchFieldList);
-			if (count == 0) {
-				return Collections.emptyList();
-			}
-		}
-		// construct the sort clause
-		String sortClause = searchUtil.constructSortClause(searchCriteria,
-				sortFieldList);
-
-		String q = queryStr;
-		if (searchCriteria.isDistinct()) {
-			q = distinctQueryStr;
-		}
-		// construct the query object for retrieving the data
-		Query query = createQuery(q, sortClause, searchCriteria,
-				searchFieldList, false);
-
-		List<T> resultList = getDao().executeQueryInSecurityContext(
-				tEntityClass, query);
-
-		if (vList != null) {
-			// Set the meta values for the query result
-			vList.setPageSize(query.getMaxResults());
-			vList.setSortBy(searchCriteria.getSortBy());
-			vList.setSortType(searchCriteria.getSortType());
-			vList.setStartIndex(query.getFirstResult());
-			vList.setTotalCount(count);
-			vList.setResultSize(resultList.size());
-		}
-		return resultList;
-	}
-
-	// -------------Criteria Usage--------------------
-	// -----------------------------------------------
-	public VXLong getSearchCountUsingCriteria(SearchCriteria searchCriteria,
-			List<SearchField> searchFieldList) {
-		EntityManager em = getDao().getEntityManager();
-		CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
-		CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
-
-		Root<T> from = criteria.from(tEntityClass);
-		Expression<Long> countExpression = criteriaBuilder
-				.count(from.get("id"));
-		criteria.select(countExpression);
-
-		Predicate resourceConditions = buildResourceSpecificConditions(
-				criteriaBuilder, from, searchCriteria);
-		Predicate userConditions = buildUserConditions(
-				searchCriteria.getParamList(), searchFieldList,
-				criteriaBuilder, from);
-
-		if (resourceConditions != null) {
-			criteria.where(criteriaBuilder.and(resourceConditions,
-					userConditions));
-		} else {
-			criteria.where(criteriaBuilder.and(userConditions));
-		}
-
-		TypedQuery<Long> countQuery = em.createQuery(criteria);
-		long count = getDao().executeCountQueryInSecurityContext(tEntityClass,
-				countQuery);
-
-		VXLong vXLong = new VXLong();
-		vXLong.setValue(count);
-		return vXLong;
-	}
-
-	protected List<T> searchResourcesUsingCriteria(
-			SearchCriteria searchCriteria, List<SearchField> searchFieldList,
-			List<SortField> sortFieldList, VList vList) {
-		// boolean filterEnabled = getDao().enableVisiblityFilters(tClass,
-		// true);
-
-		EntityManager em = getDao().getEntityManager();
-		CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
-		CriteriaQuery criteria = criteriaBuilder.createQuery();
-		Root<T> from = criteria.from(tEntityClass);
-
-		Predicate resourceConditions = buildResourceSpecificConditions(
-				criteriaBuilder, from, searchCriteria);
-		Predicate userConditions = buildUserConditions(
-				searchCriteria.getParamList(), searchFieldList,
-				criteriaBuilder, from);
-
-		if (resourceConditions != null) {
-			criteria.where(criteriaBuilder.and(resourceConditions,
-					userConditions));
-		} else {
-			criteria.where(criteriaBuilder.and(userConditions));
-		}
-
-		// Get total count of the rows which meet the search criteria
-		long count = -1;
-		if (searchCriteria.isGetCount()) {
-
-			Expression<Long> countExpression = criteriaBuilder.count(from
-					.get("id"));
-			criteria.select(countExpression);
-			TypedQuery<Long> countQuery = em.createQuery(criteria);
-			count = getDao().executeCountQueryInSecurityContext(tEntityClass,
-					countQuery);
-			if (count == 0) {
-				return Collections.emptyList();
-			}
-		}
-
-		// construct the sort clause
-		setSortClause(searchCriteria, sortFieldList, criteriaBuilder, criteria,
-				from);
-
-		criteria.select(from);
-		TypedQuery<T> typedQuery = em.createQuery(criteria);
-		searchUtil.updateQueryPageSize(typedQuery, searchCriteria);
-
-		List<T> resultList = getDao().executeQueryInSecurityContext(
-				tEntityClass, typedQuery);
-
-		if (vList != null) {
-			// Set the meta values for the query result
-			vList.setPageSize(typedQuery.getMaxResults());
-			vList.setSortBy(searchCriteria.getSortBy());
-			vList.setSortType(searchCriteria.getSortType());
-			vList.setStartIndex(typedQuery.getFirstResult());
-			vList.setTotalCount(count);
-		}
-
-		// if (filterEnabled) {
-		// getDao().disableVisiblityFilters(tClass);
-		// }
-
-		return resultList;
-	}
-
-	protected Predicate buildUserConditions(Map<String, Object> paramList,
-			List<SearchField> searchFields, CriteriaBuilder cb,
-			Root<? extends XXDBBase> from) {
-		Predicate userConditions = cb.conjunction();
-
-		for (SearchField searchField : searchFields) {
-			if (paramList.containsKey(searchField.getClientFieldName())) {
-				Path<Object> tableField = null;
-				String fieldName = searchField.getFieldName();
-
-				// stuff to handle jpql syntax (e.g. obj.id, obj.city.city etc).
-				// There has to be better way of dealing with this. Will look
-				// again.
-				int dotIndex = fieldName.indexOf(".");
-				if (dotIndex != -1) {
-					fieldName = fieldName.substring(dotIndex + 1);
-				}
-				dotIndex = fieldName.indexOf(".");
-				if (dotIndex == -1) {
-					tableField = from.get(fieldName);
-				} else {
-					String joinTable = fieldName.substring(0, dotIndex);
-					fieldName = fieldName.substring(dotIndex + 1);
-					tableField = from.join(joinTable).get(fieldName);
-				}
-
-				Object value = paramList.get(searchField.getClientFieldName());
-				if (value == null) {
-					userConditions = cb.and(userConditions,
-							cb.isNull(tableField));
-					continue;
-				}
-
-				if (searchField.getDataType() == SearchField.DATA_TYPE.INTEGER
-						|| searchField.getDataType() == SearchField.DATA_TYPE.BOOLEAN) {
-					userConditions = cb.and(userConditions,
-							cb.equal(tableField, value));
-				} else if (searchField.getDataType() == SearchField.DATA_TYPE.STRING) {
-					String strFieldValue = (String) value;
-					Expression<String> tableFieldWithLowerExpr = cb
-							.lower(tableField.as(String.class));
-
-					if (searchField.getSearchType() == SearchField.SEARCH_TYPE.FULL) {
-						Expression<String> literal = cb.lower(cb
-								.literal(strFieldValue));
-						userConditions = cb.and(userConditions,
-								cb.equal(tableFieldWithLowerExpr, literal));
-					} else {
-						Expression<String> literal = cb.lower(cb.literal("%"
-								+ strFieldValue + "%"));
-						userConditions = cb.and(userConditions,
-								cb.like(tableFieldWithLowerExpr, literal));
-					}
-				} else if (searchField.getDataType() == SearchField.DATA_TYPE.INT_LIST) {
-
-					@SuppressWarnings("unchecked")
-					Collection<Number> intValueList = (Collection<Number>) value;
-					if (intValueList.size() == 1) {
-						userConditions = cb.and(userConditions,
-								cb.equal(tableField, value));
-					} else if (intValueList.size() > 1) {
-						userConditions = cb.and(userConditions,
-								tableField.in(intValueList));
-					}
-				}
-
-			}
-
-		} // for
-
-		return userConditions;
-	}
-
-	protected Predicate buildResourceSpecificConditions(
-			CriteriaBuilder criteriaBuilder, Root<T> from, SearchCriteria sc) {
-		return null;
-	}
-
-	public void setSortClause(SearchCriteria searchCriteria,
-			List<SortField> sortFields, CriteriaBuilder criteriaBuilder,
-			CriteriaQuery<? extends Object> criteria, Root<? extends XXDBBase> from) {
-
-		String sortBy = searchCriteria.getSortBy();
-		String sortByField = null;
-
-		if (!stringUtil.isEmpty(sortBy)) {
-			sortBy = sortBy.trim();
-			for (SortField sortField : sortFields) {
-				if (sortBy.equalsIgnoreCase(sortField.getParamName())) {
-					sortByField = sortField.getFieldName();
-					// Override the sortBy using the normalized value
-					// searchCriteria.setSortBy(sortByField);
-					break;
-				}
-			}
-		}
-
-		if (sortByField == null) {
-			for (SortField sortField : sortFields) {
-				if (sortField.isDefault()) {
-					sortByField = sortField.getFieldName();
-					// Override the sortBy using the default value
-					searchCriteria.setSortBy(sortField.getParamName());
-					searchCriteria.setSortType(sortField.getDefaultOrder()
-							.name());
-					break;
-				}
-			}
-		}
-
-		if (sortByField != null) {
-			int dotIndex = sortByField.indexOf(".");
-			if (dotIndex != -1) {
-				sortByField = sortByField.substring(dotIndex + 1);
-			}
-
-			// Add sort type
-			String sortType = searchCriteria.getSortType();
-			if (sortType != null && "desc".equalsIgnoreCase(sortType)) {
-				criteria.orderBy(criteriaBuilder.desc(from.get(sortByField)));
-			} else {
-				criteria.orderBy(criteriaBuilder.asc(from.get(sortByField)));
-			}
-
-		}
-	}
-
-	public Map<Long,V> convertVListToVMap(List<V> vObjList) {
-		Map<Long,V> ret = new HashMap<Long,V>();
-		if (vObjList == null) {
-			return ret;
-		}
-		for (V vObj : vObjList) {
-			ret.put(vObj.getId(), vObj);
-		}
-		return ret;
-	}
+    protected static final Logger logger = LoggerFactory.getLogger(AbstractBaseResourceService.class);
+
+    protected static final Map<Class<?>, String> tEntityValueMap = new HashMap<>();
+
+    public final List<SortField>   sortFields      = new ArrayList<>();
+    public final List<SearchField> searchFields    = new ArrayList<>();
+
+    protected final Class<T> tEntityClass;
+    protected final Class<V> tViewClass;
+    protected final String   className;
+    protected final String   viewClassName;
+    protected final String   countQueryStr;
+    protected final String   queryStr;
+    protected final String   distinctCountQueryStr;
+    protected final String   distinctQueryStr;
+
+    @Autowired
+    protected RangerDaoManager daoManager;
+
+    @Autowired
+    protected SearchUtil searchUtil;
+
+    @Autowired
+    protected RESTErrorUtil restErrorUtil;
+
+    @Autowired
+    BaseDao<T> entityDao;
+
+    @Autowired
+    StringUtil stringUtil;
+
+    @Autowired
+    RangerDomainObjectSecurityHandler objectSecurityHandler;
+
+    @Autowired
+    RangerBizUtil bizUtil;
+
+    @Autowired
+    RangerConfigUtil msConfigUtil;
+
+    @SuppressWarnings("unchecked")
+    public AbstractBaseResourceService() {
+        Class                    klass             = getClass();
+        ParameterizedType        genericSuperclass = (ParameterizedType) klass.getGenericSuperclass();
+        TypeVariable<Class<?>>[] var               = klass.getTypeParameters();
+
+        if (genericSuperclass.getActualTypeArguments()[0] instanceof Class) {
+            tEntityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
+            tViewClass   = (Class<V>) genericSuperclass.getActualTypeArguments()[1];
+        } else if (var.length > 0) {
+            tEntityClass = (Class<T>) var[0].getBounds()[0];
+            tViewClass   = (Class<V>) var[1].getBounds()[0];
+        } else {
+            tEntityClass = null;
+            tViewClass   = null;
+
+            logger.error("Cannot find class for template", new Throwable());
+        }
+
+        if (tEntityClass != null) {
+            className = tEntityClass.getName();
+        } else {
+            className = null;
+        }
+
+        if (tViewClass != null) {
+            viewClassName = tViewClass.getName();
+        } else {
+            viewClassName = null;
+        }
+
+        // Get total count of the rows which meet the search criteria
+        countQueryStr         = "SELECT COUNT(obj) FROM " + className + " obj ";
+        queryStr              = "SELECT obj FROM " + className + " obj ";
+        distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM " + className + " obj ";
+        distinctQueryStr      = "SELECT distinct obj FROM " + className + " obj ";
+
+        sortFields.add(new SortField("id", "obj.id", true, SORT_ORDER.ASC));
+    }
+
+    public V createResource(V viewBaseBean) {
+        T resource = preCreate(viewBaseBean);
+
+        // object security
+        if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.CREATE)) {
+            throw restErrorUtil.create403RESTException(getResourceName() + " access denied. classType=" + resource.getMyClassType() + ", className=" + resource.getClass().getName() + ", objectId=" + resource.getId());
+        }
+
+        resource = getDao().create(resource);
+
+        return postCreate(resource);
+    }
+
+    public V readResource(Long id) {
+        // T resource = preRead(id);
+
+        T resource = getDao().getById(id);
+
+        if (resource == null) {
+            // Returns code 404 with DATA_NOT_FOUND as the error message
+            throw restErrorUtil.createRESTException(getResourceName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, "preRead: " + id + " not found.", HttpServletResponse.SC_NOT_FOUND);
+        }
+
+        return readResource(resource);
+    }
+
+    public V updateResource(V viewBaseBean) {
+        T resource = preUpdate(viewBaseBean);
+
+        // object security
+        if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.UPDATE)) {
+            throw restErrorUtil.create403RESTException(getResourceName() + " access denied. classType=" + resource.getMyClassType() + ", className=" + resource.getClass().getName() + ", objectId=" + resource.getId());
+        }
+
+        resource = getDao().update(resource);
+
+        return postUpdate(resource);
+    }
+
+    public boolean deleteResource(Long id) {
+        boolean result;
+        T       resource = preDelete(id);
+
+        if (resource == null) {
+            throw restErrorUtil.createRESTException(getResourceName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, getResourceName() + ":" + id);
+        }
+
+        // object security
+        if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.DELETE)) {
+            // throw 401
+            logger.debug("OBJECT SECURITY");
+        }
+
+        // Need to delete all dependent common objects like Notes and UserDataPref
+        try {
+            result = getDao().remove(resource);
+        } catch (Exception e) {
+            logger.error("Error deleting {} => Id = {}", getResourceName(), id, e);
+
+            throw restErrorUtil.createRESTException(getResourceName() + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id + ", error=" + e.getMessage());
+        }
+
+        postDelete(resource);
+
+        return result;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // mapping view bean attributes
+    // ----------------------------------------------------------------------------------
+    public V populateViewBean(T resource) {
+        V viewBean = createViewObject();
+
+        populateViewBean(resource, viewBean);
+
+        return mapEntityToViewBean(viewBean, resource);
+    }
+
+    public VXLong getSearchCount(SearchCriteria searchCriteria, List<SearchField> searchFieldList) {
+        long   count  = getCountForSearchQuery(searchCriteria, searchFieldList);
+        VXLong vXLong = new VXLong();
+
+        vXLong.setValue(count);
+
+        return vXLong;
+    }
+
+    // -------------Criteria Usage--------------------
+    // -----------------------------------------------
+    public VXLong getSearchCountUsingCriteria(SearchCriteria searchCriteria, List<SearchField> searchFieldList) {
+        EntityManager       em              = getDao().getEntityManager();
+        CriteriaBuilder     criteriaBuilder = em.getCriteriaBuilder();
+        CriteriaQuery<Long> criteria        = criteriaBuilder.createQuery(Long.class);
+        Root<T>             from            = criteria.from(tEntityClass);
+        Expression<Long>    countExpression = criteriaBuilder.count(from.get("id"));
+
+        criteria.select(countExpression);
+
+        Predicate resourceConditions = buildResourceSpecificConditions(criteriaBuilder, from, searchCriteria);
+        Predicate userConditions     = buildUserConditions(searchCriteria.getParamList(), searchFieldList, criteriaBuilder, from);
+
+        if (resourceConditions != null) {
+            criteria.where(criteriaBuilder.and(resourceConditions, userConditions));
+        } else {
+            criteria.where(criteriaBuilder.and(userConditions));
+        }
+
+        TypedQuery<Long> countQuery = em.createQuery(criteria);
+        long             count      = getDao().executeCountQueryInSecurityContext(tEntityClass, countQuery);
+        VXLong           vXLong     = new VXLong();
+
+        vXLong.setValue(count);
+
+        return vXLong;
+    }
+
+    public void setSortClause(SearchCriteria searchCriteria, List<SortField> sortFields, CriteriaBuilder criteriaBuilder, CriteriaQuery<?> criteria, Root<? extends XXDBBase> from) {
+        String sortBy      = searchCriteria.getSortBy();
+        String sortByField = null;
+
+        if (!stringUtil.isEmpty(sortBy)) {
+            sortBy = sortBy.trim();
+
+            for (SortField sortField : sortFields) {
+                if (sortBy.equalsIgnoreCase(sortField.getParamName())) {
+                    sortByField = sortField.getFieldName();
+
+                    // Override the sortBy using the normalized value
+                    // searchCriteria.setSortBy(sortByField);
+                    break;
+                }
+            }
+        }
+
+        if (sortByField == null) {
+            for (SortField sortField : sortFields) {
+                if (sortField.isDefault()) {
+                    sortByField = sortField.getFieldName();
+
+                    // Override the sortBy using the default value
+                    searchCriteria.setSortBy(sortField.getParamName());
+                    searchCriteria.setSortType(sortField.getDefaultOrder().name());
+                    break;
+                }
+            }
+        }
+
+        if (sortByField != null) {
+            int dotIndex = sortByField.indexOf(".");
+
+            if (dotIndex != -1) {
+                sortByField = sortByField.substring(dotIndex + 1);
+            }
+
+            // Add sort type
+            String sortType = searchCriteria.getSortType();
+
+            if ("desc".equalsIgnoreCase(sortType)) {
+                criteria.orderBy(criteriaBuilder.desc(from.get(sortByField)));
+            } else {
+                criteria.orderBy(criteriaBuilder.asc(from.get(sortByField)));
+            }
+        }
+    }
+
+    public Map<Long, V> convertVListToVMap(List<V> vObjList) {
+        Map<Long, V> ret = new HashMap<>();
+
+        if (vObjList == null) {
+            return ret;
+        }
+
+        for (V vObj : vObjList) {
+            ret.put(vObj.getId(), vObj);
+        }
+
+        return ret;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Create Operation
+    // ----------------------------------------------------------------------------------
+
+    protected abstract void validateForCreate(V viewBaseBean);
+
+    protected abstract void validateForUpdate(V viewBaseBean, T t);
+
+    protected abstract T mapViewToEntityBean(V viewBean, T t, int operationContext);
+
+    protected abstract V mapEntityToViewBean(V viewBean, T t);
+
+    protected String getResourceName() {
+        String resourceName = tEntityValueMap.get(tEntityClass);
+
+        if (resourceName == null || resourceName.isEmpty()) {
+            resourceName = "Object";
+        }
+
+        return resourceName;
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Read Operation
+    // ----------------------------------------------------------------------------------
+
+    protected BaseDao<T> getDao() {
+        if (entityDao == null) {
+            throw new NullPointerException("entityDao is not injected by Spring!");
+        }
+
+        return entityDao;
+    }
+
+    protected T createEntityObject() {
+        try {
+            return tEntityClass.newInstance();
+        } catch (Throwable e) {
+            logger.error("Error instantiating entity class. tEntityClass={}", tEntityClass.toString(), e);
+        }
+        return null;
+    }
+
+    protected V createViewObject() {
+        try {
+            return tViewClass.newInstance();
+        } catch (Throwable e) {
+            logger.error("Error instantiating view class. tViewClass={}", tViewClass.toString(), e);
+        }
+        return null;
+    }
+
+    /**
+     * Create Entity object and populate it from view object. Used in create operation
+     */
+    protected void mapBaseAttributesToEntityBean(T resource, V viewBean) {
+        if (resource.getCreateTime() == null) {
+            resource.setCreateTime(DateUtil.getUTCDate());
+        }
+
+        resource.setUpdateTime(DateUtil.getUTCDate());
+
+        if (resource.getAddedByUserId() == null) {
+            resource.setAddedByUserId(ContextUtil.getCurrentUserId());
+        }
+
+        resource.setUpdatedByUserId(ContextUtil.getCurrentUserId());
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Update Operation
+    // ----------------------------------------------------------------------------------
+    protected T populateEntityBeanForCreate(T t, V viewBaseBean) {
+        mapBaseAttributesToEntityBean(t, viewBaseBean);
+
+        return mapViewToEntityBean(viewBaseBean, t, OPERATION_CREATE_CONTEXT);
+    }
+
+    protected T preCreate(V viewBaseBean) {
+        validateGenericAttributes(viewBaseBean);
+        validateForCreate(viewBaseBean);
+
+        T t = createEntityObject();
+
+        t = populateEntityBeanForCreate(t, viewBaseBean);
+
+        return t;
+    }
+
+    protected V postCreate(T resource) {
+        return populateViewBean(resource);
+    }
+
+    protected T preRead(Long id) {
+        return null;
+    }
+
+    protected V postRead(T resource) {
+        return populateViewBean(resource);
+    }
+
+    /**
+     * Populate Entity object from view object. Used in update operation
+     */
+    protected T populateEntityBeanForUpdate(T t, V viewBaseBean) {
+        mapBaseAttributesToEntityBean(t, viewBaseBean);
+
+        return mapViewToEntityBean(viewBaseBean, t, OPERATION_UPDATE_CONTEXT);
+    }
+
+    protected T preUpdate(V viewBaseBean) {
+        T resource = getDao().getById(viewBaseBean.getId());
+
+        if (resource == null) {
+            // Returns code 400 with DATA_NOT_FOUND as the error message
+            throw restErrorUtil.createRESTException(getResourceName() + " not found", MessageEnums.DATA_NOT_FOUND, viewBaseBean.getId(), null, "preUpdate: id not found.");
+        }
+
+        validateForUpdate(viewBaseBean, resource);
+
+        return populateEntityBeanForUpdate(resource, viewBaseBean);
+    }
+
+    protected V postUpdate(T resource) {
+        return populateViewBean(resource);
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Delete Operation
+    // ----------------------------------------------------------------------------------
+    protected T preDelete(Long id) {
+        T resource = getDao().getById(id);
+
+        if (resource == null) {
+            // Return without error
+            logger.info("Delete ignored for non-existent {} id={}", getResourceName(), id);
+        }
+
+        return resource;
+    }
+
+    protected void postDelete(T resource) {
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Validation
+    // ----------------------------------------------------------------------------------
+    protected void validateGenericAttributes(V viewBaseBean) {
+    }
+
+    // ----------------------------------------------------------------------------------
+    // Search Operation
+    // ----------------------------------------------------------------------------------
+
+    protected V populateViewBean(T resource, V viewBean) {
+        mapBaseAttributesToViewBean(resource, viewBean);
+
+        // TODO:Current:Open: Need to set original and updated content
+        return viewBean;
+    }
+
+    protected void mapBaseAttributesToViewBean(T resource, V viewBean) {
+        viewBean.setId(resource.getId());
+
+        // TBD: Need to review this change later
+        viewBean.setMObj(resource);
+        viewBean.setCreateDate(resource.getCreateTime());
+        viewBean.setUpdateDate(resource.getUpdateTime());
+
+        Long            ownerId            = resource.getAddedByUserId();
+        UserSessionBase currentUserSession = ContextUtil.getCurrentUserSession();
+
+        if (currentUserSession == null) {
+            return;
+        }
+
+        if (ownerId != null) {
+            XXPortalUser tUser = daoManager.getXXPortalUser().getById(resource.getAddedByUserId());
+
+            if (tUser != null) {
+                if (tUser.getPublicScreenName() != null && !tUser.getPublicScreenName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
+                    viewBean.setOwner(tUser.getPublicScreenName());
+                } else {
+                    if (tUser.getFirstName() != null && !tUser.getFirstName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
+                        if (tUser.getLastName() != null && !tUser.getLastName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
+                            viewBean.setOwner(tUser.getFirstName() + " " + tUser.getLastName());
+                        } else {
+                            viewBean.setOwner(tUser.getFirstName());
+                        }
+                    } else {
+                        viewBean.setOwner(tUser.getLoginId());
+                    }
+                }
+            }
+        }
+
+        if (resource.getUpdatedByUserId() != null) {
+            XXPortalUser tUser = daoManager.getXXPortalUser().getById(resource.getUpdatedByUserId());
+
+            if (tUser != null) {
+                if (tUser.getPublicScreenName() != null && !tUser.getPublicScreenName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getPublicScreenName().trim())) {
+                    viewBean.setUpdatedBy(tUser.getPublicScreenName());
+                } else {
+                    if (tUser.getFirstName() != null && !tUser.getFirstName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getFirstName().trim())) {
+                        if (tUser.getLastName() != null && !tUser.getLastName().trim().isEmpty() && !"null".equalsIgnoreCase(tUser.getLastName().trim())) {
+                            viewBean.setUpdatedBy(tUser.getFirstName() + " " + tUser.getLastName());
+                        } else {
+                            viewBean.setUpdatedBy(tUser.getFirstName());
+                        }
+                    } else {
+                        viewBean.setUpdatedBy(tUser.getLoginId());
+                    }
+                }
+            }
+        }
+    }
+
+    protected Query createQuery(String searchString, String sortString, SearchCriteria searchCriteria, List<SearchField> searchFieldList, boolean isCountQuery) {
+        EntityManager em = getDao().getEntityManager();
+
+        return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria, searchFieldList, false, isCountQuery);
+    }
+
+    protected long getCountForSearchQuery(SearchCriteria searchCriteria, List<SearchField> searchFieldList) {
+        String q = countQueryStr;
+
+        // Get total count of the rows which meet the search criteria
+        if (searchCriteria.isDistinct()) {
+            q = distinctCountQueryStr;
+        }
+
+        // Get total count of the rows which meet the search criteria
+        Query query = createQuery(q, null, searchCriteria, searchFieldList, true);
+
+        // Make the database call to get the total count
+        Long count = getDao().executeCountQueryInSecurityContext(tEntityClass, query);
+
+        if (count == null) {
+            // If no data that meets the criteria, return 0
+            return 0;
+        }
+
+        return count;
+    }
+
+    protected List<T> searchResources(SearchCriteria searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, VList vList) {
+        // Get total count of the rows which meet the search criteria
+        long count = -1;
+
+        if (searchCriteria.isGetCount()) {
+            count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+            if (count == 0) {
+                return Collections.emptyList();
+            }
+        }
+
+        // construct the sort clause
+        String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
+
+        String q = queryStr;
+
+        if (searchCriteria.isDistinct()) {
+            q = distinctQueryStr;
+        }
+
+        // construct the query object for retrieving the data
+        Query   query      = createQuery(q, sortClause, searchCriteria, searchFieldList, false);
+        List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query);
+
+        if (vList != null) {
+            // Set the meta values for the query result
+            vList.setPageSize(query.getMaxResults());
+            vList.setSortBy(searchCriteria.getSortBy());
+            vList.setSortType(searchCriteria.getSortType());
+            vList.setStartIndex(query.getFirstResult());
+            vList.setTotalCount(count);
+            vList.setResultSize(resultList.size());
+        }
+
+        return resultList;
+    }
+
+    protected List<T> searchResourcesUsingCriteria(SearchCriteria searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, VList vList) {
+        EntityManager   em              = getDao().getEntityManager();
+        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
+        CriteriaQuery   criteria        = criteriaBuilder.createQuery();
+        Root<T>         from            = criteria.from(tEntityClass);
+
+        Predicate resourceConditions = buildResourceSpecificConditions(criteriaBuilder, from, searchCriteria);
+        Predicate userConditions     = buildUserConditions(searchCriteria.getParamList(), searchFieldList, criteriaBuilder, from);
+
+        if (resourceConditions != null) {
+            criteria.where(criteriaBuilder.and(resourceConditions, userConditions));
+        } else {
+            criteria.where(criteriaBuilder.and(userConditions));
+        }
+
+        // Get total count of the rows which meet the search criteria
+        long count = -1;
+        if (searchCriteria.isGetCount()) {
+            Expression<Long> countExpression = criteriaBuilder.count(from.get("id"));
+
+            criteria.select(countExpression);
+
+            TypedQuery<Long> countQuery = em.createQuery(criteria);
+
+            count = getDao().executeCountQueryInSecurityContext(tEntityClass, countQuery);
+
+            if (count == 0) {
+                return Collections.emptyList();
+            }
+        }
+
+        // construct the sort clause
+        setSortClause(searchCriteria, sortFieldList, criteriaBuilder, criteria, from);
+
+        criteria.select(from);
+
+        TypedQuery<T> typedQuery = em.createQuery(criteria);
+
+        searchUtil.updateQueryPageSize(typedQuery, searchCriteria);
+
+        List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, typedQuery);
+
+        if (vList != null) {
+            // Set the meta values for the query result
+            vList.setPageSize(typedQuery.getMaxResults());
+            vList.setSortBy(searchCriteria.getSortBy());
+            vList.setSortType(searchCriteria.getSortType());
+            vList.setStartIndex(typedQuery.getFirstResult());
+            vList.setTotalCount(count);
+        }
+
+        return resultList;
+    }
+
+    protected Predicate buildUserConditions(Map<String, Object> paramList, List<SearchField> searchFields, CriteriaBuilder cb, Root<? extends XXDBBase> from) {
+        Predicate userConditions = cb.conjunction();
+
+        for (SearchField searchField : searchFields) {
+            if (paramList.containsKey(searchField.getClientFieldName())) {
+                Path<Object> tableField;
+                String       fieldName  = searchField.getFieldName();
+
+                // stuff to handle jpql syntax (e.g. obj.id, obj.city.city etc). There has to be better way of dealing with this. Will look again.
+                int dotIndex = fieldName.indexOf(".");
+
+                if (dotIndex != -1) {
+                    fieldName = fieldName.substring(dotIndex + 1);
+                }
+
+                dotIndex = fieldName.indexOf(".");
+
+                if (dotIndex == -1) {
+                    tableField = from.get(fieldName);
+                } else {
+                    String joinTable = fieldName.substring(0, dotIndex);
+
+                    fieldName  = fieldName.substring(dotIndex + 1);
+                    tableField = from.join(joinTable).get(fieldName);
+                }
+
+                Object value = paramList.get(searchField.getClientFieldName());
+
+                if (value == null) {
+                    userConditions = cb.and(userConditions, cb.isNull(tableField));
+                    continue;
+                }
+
+                if (searchField.getDataType() == SearchField.DATA_TYPE.INTEGER || searchField.getDataType() == SearchField.DATA_TYPE.BOOLEAN) {
+                    userConditions = cb.and(userConditions, cb.equal(tableField, value));
+                } else if (searchField.getDataType() == SearchField.DATA_TYPE.STRING) {
+                    String             strFieldValue           = (String) value;
+                    Expression<String> tableFieldWithLowerExpr = cb.lower(tableField.as(String.class));
+
+                    if (searchField.getSearchType() == SearchField.SEARCH_TYPE.FULL) {
+                        Expression<String> literal = cb.lower(cb.literal(strFieldValue));
+
+                        userConditions = cb.and(userConditions, cb.equal(tableFieldWithLowerExpr, literal));
+                    } else {
+                        Expression<String> literal = cb.lower(cb.literal("%" + strFieldValue + "%"));
+
+                        userConditions = cb.and(userConditions, cb.like(tableFieldWithLowerExpr, literal));
+                    }
+                } else if (searchField.getDataType() == SearchField.DATA_TYPE.INT_LIST) {
+                    @SuppressWarnings("unchecked")
+                    Collection<Number> intValueList = (Collection<Number>) value;
+                    if (intValueList.size() == 1) {
+                        userConditions = cb.and(userConditions, cb.equal(tableField, value));
+                    } else if (intValueList.size() > 1) {
+                        userConditions = cb.and(userConditions, tableField.in(intValueList));
+                    }
+                }
+            }
+        }
+
+        return userConditions;
+    }
+
+    protected Predicate buildResourceSpecificConditions(CriteriaBuilder criteriaBuilder, Root<T> from, SearchCriteria sc) {
+        return null;
+    }
+
+    /**
+     * @param resource
+     * @return
+     */
+    private V readResource(T resource) {
+        // object security
+        if (!objectSecurityHandler.hasAccess(resource, Permission.PermissionType.READ)) {
+            throw restErrorUtil.create403RESTException(getResourceName() + " access denied. classType=" + resource.getMyClassType() + ", className=" + resource.getClass().getName() + ", objectId=" + resource.getId() + ", object=" + resource);
+        }
+
+        return postRead(resource);
+    }
+
+    static {
+        tEntityValueMap.put(XXAuthSession.class, "Auth Session");
+        tEntityValueMap.put(XXDBBase.class, "Base");
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java b/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java
index 25ca9fbe3..1718717ea 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/AuthSessionService.java
@@ -17,10 +17,7 @@
  * under the License.
  */
 
- package org.apache.ranger.service;
-
-import java.util.ArrayList;
-import java.util.List;
+package org.apache.ranger.service;
 
 import org.apache.ranger.common.RangerConstants;
 import org.apache.ranger.common.SearchCriteria;
@@ -34,157 +31,116 @@ import org.apache.ranger.view.VXAuthSessionList;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Service
 @Scope("singleton")
-public class AuthSessionService extends
-		AbstractBaseResourceService<XXAuthSession, VXAuthSession> {
-
-	public static final String NAME = "AuthSession";
-
-	public static final List<SortField> AUTH_SESSION_SORT_FLDS = new ArrayList<SortField>();
-	static {
-		AUTH_SESSION_SORT_FLDS.add(new SortField("id", "obj.id"));
-		AUTH_SESSION_SORT_FLDS.add(new SortField("authTime", "obj.authTime",
-				true, SortField.SORT_ORDER.DESC));
-	}
-
-	public static List<SearchField> AUTH_SESSION_SEARCH_FLDS = new ArrayList<SearchField>();
-	static {
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("id", "obj.id"));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("loginId",
-				"obj.loginId", SearchField.SEARCH_TYPE.PARTIAL,
-				StringUtil.VALIDATION_LOGINID));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("userId",
-				"obj.userId"));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authStatus",
-				"obj.authStatus", "statusList", XXAuthSession.AuthStatus_MAX));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authType",
-				"obj.authType", "Authentication Type",
-				XXAuthSession.AuthType_MAX));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("deviceType",
-				"obj.deviceType", "Device Type", RangerConstants.DeviceType_MAX));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP",
-				"obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL,
-				StringUtil.VALIDATION_IP_ADDRESS));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString(
-				"requestUserAgent", "obj.requestUserAgent",
-				SearchField.SEARCH_TYPE.PARTIAL, null));
-		AUTH_SESSION_SEARCH_FLDS.add(new SearchField("firstName",
-				"obj.user.firstName", SearchField.DATA_TYPE.STRING,
-				SearchField.SEARCH_TYPE.PARTIAL));
-		AUTH_SESSION_SEARCH_FLDS.add(new SearchField("lastName",
-				"obj.user.lastName", SearchField.DATA_TYPE.STRING,
-				SearchField.SEARCH_TYPE.PARTIAL));
-		AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP",
-				"obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL,
-				StringUtil.VALIDATION_IP_ADDRESS));	
-		AUTH_SESSION_SEARCH_FLDS.add(new SearchField("startDate", "obj.createTime",
-				SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
-		AUTH_SESSION_SEARCH_FLDS.add(new SearchField("endDate", "obj.createTime",
-				SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
-	}
-
-	@Override
-	protected String getResourceName() {
-		return NAME;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected XXAuthSession createEntityObject() {
-		return new XXAuthSession();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected VXAuthSession createViewObject() {
-		return new VXAuthSession();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected void validateForCreate(VXAuthSession vXAuthSession) {
-		logger.error("This method is not required and shouldn't be called.",
-				new Throwable().fillInStackTrace());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected void validateForUpdate(VXAuthSession vXAuthSession,
-			XXAuthSession mObj) {
-		logger.error("This method is not required and shouldn't be called.",
-				new Throwable().fillInStackTrace());
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected XXAuthSession mapViewToEntityBean(VXAuthSession vXAuthSession,
-			XXAuthSession t, int OPERATION_CONTEXT) {
-		logger.error("This method is not required and shouldn't be called.",
-				new Throwable().fillInStackTrace());
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 */
-	@Override
-	protected VXAuthSession mapEntityToViewBean(VXAuthSession viewObj,
-			XXAuthSession resource) {
-		viewObj.setLoginId(resource.getLoginId());
-		viewObj.setAuthTime(resource.getAuthTime());
-		viewObj.setAuthStatus(resource.getAuthStatus());
-		viewObj.setAuthType(resource.getAuthType());
-		viewObj.setDeviceType(resource.getDeviceType());
-		viewObj.setId(resource.getId());
-		viewObj.setRequestIP(resource.getRequestIP());
-
-		viewObj.setRequestUserAgent(resource.getRequestUserAgent());
-
-		if (resource.getUserId() != null) {
-			viewObj.setUserId(resource.getUserId());
-
-			XXPortalUser gjUser = daoManager.getXXPortalUser().getById(resource.getUserId());
-			if (gjUser != null) {
-				viewObj.setEmailAddress(gjUser.getEmailAddress());
-				viewObj.setFamilyScreenName(gjUser.getLastName());
-				viewObj.setFirstName(gjUser.getFirstName());
-				viewObj.setLastName(gjUser.getLastName());
-				viewObj.setPublicScreenName(gjUser.getPublicScreenName());
-			}
-		}
-
-		return viewObj;
-	}
-
-	/**
-	 * @param searchCriteria
-	 * @return
-	 */
-	public VXAuthSessionList search(SearchCriteria searchCriteria) {
-		VXAuthSessionList returnList = new VXAuthSessionList();
-		List<VXAuthSession> viewList = new ArrayList<VXAuthSession>();
-
-		List<XXAuthSession> resultList = searchResources(searchCriteria,
-				AUTH_SESSION_SEARCH_FLDS, AUTH_SESSION_SORT_FLDS, returnList);
-
-		// Iterate over the result list and create the return list
-		for (XXAuthSession gjObj : resultList) {
-			VXAuthSession viewObj = populateViewBean(gjObj);
-			viewList.add(viewObj);
-		}
-
-		returnList.setVXAuthSessions(viewList);
-		return returnList;
-	}
+public class AuthSessionService extends AbstractBaseResourceService<XXAuthSession, VXAuthSession> {
+    public static final String NAME = "AuthSession";
+
+    public static final List<SortField>   AUTH_SESSION_SORT_FLDS   = new ArrayList<>();
+    public static final List<SearchField> AUTH_SESSION_SEARCH_FLDS = new ArrayList<>();
+
+    /**
+     * @param searchCriteria
+     * @return
+     */
+    public VXAuthSessionList search(SearchCriteria searchCriteria) {
+        VXAuthSessionList   returnList = new VXAuthSessionList();
+        List<VXAuthSession> viewList   = new ArrayList<>();
+
+        List<XXAuthSession> resultList = searchResources(searchCriteria, AUTH_SESSION_SEARCH_FLDS, AUTH_SESSION_SORT_FLDS, returnList);
+
+        // Iterate over the result list and create the return list
+        for (XXAuthSession gjObj : resultList) {
+            VXAuthSession viewObj = populateViewBean(gjObj);
+
+            viewList.add(viewObj);
+        }
+
+        returnList.setVXAuthSessions(viewList);
+
+        return returnList;
+    }
+
+    @Override
+    protected void validateForCreate(VXAuthSession vXAuthSession) {
+        logger.error("This method is not required and shouldn't be called.", new Throwable().fillInStackTrace());
+    }
+
+    @Override
+    protected void validateForUpdate(VXAuthSession vXAuthSession, XXAuthSession mObj) {
+        logger.error("This method is not required and shouldn't be called.", new Throwable().fillInStackTrace());
+    }
+
+    @Override
+    protected XXAuthSession mapViewToEntityBean(VXAuthSession vXAuthSession, XXAuthSession t, int operationContext) {
+        logger.error("This method is not required and shouldn't be called.", new Throwable().fillInStackTrace());
+
+        return null;
+    }
+
+    @Override
+    protected VXAuthSession mapEntityToViewBean(VXAuthSession viewObj, XXAuthSession resource) {
+        viewObj.setLoginId(resource.getLoginId());
+        viewObj.setAuthTime(resource.getAuthTime());
+        viewObj.setAuthStatus(resource.getAuthStatus());
+        viewObj.setAuthType(resource.getAuthType());
+        viewObj.setDeviceType(resource.getDeviceType());
+        viewObj.setId(resource.getId());
+        viewObj.setRequestIP(resource.getRequestIP());
+        viewObj.setRequestUserAgent(resource.getRequestUserAgent());
+
+        if (resource.getUserId() != null) {
+            viewObj.setUserId(resource.getUserId());
+
+            XXPortalUser gjUser = daoManager.getXXPortalUser().getById(resource.getUserId());
+            if (gjUser != null) {
+                viewObj.setEmailAddress(gjUser.getEmailAddress());
+                viewObj.setFamilyScreenName(gjUser.getLastName());
+                viewObj.setFirstName(gjUser.getFirstName());
+                viewObj.setLastName(gjUser.getLastName());
+                viewObj.setPublicScreenName(gjUser.getPublicScreenName());
+            }
+        }
+
+        return viewObj;
+    }
+
+    @Override
+    protected String getResourceName() {
+        return NAME;
+    }
+
+    @Override
+    protected XXAuthSession createEntityObject() {
+        return new XXAuthSession();
+    }
+
+    @Override
+    protected VXAuthSession createViewObject() {
+        return new VXAuthSession();
+    }
+
+    static {
+        AUTH_SESSION_SORT_FLDS.add(new SortField("id", "obj.id"));
+        AUTH_SESSION_SORT_FLDS.add(new SortField("authTime", "obj.authTime", true, SortField.SORT_ORDER.DESC));
+    }
+
+    static {
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("id", "obj.id"));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("loginId", "obj.loginId", SearchField.SEARCH_TYPE.PARTIAL, StringUtil.VALIDATION_LOGINID));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createLong("userId", "obj.userId"));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authStatus", "obj.authStatus", "statusList", XXAuthSession.AuthStatus_MAX));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("authType", "obj.authType", "Authentication Type", XXAuthSession.AuthType_MAX));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createEnum("deviceType", "obj.deviceType", "Device Type", RangerConstants.DeviceType_MAX));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP", "obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL, StringUtil.VALIDATION_IP_ADDRESS));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestUserAgent", "obj.requestUserAgent", SearchField.SEARCH_TYPE.PARTIAL, null));
+        AUTH_SESSION_SEARCH_FLDS.add(new SearchField("firstName", "obj.user.firstName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        AUTH_SESSION_SEARCH_FLDS.add(new SearchField("lastName", "obj.user.lastName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        AUTH_SESSION_SEARCH_FLDS.add(SearchField.createString("requestIP", "obj.requestIP", SearchField.SEARCH_TYPE.PARTIAL, StringUtil.VALIDATION_IP_ADDRESS));
+        AUTH_SESSION_SEARCH_FLDS.add(new SearchField("startDate", "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+        AUTH_SESSION_SEARCH_FLDS.add(new SearchField("endDate", "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java
index ad79a2a7a..e94f27848 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/PublicAPIServiceBase.java
@@ -17,29 +17,28 @@
  * under the License.
  */
 
- package org.apache.ranger.service;
+package org.apache.ranger.service;
 
 import org.apache.ranger.view.VXDataObject;
 
 public abstract class PublicAPIServiceBase<VXA extends VXDataObject, VX extends VXDataObject> {
+    protected VX mapBaseAttributesToPublicObject(VXA vXAObj, VX vPublicObj) {
+        vPublicObj.setId(vXAObj.getId());
+        vPublicObj.setCreateDate(vXAObj.getCreateDate());
+        vPublicObj.setUpdateDate(vXAObj.getUpdateDate());
+        vPublicObj.setOwner(vXAObj.getOwner());
+        vPublicObj.setUpdatedBy(vXAObj.getUpdatedBy());
 
-	protected VX mapBaseAttributesToPublicObject(VXA vXAObj, VX vPublicObj) {
-		vPublicObj.setId(vXAObj.getId());
-		vPublicObj.setCreateDate(vXAObj.getCreateDate());
-		vPublicObj.setUpdateDate(vXAObj.getUpdateDate());
-		vPublicObj.setOwner(vXAObj.getOwner());
-		vPublicObj.setUpdatedBy(vXAObj.getUpdatedBy());
-		return vPublicObj;
-	}
+        return vPublicObj;
+    }
 
-	protected VXA mapBaseAttributesToXAObject(VX vPublicObj, VXA vXAObj) {
-		vXAObj.setId(vPublicObj.getId());
-		vXAObj.setCreateDate(vPublicObj.getCreateDate());
-		vXAObj.setUpdateDate(vPublicObj.getUpdateDate());
-		vXAObj.setOwner(vPublicObj.getOwner());
-		vXAObj.setUpdatedBy(vPublicObj.getUpdatedBy());
-
-		return vXAObj;
-	}
+    protected VXA mapBaseAttributesToXAObject(VX vPublicObj, VXA vXAObj) {
+        vXAObj.setId(vPublicObj.getId());
+        vXAObj.setCreateDate(vPublicObj.getCreateDate());
+        vXAObj.setUpdateDate(vPublicObj.getUpdateDate());
+        vXAObj.setOwner(vPublicObj.getOwner());
+        vXAObj.setUpdatedBy(vPublicObj.getUpdatedBy());
 
+        return vXAObj;
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java
index fe1883dd1..91fd15afb 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditFields.java
@@ -24,21 +24,21 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class RangerAuditFields<T extends XXDBBase> {
+    public <T extends XXDBBase, PARENT extends XXDBBase> T populateAuditFields(T xObj, PARENT parentObj) {
+        xObj.setCreateTime(parentObj.getCreateTime());
+        xObj.setUpdateTime(parentObj.getUpdateTime());
+        xObj.setAddedByUserId(parentObj.getAddedByUserId());
+        xObj.setUpdatedByUserId(parentObj.getUpdatedByUserId());
 
-	public <T extends XXDBBase, PARENT extends XXDBBase> T populateAuditFields(T xObj, PARENT parentObj) {
-		xObj.setCreateTime(parentObj.getCreateTime());
-		xObj.setUpdateTime(parentObj.getUpdateTime());
-		xObj.setAddedByUserId(parentObj.getAddedByUserId());
-		xObj.setUpdatedByUserId(parentObj.getUpdatedByUserId());
-		return xObj;
-	}
+        return xObj;
+    }
 
-	public <T extends XXDBBase> T populateAuditFieldsForCreate(T xObj) {
-		xObj.setCreateTime(DateUtil.getUTCDate());
-		xObj.setUpdateTime(DateUtil.getUTCDate());
-		xObj.setAddedByUserId(ContextUtil.getCurrentUserId());
-		xObj.setUpdatedByUserId(ContextUtil.getCurrentUserId());
-		return xObj;
-	}
+    public <T extends XXDBBase> T populateAuditFieldsForCreate(T xObj) {
+        xObj.setCreateTime(DateUtil.getUTCDate());
+        xObj.setUpdateTime(DateUtil.getUTCDate());
+        xObj.setAddedByUserId(ContextUtil.getCurrentUserId());
+        xObj.setUpdatedByUserId(ContextUtil.getCurrentUserId());
 
+        return xObj;
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java
index dfecf720f..edf514b1f 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerAuditedModelService.java
@@ -31,213 +31,219 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.annotation.PostConstruct;
-import java.util.*;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public abstract class RangerAuditedModelService<T extends XXDBBase, V extends RangerBaseModelObject> extends RangerBaseModelService<T, V> {
-	private static final Logger LOG = LoggerFactory.getLogger(RangerAuditedModelService.class);
+    private static final Logger LOG = LoggerFactory.getLogger(RangerAuditedModelService.class);
+
+    protected final Map<String, VTrxLogAttr> trxLogAttrs  = new HashMap<>();
+    protected final String                   hiddenPasswordString;
+
+    private final int               classType;
+    private final int               parentClassType;
+    private final List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
+
+    @Autowired
+    RangerDataHistService dataHistService;
+
+    @Autowired
+    RangerEnumUtil xaEnumUtil;
+
+    protected RangerAuditedModelService(int classType) {
+        this(classType, 0);
+    }
+
+    protected RangerAuditedModelService(int classType, int parentClassType) {
+        super();
+
+        this.classType            = classType;
+        this.parentClassType      = parentClassType;
+        this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
+
+        LOG.debug("RangerAuditedModelService({}, {})", this.classType, this.parentClassType);
+    }
+
+    @PostConstruct
+    public void init() {
+        for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
+            if (vTrxLog.isObjName()) {
+                objNameAttrs.add(vTrxLog);
+            }
+        }
 
-	@Autowired
-	RangerDataHistService dataHistService;
+        if (objNameAttrs.isEmpty()) {
+            objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
+        }
+    }
 
-	@Autowired
-	RangerEnumUtil xaEnumUtil;
-	private final int               classType;
-	private final int               parentClassType;
-	private final List<VTrxLogAttr> objNameAttrs = new ArrayList<>();
-
-	protected final Map<String, VTrxLogAttr> trxLogAttrs = new HashMap<>();
-	protected final String                   hiddenPasswordString;
-
-	protected RangerAuditedModelService(int classType) {
-		this(classType, 0);
-	}
-
-	protected RangerAuditedModelService(int classType, int parentClassType) {
-		super();
-
-		this.classType            = classType;
-		this.parentClassType      = parentClassType;
-		this.hiddenPasswordString = PropertiesUtil.getProperty("ranger.password.hidden", "*****");
-
-		LOG.debug("RangerAuditedModelService({}, {})", this.classType, this.parentClassType);
-	}
-
-	@PostConstruct
-	public void init() {
-		for (VTrxLogAttr vTrxLog : trxLogAttrs.values()) {
-			if (vTrxLog.isObjName()) {
-				objNameAttrs.add(vTrxLog);
-			}
-		}
-
-		if (objNameAttrs.isEmpty()) {
-			objNameAttrs.add(new VTrxLogAttr("name", "Name", false, true));
-		}
-	}
+    public void onObjectChange(V current, V former, int action) {
+        switch (action) {
+            case RangerServiceService.OPERATION_CREATE_CONTEXT:
+                dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_CREATE);
+                break;
 
-	public void onObjectChange(V current, V former, int action) {
-		switch (action) {
-			case RangerServiceService.OPERATION_CREATE_CONTEXT:
-				dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_CREATE);
-				break;
+            case RangerServiceService.OPERATION_UPDATE_CONTEXT:
+                dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_UPDATE);
+                break;
 
-			case RangerServiceService.OPERATION_UPDATE_CONTEXT:
-				dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_UPDATE);
-				break;
+            case RangerServiceService.OPERATION_DELETE_CONTEXT:
+                if (current == null) {
+                    current = former;
+                }
 
-			case RangerServiceService.OPERATION_DELETE_CONTEXT:
-				if (current == null) {
-					current = former;
-				}
+                dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_DELETE);
+                break;
+        }
 
-				dataHistService.createObjectDataHistory(current, RangerDataHistService.ACTION_DELETE);
-				break;
-		}
+        if (current != null && (former != null || action != OPERATION_UPDATE_CONTEXT) && action != 0) {
+            createTransactionLog(current, former, action);
+        }
+    }
 
-		if (current != null && (former != null || action != OPERATION_UPDATE_CONTEXT) && action != 0) {
-			createTransactionLog(current, former, action);
-		}
-	}
+    public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
+        try {
+            ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
 
-	public void createTransactionLog(XXTrxLogV2 trxLog, String attrName, String oldValue, String newValue) {
-		try {
-			ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-
-			objChangeInfo.addAttribute(attrName, oldValue, newValue);
-
-			trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
-		} catch (Exception excp) {
-			LOG.warn("failed to convert attribute change info to json");
-		}
-
-		bizUtil.createTrxLog(Collections.singletonList(trxLog));
-	}
-
-	public void createTransactionLog(XXTrxLogV2 trxLog) {
-		bizUtil.createTrxLog(Collections.singletonList(trxLog));
-	}
-
-	public void createTransactionLog(V obj, V oldObj, int action) {
-		List<XXTrxLogV2> trxLogs = getTransactionLogs(obj, oldObj, action);
-
-		if (trxLogs != null) {
-			bizUtil.createTrxLog(trxLogs);
-		}
-	}
-
-	private List<XXTrxLogV2> getTransactionLogs(V obj, V oldObj, int action) {
-		if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
-			return null;
-		}
-
-		List<XXTrxLogV2> ret = new ArrayList<>();
-
-		try {
-			ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
-
-			for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
-				processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
-			}
-
-			if(objChangeInfo.getAttributes() != null && objChangeInfo.getAttributes().size() > 0) {
-				ret.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
-			}
-		} catch (Exception excp) {
-			LOG.warn("failed to get transaction log for object: type=" + obj.getClass().getName() + ", id=" + obj.getId(), excp);
-		}
-
-		return ret;
-	}
-
-	public int getParentObjectType(V obj, V oldObj) {
-		return parentClassType;
-	}
-
-	public String getParentObjectName(V obj, V oldObj) {
-		return null;
-	}
-
-	public Long getParentObjectId(V obj, V oldObj) {
-		return null;
-	}
-
-	public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
-		return false;
-	}
-
-	public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
-		return trxLogAttr.getAttrValue(obj, xaEnumUtil);
-	}
-
-	private String getObjectName(V obj) {
-		String ret = null;
-
-		for (VTrxLogAttr attr : objNameAttrs) {
-			ret = attr.getAttrValue(obj, xaEnumUtil);
-
-			if (StringUtils.isNotBlank(ret)) {
-				break;
-			}
-		}
-
-		return ret;
-	}
-
-	private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
-		if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
-			return;
-		}
-
-		String value = getTrxLogAttrValue(obj, trxLogAttr);
-
-		if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
-			return;
-		}
-
-		final String prevValue;
-		final String newValue;
-
-		if (action == OPERATION_CREATE_CONTEXT) {
-			prevValue = null;
-			newValue  = value;
-		} else if (action == OPERATION_DELETE_CONTEXT) {
-			prevValue = value;
-			newValue  = null;
-		} else if (action == OPERATION_UPDATE_CONTEXT) {
-			prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
-			newValue  = value;
-		} else if (action == OPERATION_IMPORT_CREATE_CONTEXT) {
-			prevValue = null;
-			newValue  = value;
-		} else if (action == OPERATION_IMPORT_DELETE_CONTEXT) {
-			prevValue = value;
-			newValue  = null;
-		} else {
-			prevValue = null;
-			newValue  = null;
-		}
-
-		if (StringUtils.equals(prevValue, newValue) || (StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue))) {
-			return;
-		}
-
-		objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
-	}
-
-	private String toActionString(int action) {
-		switch (action) {
-			case OPERATION_CREATE_CONTEXT:
-				return "create";
-			case OPERATION_UPDATE_CONTEXT:
-				return "update";
-			case OPERATION_DELETE_CONTEXT:
-				return "delete";
-			case OPERATION_IMPORT_CREATE_CONTEXT:
-				return "Import Create";
-			case OPERATION_IMPORT_DELETE_CONTEXT:
-				return "Import Delete";
-		}
-
-		return "unknown";
-	}
+            objChangeInfo.addAttribute(attrName, oldValue, newValue);
+
+            trxLog.setChangeInfo(JsonUtilsV2.objToJson(objChangeInfo));
+        } catch (Exception excp) {
+            LOG.warn("failed to convert attribute change info to json");
+        }
+
+        bizUtil.createTrxLog(Collections.singletonList(trxLog));
+    }
+
+    public void createTransactionLog(XXTrxLogV2 trxLog) {
+        bizUtil.createTrxLog(Collections.singletonList(trxLog));
+    }
+
+    public void createTransactionLog(V obj, V oldObj, int action) {
+        List<XXTrxLogV2> trxLogs = getTransactionLogs(obj, oldObj, action);
+
+        if (trxLogs != null) {
+            bizUtil.createTrxLog(trxLogs);
+        }
+    }
+
+    public int getParentObjectType(V obj, V oldObj) {
+        return parentClassType;
+    }
+
+    public String getParentObjectName(V obj, V oldObj) {
+        return null;
+    }
+
+    public Long getParentObjectId(V obj, V oldObj) {
+        return null;
+    }
+
+    public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
+        return false;
+    }
+
+    public String getTrxLogAttrValue(V obj, VTrxLogAttr trxLogAttr) {
+        return trxLogAttr.getAttrValue(obj, xaEnumUtil);
+    }
+
+    private List<XXTrxLogV2> getTransactionLogs(V obj, V oldObj, int action) {
+        if (obj == null || (action == OPERATION_UPDATE_CONTEXT && oldObj == null)) {
+            return null;
+        }
+
+        List<XXTrxLogV2> ret = new ArrayList<>();
+
+        try {
+            ObjectChangeInfo objChangeInfo = new ObjectChangeInfo();
+
+            for (VTrxLogAttr trxLog : trxLogAttrs.values()) {
+                processFieldToCreateTrxLog(trxLog, obj, oldObj, action, objChangeInfo);
+            }
+
+            if (objChangeInfo.getAttributes() != null && !objChangeInfo.getAttributes().isEmpty()) {
+                ret.add(new XXTrxLogV2(classType, obj.getId(), getObjectName(obj), getParentObjectType(obj, oldObj), getParentObjectId(obj, oldObj), getParentObjectName(obj, oldObj), toActionString(action), JsonUtilsV2.objToJson(objChangeInfo)));
+            }
+        } catch (Exception excp) {
+            LOG.warn("failed to get transaction log for object: type={}, id={}", obj.getClass().getName(), obj.getId(), excp);
+        }
+
+        return ret;
+    }
+
+    private String getObjectName(V obj) {
+        String ret = null;
+
+        for (VTrxLogAttr attr : objNameAttrs) {
+            ret = attr.getAttrValue(obj, xaEnumUtil);
+
+            if (StringUtils.isNotBlank(ret)) {
+                break;
+            }
+        }
+
+        return ret;
+    }
+
+    private void processFieldToCreateTrxLog(VTrxLogAttr trxLogAttr, V obj, V oldObj, int action, ObjectChangeInfo objChangeInfo) {
+        if (skipTrxLogForAttribute(obj, oldObj, trxLogAttr)) {
+            return;
+        }
+
+        String value = getTrxLogAttrValue(obj, trxLogAttr);
+
+        if ((action == OPERATION_CREATE_CONTEXT || action == OPERATION_DELETE_CONTEXT) && StringUtils.isBlank(value)) {
+            return;
+        }
+
+        final String prevValue;
+        final String newValue;
+
+        if (action == OPERATION_CREATE_CONTEXT) {
+            prevValue = null;
+            newValue  = value;
+        } else if (action == OPERATION_DELETE_CONTEXT) {
+            prevValue = value;
+            newValue  = null;
+        } else if (action == OPERATION_UPDATE_CONTEXT) {
+            prevValue = getTrxLogAttrValue(oldObj, trxLogAttr);
+            newValue  = value;
+        } else if (action == OPERATION_IMPORT_CREATE_CONTEXT) {
+            prevValue = null;
+            newValue  = value;
+        } else if (action == OPERATION_IMPORT_DELETE_CONTEXT) {
+            prevValue = value;
+            newValue  = null;
+        } else {
+            prevValue = null;
+            newValue  = null;
+        }
+
+        if (StringUtils.equals(prevValue, newValue) || (StringUtils.isEmpty(prevValue) && StringUtils.isEmpty(newValue))) {
+            return;
+        }
+
+        objChangeInfo.addAttribute(trxLogAttr.getAttribUserFriendlyName(), prevValue, newValue);
+    }
+
+    private String toActionString(int action) {
+        switch (action) {
+            case OPERATION_CREATE_CONTEXT:
+                return "create";
+            case OPERATION_UPDATE_CONTEXT:
+                return "update";
+            case OPERATION_DELETE_CONTEXT:
+                return "delete";
+            case OPERATION_IMPORT_CREATE_CONTEXT:
+                return "Import Create";
+            case OPERATION_IMPORT_DELETE_CONTEXT:
+                return "Import Delete";
+        }
+
+        return "unknown";
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
index 26f76578e..0484979d7 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
@@ -17,15 +17,6 @@
 
 package org.apache.ranger.service;
 
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.TypeVariable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
 import org.apache.ranger.biz.RangerBizUtil;
 import org.apache.ranger.common.ContextUtil;
 import org.apache.ranger.common.DateUtil;
@@ -51,452 +42,424 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 public abstract class RangerBaseModelService<T extends XXDBBase, V extends RangerBaseModelObject> {
-	private static final Logger LOG = LoggerFactory.getLogger(RangerBaseModelService.class);
-
-	public static final int OPERATION_CREATE_CONTEXT        = 1;
-	public static final int OPERATION_UPDATE_CONTEXT        = 2;
-	public static final int OPERATION_DELETE_CONTEXT        = 3;
-	public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4;
-	public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5;
-
-
-	@Autowired
-	protected RangerDaoManager daoMgr;
-
-	@Autowired
-	protected StringUtil stringUtil;
-
-	@Autowired
-	protected RESTErrorUtil restErrorUtil;
-	
-	@Autowired
-	protected RangerSearchUtil searchUtil;
-
-	@Autowired
-	protected BaseDao<T> entityDao;
-
-	@Autowired
-	RangerBizUtil bizUtil;
-
-	public    final List<SortField>   sortFields = new ArrayList<>();
-	public    final List<SearchField> searchFields = new ArrayList<>();
-	protected final Class<T>          tEntityClass;
-	protected final Class<V>          tViewClass;
-	protected final String            tClassName;
-	protected final String            countQueryStr;
-	protected final String            distinctCountQueryStr;
-	protected final String            queryStr;
-	protected final String            distinctQueryStr;
-	private         Boolean           populateExistingBaseFields;
-
-	@SuppressWarnings("unchecked")
-	public RangerBaseModelService() {
-		Class                  klass             = getClass();
-		ParameterizedType      genericSuperclass = (ParameterizedType) klass.getGenericSuperclass();
-		TypeVariable<Class<?>> var[]             = klass.getTypeParameters();
-
-		if (genericSuperclass.getActualTypeArguments()[0] instanceof Class) {
-			tEntityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
-			tViewClass   = (Class<V>) genericSuperclass.getActualTypeArguments()[1];
-		} else if (var.length > 0) {
-			tEntityClass = (Class<T>) var[0].getBounds()[0];
-			tViewClass   = (Class<V>) var[1].getBounds()[0];
-		} else {
-			LOG.error("Cannot find class for template", new Throwable());
-
-			tEntityClass = null;
-			tViewClass   = null;
-		}
-
-		tClassName = (tEntityClass != null) ? tEntityClass.getName() : "XXDBBase";
-
-		populateExistingBaseFields = false;
-
-		countQueryStr         = "SELECT COUNT(obj) FROM " + tClassName + " obj ";
-		distinctCountQueryStr = "SELECT COUNT(distinct obj.id) FROM " + tClassName + " obj ";
-		queryStr              = "SELECT obj FROM " + tClassName + " obj ";
-		distinctQueryStr      = "SELECT DISTINCT obj FROM " + tClassName + " obj ";
-	}
-
-	protected abstract T mapViewToEntityBean(V viewBean, T t,
-			int OPERATION_CONTEXT);
-
-	protected abstract V mapEntityToViewBean(V viewBean, T t);
-
-	protected T createEntityObject() {
-		try {
-			return tEntityClass.newInstance();
-		} catch (Throwable e) {
-			LOG.error("Error instantiating entity class. tEntityClass="
-					+ tEntityClass.toString(), e);
-		}
-		return null;
-	}
-
-	protected V createViewObject() {
-		try {
-			return tViewClass.newInstance();
-		} catch (Throwable e) {
-			LOG.error("Error instantiating view class. tViewClass="
-					+ tViewClass.toString(), e);
-		}
-		return null;
-	}
-
-	protected BaseDao<T> getDao() {
-		if (entityDao == null) {
-			throw new NullPointerException("entityDao is not injected by Spring!");
-		}
-		return entityDao;
-	}
-	
-	protected V populateViewBean(T entityObj) {
-		V vObj = createViewObject();
-		vObj.setId(entityObj.getId());
-		vObj.setCreateTime(entityObj.getCreateTime());
-		vObj.setUpdateTime(entityObj.getUpdateTime());
-		vObj.setCreatedBy(getUserScreenName(entityObj.getAddedByUserId()));
-		vObj.setUpdatedBy(getUserScreenName(entityObj.getUpdatedByUserId()));
-		
-		return mapEntityToViewBean(vObj, entityObj);
-	}
-
-	protected T populateEntityBeanForCreate(T entityObj, V vObj) {
-		if (!populateExistingBaseFields) {
-			entityObj.setCreateTime(DateUtil.getUTCDate());
-			entityObj.setUpdateTime(entityObj.getCreateTime());
-			entityObj.setAddedByUserId(ContextUtil.getCurrentUserId());
-			entityObj.setUpdatedByUserId(entityObj.getAddedByUserId());
-		} else {
-			XXPortalUser createdByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getCreatedBy());
-			XXPortalUser updByUser     = daoMgr.getXXPortalUser().findByLoginId(vObj.getUpdatedBy());
-
-			entityObj.setId(vObj.getId());
-			entityObj.setCreateTime(vObj.getCreateTime() != null ? vObj.getCreateTime() : DateUtil.getUTCDate());
-			entityObj.setUpdateTime(vObj.getUpdateTime() != null ? vObj.getUpdateTime() : DateUtil.getUTCDate());
-			entityObj.setAddedByUserId(createdByUser != null ? createdByUser.getId() : ContextUtil.getCurrentUserId());
-			entityObj.setUpdatedByUserId(updByUser != null ? updByUser.getId() : ContextUtil.getCurrentUserId());
-		}
-
-		return mapViewToEntityBean(vObj, entityObj, OPERATION_CREATE_CONTEXT);
-	}
-
-	protected T populateEntityBeanForUpdate(T entityObj, V vObj) {
-		if (entityObj == null) {
-			throw restErrorUtil.createRESTException(
-					"No Object found to update.",
-					MessageEnums.DATA_NOT_FOUND);
-		}
-
-		T ret = mapViewToEntityBean(vObj, entityObj, OPERATION_UPDATE_CONTEXT);
-
-		if (ret.getCreateTime() == null) {
-			ret.setCreateTime(DateUtil.getUTCDate());
-		}
-
-		if (ret.getAddedByUserId() == null) {
-			ret.setAddedByUserId(ContextUtil.getCurrentUserId());
-		}
-
-		if(!populateExistingBaseFields) {
-			ret.setUpdateTime(DateUtil.getUTCDate());
-			ret.setUpdatedByUserId(ContextUtil.getCurrentUserId());
-		}
-
-		return ret;
-	}
-
-	protected abstract void validateForCreate(V vObj);
-
-	protected abstract void validateForUpdate(V vObj, T entityObj);
-
-	public T preCreate(V vObj) {
-		validateForCreate(vObj);
-
-		T entityObj = createEntityObject();
-
-		return populateEntityBeanForCreate(entityObj, vObj);
-	}
-
-	public V postCreate(T xObj) {
-		return populateViewBean(xObj);
-	}
-
-	public V create(V vObj) {
-		T resource = preCreate(vObj);
-		resource = getDao().create(resource);
-		vObj = postCreate(resource);
-		return vObj;
-	}
-
-	public V create(V vObj, boolean flush) {
-		T resource = preCreate(vObj);
-		resource = getDao().create(resource, flush);
-		vObj = postCreate(resource);
-		return vObj;
-	}
-
-	public V read(Long id) {
-		T resource = getDao().getById(id);
-		if (resource == null) {
-			throw restErrorUtil.createRESTException(tViewClass.getName()
-					+ " :Data Not Found for given Id",
-					MessageEnums.DATA_NOT_FOUND, id, null,
-					"readResource : No Object found with given id.");
-		}
-		return populateViewBean(resource);
-	}
-	
-	public V update(V viewBaseBean) {
-		T resource = preUpdate(viewBaseBean);
-		resource = getDao().update(resource);
-		V viewBean = postUpdate(resource);
-		return viewBean;
-	}
-
-	public V postUpdate(T resource) {
-		return populateViewBean(resource);
-	}
-
-	public T preUpdate(V viewBaseBean) {
-		T resource = getDao().getById(viewBaseBean.getId());
-		if (resource == null) {
-			throw restErrorUtil.createRESTException(tEntityClass.getSimpleName()
-					+ " not found", MessageEnums.DATA_NOT_FOUND,
-					viewBaseBean.getId(), null, "preUpdate: id not found.");
-		}
-		validateForUpdate(viewBaseBean, resource);
-		return populateEntityBeanForUpdate(resource, viewBaseBean);
-	}
-	
-	public boolean delete(V vObj) {
-		boolean result = false;
-		Long id = vObj.getId();
-		T resource = preDelete(id);
-		if (resource == null) {
-			throw restErrorUtil.createRESTException(
-					tEntityClass.getSimpleName() + " not found",
-					MessageEnums.DATA_NOT_FOUND, id, null,
-					tEntityClass.getSimpleName() + ":" + id);
-		}
-		try {
-			result = getDao().remove(resource);
-		} catch (Exception e) {
-			LOG.error("Error deleting " + tEntityClass.getSimpleName()
-					+ ". Id=" + id, e);
-
-			throw restErrorUtil.createRESTException(
-					tEntityClass.getSimpleName() + " can't be deleted",
-					MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id
-							+ ", error=" + e.getMessage());
-		}
-		return result;
-	}
-
-	public boolean delete(V vObj, boolean flush) {
-		boolean result = false;
-		Long id = vObj.getId();
-		T resource = preDelete(id);
-		if (resource == null) {
-			throw restErrorUtil.createRESTException(
-					tEntityClass.getSimpleName() + " not found",
-					MessageEnums.DATA_NOT_FOUND, id, null,
-					tEntityClass.getSimpleName() + ":" + id);
-		}
-		try {
-			result = getDao().remove(resource);
-		} catch (Exception e) {
-			LOG.error("Error deleting " + tEntityClass.getSimpleName()
-					+ ". Id=" + id, e);
-
-			throw restErrorUtil.createRESTException(
-					tEntityClass.getSimpleName() + " can't be deleted",
-					MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, "" + id
-							+ ", error=" + e.getMessage());
-		}
-		return result;
-	}
-
-	protected T preDelete(Long id) {
-		T resource = getDao().getById(id);
-		if (resource == null) {
-			// Return without error
-			LOG.info("Delete ignored for non-existent Object, id=" + id);
-		}
-		return resource;
-	}
-
-	public Boolean getPopulateExistingBaseFields() {
-		return populateExistingBaseFields;
-	}
-
-	public void setPopulateExistingBaseFields(Boolean populateExistingBaseFields) {
-		this.populateExistingBaseFields = populateExistingBaseFields;
-	}
-	
-	/*
-	 * Search Operations
-	 *
-	 */
-	
-	public List<T> searchResources(SearchFilter searchCriteria,
-			List<SearchField> searchFieldList, List<SortField> sortFieldList,
-			VList vList) {
-
-		// Get total count of the rows which meet the search criteria
-		long count = -1;
-		if (searchCriteria.isGetCount()) {
-			count = getCountForSearchQuery(searchCriteria, searchFieldList);
-			if (count == 0) {
-				return Collections.emptyList();
-			}
-		}
-
-		String  sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
-		String  q          = searchCriteria.isDistinct() ? distinctQueryStr : queryStr;
-		Query   query      = createQuery(q, sortClause, searchCriteria, searchFieldList, false);
-		List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query);
-
-		if (vList != null) {
-			vList.setResultSize(resultList.size());
-			vList.setPageSize(query.getMaxResults());
-			vList.setSortBy(searchCriteria.getSortBy());
-			vList.setSortType(searchCriteria.getSortType());
-			vList.setStartIndex(query.getFirstResult());
-			vList.setTotalCount(count);
-		}
-		return resultList;
-	}
-
-	protected List<T> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<V> pList) {
-
-		// Get total count of the rows which meet the search criteria
-		long count = -1;
-		if (searchCriteria.isGetCount()) {
-			count = getCountForSearchQuery(searchCriteria, searchFieldList);
-			if (count == 0) {
-				return Collections.emptyList();
-			}
-		}
-
-		String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
-
-		String q = queryStr;
-		Query query = createQuery(q, sortClause, searchCriteria, searchFieldList, false);
-
-		List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query);
-
-		if (pList != null) {
-			pList.setResultSize(resultList.size());
-			pList.setPageSize(query.getMaxResults());
-			pList.setSortBy(searchCriteria.getSortBy());
-			pList.setSortType(searchCriteria.getSortType());
-			pList.setStartIndex(query.getFirstResult());
-			pList.setTotalCount(count);
-		}
-		return resultList;
-	}
-
-	//If not efficient we need to review this and add jpa_named queries to get the count
-	public long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
-		String q     = searchCriteria.isDistinct() ? distinctCountQueryStr : countQueryStr;
-		Query  query = createQuery(q, null, searchCriteria, searchFieldList, true);
-		Long   count = getDao().executeCountQueryInSecurityContext(tEntityClass, query);
-
-		return (count == null) ? 0 : count.longValue();
-	}
-	
-	protected Query createQuery(String searchString, String sortString, SearchFilter searchCriteria,
-			List<SearchField> searchFieldList, boolean isCountQuery) {
-		
-		EntityManager em = getDao().getEntityManager();
-		Query query = searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria,
-				searchFieldList, false, isCountQuery);
-		return query;
-	}
-
-	protected String getUserScreenName(Long userId) {
-		String ret = null;
-
-		XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
-
-		if(xPortalUser != null) {
-			ret = xPortalUser.getPublicScreenName();
-
-			if (stringUtil.isEmpty(ret)) {
-				ret = xPortalUser.getFirstName();
-
-				if(stringUtil.isEmpty(ret)) {
-					ret = xPortalUser.getLoginId();
-				} else {
-					if(!stringUtil.isEmpty(xPortalUser.getLastName())) {
-						ret += (" " + xPortalUser.getLastName());
-					}
-				}
-			}
-		}
-
-		return ret;
-	}
-
-	protected String getUserName(Long userId) {
-		String ret = null;
-
-		XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
-
-		if(xPortalUser != null) {
-			ret = xPortalUser.getLoginId();
-		}
-
-		return ret;
-	}
-
-	protected String getGroupName(Long groupId) {
-		String ret = null;
-
-		XXGroup xGroup = groupId == null ? null : daoMgr.getXXGroup().getById(groupId);
+    private static final Logger LOG = LoggerFactory.getLogger(RangerBaseModelService.class);
+
+    public static final int OPERATION_CREATE_CONTEXT        = 1;
+    public static final int OPERATION_UPDATE_CONTEXT        = 2;
+    public static final int OPERATION_DELETE_CONTEXT        = 3;
+    public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4;
+    public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5;
+
+    public final List<SortField>   sortFields   = new ArrayList<>();
+    public final List<SearchField> searchFields = new ArrayList<>();
+
+    protected final Class<T> tEntityClass;
+    protected final Class<V> tViewClass;
+    protected final String   tClassName;
+    protected final String   countQueryStr;
+    protected final String   distinctCountQueryStr;
+    protected final String   queryStr;
+    protected final String   distinctQueryStr;
+
+    @Autowired
+    protected RangerDaoManager daoMgr;
+
+    @Autowired
+    protected StringUtil stringUtil;
+
+    @Autowired
+    protected RESTErrorUtil restErrorUtil;
+
+    @Autowired
+    protected RangerSearchUtil searchUtil;
+
+    @Autowired
+    protected BaseDao<T> entityDao;
+
+    @Autowired
+    RangerBizUtil bizUtil;
+
+    private Boolean populateExistingBaseFields;
+
+    @SuppressWarnings("unchecked")
+    public RangerBaseModelService() {
+        Class                    klass             = getClass();
+        ParameterizedType        genericSuperclass = (ParameterizedType) klass.getGenericSuperclass();
+        TypeVariable<Class<?>>[] var               = klass.getTypeParameters();
+
+        if (genericSuperclass.getActualTypeArguments()[0] instanceof Class) {
+            tEntityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
+            tViewClass   = (Class<V>) genericSuperclass.getActualTypeArguments()[1];
+        } else if (var.length > 0) {
+            tEntityClass = (Class<T>) var[0].getBounds()[0];
+            tViewClass   = (Class<V>) var[1].getBounds()[0];
+        } else {
+            LOG.error("Cannot find class for template", new Throwable());
+
+            tEntityClass = null;
+            tViewClass   = null;
+        }
+
+        tClassName                 = (tEntityClass != null) ? tEntityClass.getName() : "XXDBBase";
+        populateExistingBaseFields = false;
+        countQueryStr              = "SELECT COUNT(obj) FROM " + tClassName + " obj ";
+        distinctCountQueryStr      = "SELECT COUNT(distinct obj.id) FROM " + tClassName + " obj ";
+        queryStr                   = "SELECT obj FROM " + tClassName + " obj ";
+        distinctQueryStr           = "SELECT DISTINCT obj FROM " + tClassName + " obj ";
+    }
+
+    public T preCreate(V vObj) {
+        validateForCreate(vObj);
+
+        T entityObj = createEntityObject();
+
+        return populateEntityBeanForCreate(entityObj, vObj);
+    }
+
+    public V postCreate(T xObj) {
+        return populateViewBean(xObj);
+    }
+
+    public V create(V vObj) {
+        T resource = preCreate(vObj);
+
+        resource = getDao().create(resource);
+        vObj     = postCreate(resource);
+
+        return vObj;
+    }
+
+    public V create(V vObj, boolean flush) {
+        T resource = preCreate(vObj);
+
+        resource = getDao().create(resource, flush);
+        vObj     = postCreate(resource);
+
+        return vObj;
+    }
+
+    public V read(Long id) {
+        T resource = getDao().getById(id);
+
+        if (resource == null) {
+            throw restErrorUtil.createRESTException(tViewClass.getName() + " :Data Not Found for given Id", MessageEnums.DATA_NOT_FOUND, id, null, "readResource : No Object found with given id.");
+        }
+
+        return populateViewBean(resource);
+    }
+
+    public V update(V viewBaseBean) {
+        T resource = preUpdate(viewBaseBean);
+
+        resource = getDao().update(resource);
+
+        return postUpdate(resource);
+    }
+
+    public V postUpdate(T resource) {
+        return populateViewBean(resource);
+    }
+
+    public T preUpdate(V viewBaseBean) {
+        T resource = getDao().getById(viewBaseBean.getId());
+
+        if (resource == null) {
+            throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " not found", MessageEnums.DATA_NOT_FOUND, viewBaseBean.getId(), null, "preUpdate: id not found.");
+        }
+
+        validateForUpdate(viewBaseBean, resource);
+
+        return populateEntityBeanForUpdate(resource, viewBaseBean);
+    }
+
+    public boolean delete(V vObj) {
+        boolean result;
+        Long    id       = vObj.getId();
+        T       resource = preDelete(id);
+
+        if (resource == null) {
+            throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, tEntityClass.getSimpleName() + ":" + id);
+        }
+
+        try {
+            result = getDao().remove(resource);
+        } catch (Exception e) {
+            LOG.error("Error deleting {}. Id={}", tEntityClass.getSimpleName(), id, e);
+
+            throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, id + ", error=" + e.getMessage());
+        }
+
+        return result;
+    }
+
+    public boolean delete(V vObj, boolean flush) {
+        boolean result;
+        Long    id       = vObj.getId();
+        T       resource = preDelete(id);
+
+        if (resource == null) {
+            throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " not found", MessageEnums.DATA_NOT_FOUND, id, null, tEntityClass.getSimpleName() + ":" + id);
+        }
+
+        try {
+            result = getDao().remove(resource);
+        } catch (Exception e) {
+            LOG.error("Error deleting {}. Id={}", tEntityClass.getSimpleName(), id, e);
+
+            throw restErrorUtil.createRESTException(tEntityClass.getSimpleName() + " can't be deleted", MessageEnums.OPER_NOT_ALLOWED_FOR_STATE, id, null, id + ", error=" + e.getMessage());
+        }
+
+        return result;
+    }
+
+    public Boolean getPopulateExistingBaseFields() {
+        return populateExistingBaseFields;
+    }
+
+    public void setPopulateExistingBaseFields(Boolean populateExistingBaseFields) {
+        this.populateExistingBaseFields = populateExistingBaseFields;
+    }
+
+    public List<T> searchResources(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, VList vList) {
+        // Get total count of the rows which meet the search criteria
+        long count = -1;
+
+        if (searchCriteria.isGetCount()) {
+            count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+            if (count == 0) {
+                return Collections.emptyList();
+            }
+        }
+
+        String  sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
+        String  q          = searchCriteria.isDistinct() ? distinctQueryStr : queryStr;
+        Query   query      = createQuery(q, sortClause, searchCriteria, searchFieldList, false);
+        List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query);
+
+        if (vList != null) {
+            vList.setResultSize(resultList.size());
+            vList.setPageSize(query.getMaxResults());
+            vList.setSortBy(searchCriteria.getSortBy());
+            vList.setSortType(searchCriteria.getSortType());
+            vList.setStartIndex(query.getFirstResult());
+            vList.setTotalCount(count);
+        }
+
+        return resultList;
+    }
+
+    //If not efficient we need to review this and add jpa_named queries to get the count
+    public long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
+        String q     = searchCriteria.isDistinct() ? distinctCountQueryStr : countQueryStr;
+        Query  query = createQuery(q, null, searchCriteria, searchFieldList, true);
+        Long   count = getDao().executeCountQueryInSecurityContext(tEntityClass, query);
+
+        return (count == null) ? 0 : count;
+    }
+
+    protected abstract T mapViewToEntityBean(V viewBean, T t, int operationContext);
+
+    protected abstract V mapEntityToViewBean(V viewBean, T t);
+
+    protected T createEntityObject() {
+        try {
+            return tEntityClass.newInstance();
+        } catch (Throwable e) {
+            LOG.error("Error instantiating entity class. tEntityClass={}", tEntityClass.toString(), e);
+        }
+
+        return null;
+    }
+
+    protected V createViewObject() {
+        try {
+            return tViewClass.newInstance();
+        } catch (Throwable e) {
+            LOG.error("Error instantiating view class. tViewClass={}", tViewClass.toString(), e);
+        }
+
+        return null;
+    }
+
+    protected BaseDao<T> getDao() {
+        if (entityDao == null) {
+            throw new NullPointerException("entityDao is not injected by Spring!");
+        }
+
+        return entityDao;
+    }
+
+    protected V populateViewBean(T entityObj) {
+        V vObj = createViewObject();
+
+        vObj.setId(entityObj.getId());
+        vObj.setCreateTime(entityObj.getCreateTime());
+        vObj.setUpdateTime(entityObj.getUpdateTime());
+        vObj.setCreatedBy(getUserScreenName(entityObj.getAddedByUserId()));
+        vObj.setUpdatedBy(getUserScreenName(entityObj.getUpdatedByUserId()));
+
+        return mapEntityToViewBean(vObj, entityObj);
+    }
+
+    protected T populateEntityBeanForCreate(T entityObj, V vObj) {
+        if (!populateExistingBaseFields) {
+            entityObj.setCreateTime(DateUtil.getUTCDate());
+            entityObj.setUpdateTime(entityObj.getCreateTime());
+            entityObj.setAddedByUserId(ContextUtil.getCurrentUserId());
+            entityObj.setUpdatedByUserId(entityObj.getAddedByUserId());
+        } else {
+            XXPortalUser createdByUser = daoMgr.getXXPortalUser().findByLoginId(vObj.getCreatedBy());
+            XXPortalUser updByUser     = daoMgr.getXXPortalUser().findByLoginId(vObj.getUpdatedBy());
+
+            entityObj.setId(vObj.getId());
+            entityObj.setCreateTime(vObj.getCreateTime() != null ? vObj.getCreateTime() : DateUtil.getUTCDate());
+            entityObj.setUpdateTime(vObj.getUpdateTime() != null ? vObj.getUpdateTime() : DateUtil.getUTCDate());
+            entityObj.setAddedByUserId(createdByUser != null ? createdByUser.getId() : ContextUtil.getCurrentUserId());
+            entityObj.setUpdatedByUserId(updByUser != null ? updByUser.getId() : ContextUtil.getCurrentUserId());
+        }
+
+        return mapViewToEntityBean(vObj, entityObj, OPERATION_CREATE_CONTEXT);
+    }
+
+    protected T populateEntityBeanForUpdate(T entityObj, V vObj) {
+        if (entityObj == null) {
+            throw restErrorUtil.createRESTException("No Object found to update.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        T ret = mapViewToEntityBean(vObj, entityObj, OPERATION_UPDATE_CONTEXT);
+
+        if (ret.getCreateTime() == null) {
+            ret.setCreateTime(DateUtil.getUTCDate());
+        }
+
+        if (ret.getAddedByUserId() == null) {
+            ret.setAddedByUserId(ContextUtil.getCurrentUserId());
+        }
+
+        if (!populateExistingBaseFields) {
+            ret.setUpdateTime(DateUtil.getUTCDate());
+            ret.setUpdatedByUserId(ContextUtil.getCurrentUserId());
+        }
+
+        return ret;
+    }
+
+    protected abstract void validateForCreate(V vObj);
+
+    /*
+     * Search Operations
+     *
+     */
+
+    protected abstract void validateForUpdate(V vObj, T entityObj);
+
+    protected T preDelete(Long id) {
+        T resource = getDao().getById(id);
+
+        if (resource == null) {
+            // Return without error
+            LOG.info("Delete ignored for non-existent Object, id={}", id);
+        }
+
+        return resource;
+    }
+
+    protected List<T> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<V> pList) {
+        // Get total count of the rows which meet the search criteria
+        long count = -1;
+
+        if (searchCriteria.isGetCount()) {
+            count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+            if (count == 0) {
+                return Collections.emptyList();
+            }
+        }
+
+        String  sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
+        String  q          = queryStr;
+        Query   query      = createQuery(q, sortClause, searchCriteria, searchFieldList, false);
+        List<T> resultList = getDao().executeQueryInSecurityContext(tEntityClass, query);
+
+        if (pList != null) {
+            pList.setResultSize(resultList.size());
+            pList.setPageSize(query.getMaxResults());
+            pList.setSortBy(searchCriteria.getSortBy());
+            pList.setSortType(searchCriteria.getSortType());
+            pList.setStartIndex(query.getFirstResult());
+            pList.setTotalCount(count);
+        }
+
+        return resultList;
+    }
+
+    protected Query createQuery(String searchString, String sortString, SearchFilter searchCriteria, List<SearchField> searchFieldList, boolean isCountQuery) {
+        EntityManager em = getDao().getEntityManager();
+
+        return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria, searchFieldList, false, isCountQuery);
+    }
+
+    protected String getUserScreenName(Long userId) {
+        String       ret = null;
+        XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
 
-		if(xGroup != null) {
-			ret = xGroup.getName();
-		}
+        if (xPortalUser != null) {
+            ret = xPortalUser.getPublicScreenName();
 
-		return ret;
-	}
+            if (stringUtil.isEmpty(ret)) {
+                ret = xPortalUser.getFirstName();
 
-	protected String getAccessTypeName(Long accessTypeDefId) {
-		String ret = null;
+                if (stringUtil.isEmpty(ret)) {
+                    ret = xPortalUser.getLoginId();
+                } else {
+                    if (!stringUtil.isEmpty(xPortalUser.getLastName())) {
+                        ret += (" " + xPortalUser.getLastName());
+                    }
+                }
+            }
+        }
 
-		XXAccessTypeDef accessTypeDef = accessTypeDefId == null ? null : daoMgr.getXXAccessTypeDef().getById(accessTypeDefId);
+        return ret;
+    }
 
-		if(accessTypeDef != null) {
-			ret = accessTypeDef.getName();
-		}
+    protected String getUserName(Long userId) {
+        XXPortalUser xPortalUser = userId == null ? null : daoMgr.getXXPortalUser().getById(userId);
 
-		return ret;
-	}
+        return xPortalUser != null ? xPortalUser.getLoginId() : null;
+    }
 
-	protected String getConditionName(Long conditionDefId) {
-		String ret = null;
+    protected String getGroupName(Long groupId) {
+        XXGroup xGroup = groupId == null ? null : daoMgr.getXXGroup().getById(groupId);
 
-		XXPolicyConditionDef conditionDef = conditionDefId == null ? null : daoMgr.getXXPolicyConditionDef().getById(conditionDefId);
+        return xGroup != null ? xGroup.getName() : null;
+    }
 
-		if(conditionDef != null) {
-			ret = conditionDef.getName();
-		}
+    protected String getAccessTypeName(Long accessTypeDefId) {
+        XXAccessTypeDef accessTypeDef = accessTypeDefId == null ? null : daoMgr.getXXAccessTypeDef().getById(accessTypeDefId);
 
-		return ret;
-	}
+        return accessTypeDef != null ? accessTypeDef.getName() : null;
+    }
 
-	protected String getResourceName(Long resourceDefId) {
-		String ret = null;
+    protected String getConditionName(Long conditionDefId) {
+        XXPolicyConditionDef conditionDef = conditionDefId == null ? null : daoMgr.getXXPolicyConditionDef().getById(conditionDefId);
 
-		XXResourceDef resourceDef = resourceDefId == null ? null : daoMgr.getXXResourceDef().getById(resourceDefId);
+        return conditionDef != null ? conditionDef.getName() : null;
+    }
 
-		if(resourceDef != null) {
-			ret = resourceDef.getName();
-		}
+    protected String getResourceName(Long resourceDefId) {
+        XXResourceDef resourceDef = resourceDefId == null ? null : daoMgr.getXXResourceDef().getById(resourceDefId);
 
-		return ret;
-	}
+        return resourceDef != null ? resourceDef.getName() : null;
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
index 38edcea12..1ca1018ad 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
@@ -17,8 +17,6 @@
 
 package org.apache.ranger.service;
 
-import java.util.Date;
-
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.DateUtil;
 import org.apache.ranger.common.JSONUtil;
@@ -27,136 +25,135 @@ import org.apache.ranger.common.RESTErrorUtil;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXDataHist;
 import org.apache.ranger.plugin.model.RangerBaseModelObject;
-import org.apache.ranger.plugin.model.RangerPolicy;
-import org.apache.ranger.plugin.model.RangerService;
-import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataShare;
+import org.apache.ranger.plugin.model.RangerGds.RangerDataShareInDataset;
 import org.apache.ranger.plugin.model.RangerGds.RangerDataset;
 import org.apache.ranger.plugin.model.RangerGds.RangerDatasetInProject;
-import org.apache.ranger.plugin.model.RangerGds.RangerDataShare;
 import org.apache.ranger.plugin.model.RangerGds.RangerProject;
-import org.apache.ranger.plugin.model.RangerGds.RangerDataShareInDataset;
 import org.apache.ranger.plugin.model.RangerGds.RangerSharedResource;
+import org.apache.ranger.plugin.model.RangerPolicy;
+import org.apache.ranger.plugin.model.RangerService;
+import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+
 @Service
 @Scope("singleton")
 public class RangerDataHistService {
+    public static final String ACTION_CREATE = "Create";
+    public static final String ACTION_UPDATE = "Update";
+    public static final String ACTION_DELETE = "Delete";
+
+    @Autowired
+    RESTErrorUtil restErrorUtil;
+
+    @Autowired
+    RangerDaoManager daoMgr;
+
+    @Autowired
+    JSONUtil jsonUtil;
+
+    public void createObjectDataHistory(RangerBaseModelObject baseModelObj, String action) {
+        if (baseModelObj == null || action == null) {
+            throw restErrorUtil.createRESTException("Error while creating DataHistory. " + "Object or Action can not be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        Integer    classType   = null;
+        String     objectName  = null;
+        String     content     = null;
+        Long       objectId    = baseModelObj.getId();
+        String     objectGuid  = baseModelObj.getGuid();
+        Date       currentDate = DateUtil.getUTCDate();
+        XXDataHist xDataHist   = new XXDataHist();
+
+        xDataHist.setObjectId(baseModelObj.getId());
+        xDataHist.setObjectGuid(objectGuid);
+        xDataHist.setCreateTime(currentDate);
+        xDataHist.setAction(action);
+        xDataHist.setVersion(baseModelObj.getVersion());
+        xDataHist.setUpdateTime(currentDate);
+        xDataHist.setFromTime(currentDate);
+
+        if (baseModelObj instanceof RangerServiceDef) {
+            RangerServiceDef serviceDef = (RangerServiceDef) baseModelObj;
+
+            objectName = serviceDef.getName();
+            classType  = AppConstants.CLASS_TYPE_XA_SERVICE_DEF;
+            content    = jsonUtil.writeObjectAsString(serviceDef);
+        } else if (baseModelObj instanceof RangerService) {
+            RangerService service = (RangerService) baseModelObj;
+
+            objectName = service.getName();
+            classType  = AppConstants.CLASS_TYPE_XA_SERVICE;
+            content    = jsonUtil.writeObjectAsString(service);
+        } else if (baseModelObj instanceof RangerPolicy) {
+            RangerPolicy policy = (RangerPolicy) baseModelObj;
+
+            objectName = policy.getName();
+            classType  = AppConstants.CLASS_TYPE_RANGER_POLICY;
+
+            policy.setServiceType(policy.getServiceType());
+
+            content = jsonUtil.writeObjectAsString(policy);
+        } else if (baseModelObj instanceof RangerDataset) {
+            RangerDataset dataset = (RangerDataset) baseModelObj;
+
+            objectName = dataset.getName();
+            classType  = AppConstants.CLASS_TYPE_GDS_DATASET;
+            content    = jsonUtil.writeObjectAsString(dataset);
+        } else if (baseModelObj instanceof RangerProject) {
+            RangerProject project = (RangerProject) baseModelObj;
+
+            objectName = project.getName();
+            classType  = AppConstants.CLASS_TYPE_GDS_PROJECT;
+            content    = jsonUtil.writeObjectAsString(project);
+        } else if (baseModelObj instanceof RangerDataShare) {
+            RangerDataShare dataShare = (RangerDataShare) baseModelObj;
+
+            objectName = dataShare.getName();
+            classType  = AppConstants.CLASS_TYPE_GDS_DATA_SHARE;
+            content    = jsonUtil.writeObjectAsString(dataShare);
+        } else if (baseModelObj instanceof RangerSharedResource) {
+            RangerSharedResource sharedResource = (RangerSharedResource) baseModelObj;
+
+            objectName = sharedResource.getName();
+            classType  = AppConstants.CLASS_TYPE_GDS_SHARED_RESOURCE;
+            content    = jsonUtil.writeObjectAsString(sharedResource);
+        } else if (baseModelObj instanceof RangerDataShareInDataset) {
+            RangerDataShareInDataset dataShareInDataset = (RangerDataShareInDataset) baseModelObj;
+
+            objectName = dataShareInDataset.getGuid();
+            classType  = AppConstants.CLASS_TYPE_GDS_DATA_SHARE_IN_DATASET;
+            content    = jsonUtil.writeObjectAsString(dataShareInDataset);
+        } else if (baseModelObj instanceof RangerDatasetInProject) {
+            RangerDatasetInProject datasetInProject = (RangerDatasetInProject) baseModelObj;
+
+            objectName = datasetInProject.getGuid();
+            classType  = AppConstants.CLASS_TYPE_GDS_DATASET_IN_PROJECT;
+            content    = jsonUtil.writeObjectAsString(datasetInProject);
+        }
+
+        xDataHist.setObjectClassType(classType);
+        xDataHist.setObjectName(objectName);
+        xDataHist.setContent(content);
+
+        daoMgr.getXXDataHist().create(xDataHist);
+
+        if (ACTION_UPDATE.equalsIgnoreCase(action) || ACTION_DELETE.equalsIgnoreCase(action)) {
+            XXDataHist prevHist = daoMgr.getXXDataHist().findLatestByObjectClassTypeAndObjectId(classType, objectId);
+
+            if (prevHist == null) {
+                throw restErrorUtil.createRESTException("Error updating DataHistory Object. ObjectName: " + objectName, MessageEnums.DATA_NOT_UPDATABLE);
+            }
 
-	@Autowired
-	RESTErrorUtil restErrorUtil;
-	
-	@Autowired
-	RangerDaoManager daoMgr;
-
-	@Autowired
-	JSONUtil jsonUtil;
-	
-	public static final String ACTION_CREATE = "Create";
-	public static final String ACTION_UPDATE = "Update";
-	public static final String ACTION_DELETE = "Delete";
-	
-	public void createObjectDataHistory(RangerBaseModelObject baseModelObj, String action) {
-		if(baseModelObj == null || action == null) {
-			throw restErrorUtil
-					.createRESTException("Error while creating DataHistory. "
-							+ "Object or Action can not be null.",
-							MessageEnums.DATA_NOT_FOUND);
-		}
-		
-		
-		Integer classType = null;
-		String objectName = null;
-		String content = null;
-		
-		Long objectId = baseModelObj.getId();
-		String objectGuid = baseModelObj.getGuid();
-		Date currentDate = DateUtil.getUTCDate();
-		
-		XXDataHist xDataHist = new XXDataHist();
-		
-		xDataHist.setObjectId(baseModelObj.getId());
-		xDataHist.setObjectGuid(objectGuid);
-		xDataHist.setCreateTime(currentDate);
-		xDataHist.setAction(action);
-		xDataHist.setVersion(baseModelObj.getVersion());
-		xDataHist.setUpdateTime(currentDate);
-		xDataHist.setFromTime(currentDate);
-
-		if(baseModelObj instanceof RangerServiceDef) {
-			RangerServiceDef serviceDef = (RangerServiceDef) baseModelObj;
-			objectName = serviceDef.getName();
-			classType = AppConstants.CLASS_TYPE_XA_SERVICE_DEF;
-			content = jsonUtil.writeObjectAsString(serviceDef);
-		} else if(baseModelObj instanceof RangerService) {
-			RangerService service = (RangerService) baseModelObj;
-			objectName = service.getName();
-			classType = AppConstants.CLASS_TYPE_XA_SERVICE;
-			content = jsonUtil.writeObjectAsString(service);
-		} else if(baseModelObj instanceof RangerPolicy) {
-			RangerPolicy policy = (RangerPolicy) baseModelObj;
-			objectName = policy.getName();
-			classType = AppConstants.CLASS_TYPE_RANGER_POLICY;
-			policy.setServiceType(policy.getServiceType());
-			content = jsonUtil.writeObjectAsString(policy);
-		} else if (baseModelObj instanceof RangerDataset) {
-			RangerDataset dataset = (RangerDataset) baseModelObj;
-
-			objectName = dataset.getName();
-			classType  = AppConstants.CLASS_TYPE_GDS_DATASET;
-			content    = jsonUtil.writeObjectAsString(dataset);
-		} else if (baseModelObj instanceof RangerProject) {
-			RangerProject project = (RangerProject) baseModelObj;
-
-			objectName = project.getName();
-			classType  = AppConstants.CLASS_TYPE_GDS_PROJECT;
-			content    = jsonUtil.writeObjectAsString(project);
-		} else if (baseModelObj instanceof RangerDataShare) {
-			RangerDataShare dataShare = (RangerDataShare) baseModelObj;
-
-			objectName = dataShare.getName();
-			classType  = AppConstants.CLASS_TYPE_GDS_DATA_SHARE;
-			content    = jsonUtil.writeObjectAsString(dataShare);
-		} else if (baseModelObj instanceof RangerSharedResource) {
-			RangerSharedResource sharedResource = (RangerSharedResource) baseModelObj;
-
-			objectName = sharedResource.getName();
-			classType  = AppConstants.CLASS_TYPE_GDS_SHARED_RESOURCE;
-			content    = jsonUtil.writeObjectAsString(sharedResource);
-		} else if (baseModelObj instanceof RangerDataShareInDataset) {
-			RangerDataShareInDataset dataShareInDataset = (RangerDataShareInDataset) baseModelObj;
-
-			objectName = dataShareInDataset.getGuid();
-			classType  = AppConstants.CLASS_TYPE_GDS_DATA_SHARE_IN_DATASET;
-			content    = jsonUtil.writeObjectAsString(dataShareInDataset);
-		} else if (baseModelObj instanceof RangerDatasetInProject) {
-			RangerDatasetInProject datasetInProject = (RangerDatasetInProject) baseModelObj;
-
-			objectName = datasetInProject.getGuid();
-			classType  = AppConstants.CLASS_TYPE_GDS_DATASET_IN_PROJECT;
-			content    = jsonUtil.writeObjectAsString(datasetInProject);
-		}
-		
-		xDataHist.setObjectClassType(classType);
-		xDataHist.setObjectName(objectName);
-		xDataHist.setContent(content);
-		xDataHist = daoMgr.getXXDataHist().create(xDataHist);
-		
-		if (ACTION_UPDATE.equalsIgnoreCase(action) || ACTION_DELETE.equalsIgnoreCase(action)) {
-			XXDataHist prevHist = daoMgr.getXXDataHist().findLatestByObjectClassTypeAndObjectId(classType, objectId);
-			
-			if(prevHist == null) {
-				throw restErrorUtil.createRESTException(
-						"Error updating DataHistory Object. ObjectName: "
-								+ objectName, MessageEnums.DATA_NOT_UPDATABLE);
-			}
-			
-			prevHist.setUpdateTime(currentDate);
-			prevHist.setToTime(currentDate);
-			prevHist.setObjectName(objectName);
-			prevHist = daoMgr.getXXDataHist().update(prevHist);
-		}
-	}
+            prevHist.setUpdateTime(currentDate);
+            prevHist.setToTime(currentDate);
+            prevHist.setObjectName(objectName);
 
+            daoMgr.getXXDataHist().update(prevHist);
+        }
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java
index d94aab013..f0f4bec22 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsBaseModelService.java
@@ -29,24 +29,22 @@ import java.util.ArrayList;
 import java.util.List;
 
 public abstract class RangerGdsBaseModelService<T extends XXDBBase, V extends RangerGdsBaseModelObject> extends RangerAuditedModelService<T, V> {
-
     protected RangerGdsBaseModelService(int classType) {
         super(classType, -1);
     }
 
-
     protected RangerGdsBaseModelService(int classType, int parentClassType) {
         super(classType, parentClassType);
 
-        searchFields.add(new SearchField(SearchFilter.GUID,              "obj.guid",       SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.IS_ENABLED,        "obj.isEnabled",  SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.CREATE_TIME_START, "obj.createTime", SearchField.DATA_TYPE.DATE,    SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
-        searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END,   "obj.createTime", SearchField.DATA_TYPE.DATE,    SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
-        searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_START, "obj.updateTime", SearchField.DATA_TYPE.DATE,    SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
-        searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_END,   "obj.createTime", SearchField.DATA_TYPE.DATE,    SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+        searchFields.add(new SearchField(SearchFilter.GUID, "obj.guid", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.IS_ENABLED, "obj.isEnabled", SearchField.DATA_TYPE.BOOLEAN, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.CREATE_TIME_START, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+        searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
+        searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_START, "obj.updateTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN));
+        searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN));
 
-        trxLogAttrs.put("description",    new VTrxLogAttr("description", "Description"));
-        trxLogAttrs.put("options",        new VTrxLogAttr("options", "Options"));
+        trxLogAttrs.put("description", new VTrxLogAttr("description", "Description"));
+        trxLogAttrs.put("options", new VTrxLogAttr("options", "Options"));
         trxLogAttrs.put("additionalInfo", new VTrxLogAttr("additionalInfo", "Additional info"));
     }
 
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java
index 866c742ca..cfe623eae 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareInDatasetService.java
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
@@ -61,36 +60,36 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
     public RangerGdsDataShareInDatasetService() {
         super(AppConstants.CLASS_TYPE_GDS_DATA_SHARE_IN_DATASET, AppConstants.CLASS_TYPE_GDS_DATASET);
 
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_IN_DATASET_ID, "obj.id",          SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,            "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,          "dsh.name",        SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh",                   "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL,  "dsh.name",        SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh",                   "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,               "dsh.serviceId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh",                   "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,             "s.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXService s",      "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,     "s.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXService s",      "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_ID,                  "dsh.zoneId",      SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,                "z.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,        "z.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,               "obj.datasetId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,             "d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataset d", "obj.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,     "d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,               "dip.projectId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataset d, XXGdsDatasetInProject dip",                 "obj.datasetId = d.id and d.id = dip.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,             "p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = dip.datasetId and dip.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,     "p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = dip.datasetId and dip.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.APPROVER,                 "obj.approverId",  SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.CREATED_BY,              "obj.addedByUserId",SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.SHARE_STATUS,            "obj.status",       SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,              "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,              "obj.updateTime"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_IN_DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d", "obj.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d, XXGdsDatasetInProject dip", "obj.datasetId = d.id and d.id = dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = dip.datasetId and dip.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d, XXGdsDatasetInProject dip, XXGdsProject p", "obj.datasetId = d.id and d.id = dip.datasetId and dip.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.APPROVER, "obj.approverId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.CREATED_BY, "obj.addedByUserId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.SHARE_STATUS, "obj.status", SearchField.DATA_TYPE.INTEGER, SearchField.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.DATA_SHARE_IN_DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
 
-        trxLogAttrs.put("dataShareId",      new VTrxLogAttr("dataShareId", "DataShare ID"));
-        trxLogAttrs.put("datasetId",        new VTrxLogAttr("datasetId", "Dataset ID"));
-        trxLogAttrs.put("status",           new VTrxLogAttr("status", "Status", true));
+        trxLogAttrs.put("dataShareId", new VTrxLogAttr("dataShareId", "DataShare ID"));
+        trxLogAttrs.put("datasetId", new VTrxLogAttr("datasetId", "Dataset ID"));
+        trxLogAttrs.put("status", new VTrxLogAttr("status", "Status", true));
         trxLogAttrs.put("validitySchedule", new VTrxLogAttr("validitySchedule", "Validity Schedule"));
-        trxLogAttrs.put("profiles",         new VTrxLogAttr("profiles", "Profiles"));
-        trxLogAttrs.put("approver",         new VTrxLogAttr("approver", "Approver"));
+        trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
+        trxLogAttrs.put("approver", new VTrxLogAttr("approver", "Approver"));
     }
 
     @Override
@@ -112,26 +111,53 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
     }
 
     @Override
-    public XXGdsDataShareInDataset preDelete(Long id) {
-        // Update ServiceVersionInfo for each service in the zone
-        XXGdsDataShareInDataset ret = super.preDelete(id);
+    protected XXGdsDataShareInDataset mapViewToEntityBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj, int operationContext) {
+        XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
 
-        // TODO:
+        if (xDataShare == null) {
+            throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-        return ret;
-    }
+        XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
 
-    @Override
-    public String getParentObjectName(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
-        Long         datasetId = obj != null ? obj.getDatasetId() : null;
-        XXGdsDataset dataset   = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
+        if (xDataset == null) {
+            throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-        return dataset != null ? dataset.getName() : null;
+        xObj.setGuid(vObj.getGuid());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setDataShareId(vObj.getDataShareId());
+        xObj.setDatasetId(vObj.getDatasetId());
+        xObj.setStatus((short) vObj.getStatus().ordinal());
+        xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
+        xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
+        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+
+        final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
+
+        xObj.setApproverId(user == null ? null : user.getId());
+
+        return xObj;
     }
 
     @Override
-    public Long getParentObjectId(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
-        return obj != null ? obj.getDatasetId() : null;
+    protected RangerDataShareInDataset mapEntityToViewBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setDataShareId(xObj.getDataShareId());
+        vObj.setDatasetId(xObj.getDatasetId());
+        vObj.setStatus(toShareStatus(xObj.getStatus()));
+        vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
+        vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
+        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+        vObj.setApprover(getUserName(xObj.getApproverId()));
+
+        return vObj;
     }
 
     @Override
@@ -237,52 +263,26 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
     }
 
     @Override
-    protected XXGdsDataShareInDataset mapViewToEntityBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj, int OPERATION_CONTEXT) {
-        XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
-
-        if (xDataShare == null) {
-            throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
-        }
-
-        XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
+    public XXGdsDataShareInDataset preDelete(Long id) {
+        // Update ServiceVersionInfo for each service in the zone
+        XXGdsDataShareInDataset ret = super.preDelete(id);
 
-        if (xDataset == null) {
-            throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
-        }
+        // TODO:
 
-        xObj.setGuid(vObj.getGuid());
-        xObj.setIsEnabled(vObj.getIsEnabled());
-        xObj.setDescription(vObj.getDescription());
-        xObj.setDataShareId(vObj.getDataShareId());
-        xObj.setDatasetId(vObj.getDatasetId());
-        xObj.setStatus((short) vObj.getStatus().ordinal());
-        xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
-        xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
-        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
-        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+        return ret;
+    }
 
-        final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
-        xObj.setApproverId(user == null? null : user.getId());
+    @Override
+    public String getParentObjectName(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
+        Long         datasetId = obj != null ? obj.getDatasetId() : null;
+        XXGdsDataset dataset   = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
 
-        return xObj;
+        return dataset != null ? dataset.getName() : null;
     }
 
     @Override
-    protected RangerDataShareInDataset mapEntityToViewBean(RangerDataShareInDataset vObj, XXGdsDataShareInDataset xObj) {
-        vObj.setGuid(xObj.getGuid());
-        vObj.setIsEnabled(xObj.getIsEnabled());
-        vObj.setVersion(xObj.getVersion());
-        vObj.setDescription(xObj.getDescription());
-        vObj.setDataShareId(xObj.getDataShareId());
-        vObj.setDatasetId(xObj.getDatasetId());
-        vObj.setStatus(toShareStatus(xObj.getStatus()));
-        vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
-        vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
-        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
-        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
-        vObj.setApprover(getUserName(xObj.getApproverId()));
-
-        return vObj;
+    public Long getParentObjectId(RangerDataShareInDataset obj, RangerDataShareInDataset oldObj) {
+        return obj != null ? obj.getDatasetId() : null;
     }
 
     public RangerDataShareInDataset getPopulatedViewObject(XXGdsDataShareInDataset xObj) {
@@ -292,7 +292,7 @@ public class RangerGdsDataShareInDatasetService extends RangerGdsBaseModelServic
     public RangerDataShareInDatasetList searchDataShareInDatasets(SearchFilter filter) {
         LOG.debug("==> searchDataShareInDatasets({})", filter);
 
-        RangerDataShareInDatasetList ret      = new RangerDataShareInDatasetList();
+        RangerDataShareInDatasetList  ret      = new RangerDataShareInDatasetList();
         List<XXGdsDataShareInDataset> datasets = super.searchResources(filter, searchFields, sortFields, ret);
 
         if (datasets != null) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
index 861b624aa..153edfa14 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
@@ -57,36 +56,35 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa
     public RangerGdsDataShareService() {
         super(AppConstants.CLASS_TYPE_GDS_DATA_SHARE, AppConstants.CLASS_TYPE_XA_SERVICE);
 
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,           "obj.id",          SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,         "obj.name",        SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "obj.name",        SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,              "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid",                 "obj.id = dshid.dataShareId"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,            "d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,    "d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,              "obj.serviceId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,            "s.name",          SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL,     "XXService s", "obj.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,    "s.name",          SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL,  "XXService s", "obj.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_ID,                 "obj.zoneId",      SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,               "z.name",          SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL,     "XXSecurityZone z", "obj.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,       "z.name",          SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL,  "XXSecurityZone z", "obj.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,              "dip.projectId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip",                 "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,            "p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,    "p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
-
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,  "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  "obj.updateTime"));
-        sortFields.add(new SortField(SearchFilter.DATA_SHARE_ID,   "obj.id", true, SortField.SORT_ORDER.ASC));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.dataShareId"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.id = dshid.dataShareId and dshid.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "obj.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXService s", "obj.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXService s", "obj.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID, "obj.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXSecurityZone z", "obj.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXSecurityZone z", "obj.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+        sortFields.add(new SortField(SearchFilter.DATA_SHARE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.DATA_SHARE_NAME, "obj.name"));
 
-
-        trxLogAttrs.put("name",               new VTrxLogAttr("name", "Name", false, true));
-        trxLogAttrs.put("acl",                new VTrxLogAttr("acl", "ACL"));
-        trxLogAttrs.put("service",            new VTrxLogAttr("service", "Service name"));
-        trxLogAttrs.put("zone",               new VTrxLogAttr("zone", "Zone name"));
-        trxLogAttrs.put("conditionExpr",      new VTrxLogAttr("conditionExpr", "Condition expression"));
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+        trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
+        trxLogAttrs.put("service", new VTrxLogAttr("service", "Service name"));
+        trxLogAttrs.put("zone", new VTrxLogAttr("zone", "Zone name"));
+        trxLogAttrs.put("conditionExpr", new VTrxLogAttr("conditionExpr", "Condition expression"));
         trxLogAttrs.put("defaultAccessTypes", new VTrxLogAttr("defaultAccessTypes", "Default access types"));
-        trxLogAttrs.put("defaultTagMasks",    new VTrxLogAttr("defaultTagMasks", "Default tag masks"));
-        trxLogAttrs.put("termsOfUse",         new VTrxLogAttr("termsOfUse", "Terms of use"));
+        trxLogAttrs.put("defaultTagMasks", new VTrxLogAttr("defaultTagMasks", "Default tag masks"));
+        trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
     }
 
     @Override
@@ -108,26 +106,67 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa
     }
 
     @Override
-    public XXGdsDataShare preDelete(Long id) {
-        // Update ServiceVersionInfo for each service in the zone
-        XXGdsDataShare ret = super.preDelete(id);
+    protected XXGdsDataShare mapViewToEntityBean(RangerDataShare vObj, XXGdsDataShare xObj, int operationContext) {
+        XXService xService = daoMgr.getXXService().findByName(vObj.getService());
 
-        // TODO:
+        if (xService == null) {
+            throw restErrorUtil.createRESTException("No service found with name: " + vObj.getService(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-        return ret;
-    }
+        final Long zoneId;
 
-    @Override
-    public String getParentObjectName(RangerDataShare obj, RangerDataShare oldObj) {
-        return obj != null ? obj.getService() : null;
+        if (StringUtils.isBlank(vObj.getZone())) {
+            zoneId = RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
+        } else {
+            XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().findByZoneName(vObj.getZone());
+
+            if (xSecurityZone == null) {
+                throw restErrorUtil.createRESTException("No security zone found with name: " + vObj.getZone(), MessageEnums.INVALID_INPUT_DATA);
+            }
+
+            zoneId = xSecurityZone.getId();
+        }
+
+        xObj.setGuid(vObj.getGuid());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setName(vObj.getName());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
+        xObj.setServiceId(xService.getId());
+        xObj.setZoneId(zoneId);
+        xObj.setConditionExpr(vObj.getConditionExpr());
+        xObj.setDefaultAccessTypes(JsonUtils.objectToJson(vObj.getDefaultAccessTypes()));
+        xObj.setDefaultTagMasks(JsonUtils.objectToJson(vObj.getDefaultTagMasks()));
+        xObj.setTermsOfUse(vObj.getTermsOfUse());
+        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+
+        return xObj;
     }
 
     @Override
-    public Long getParentObjectId(RangerDataShare obj, RangerDataShare oldObj) {
-        String    serviceName = obj != null ? obj.getService() : null;
-        XXService service     = serviceName != null ? daoMgr.getXXService().findByName(serviceName) : null;
+    protected RangerDataShare mapEntityToViewBean(RangerDataShare vObj, XXGdsDataShare xObj) {
+        XXService      xService      = daoMgr.getXXService().getById(xObj.getServiceId());
+        XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().getById(xObj.getZoneId());
+        String         serviceName   = xService != null ? xService.getName() : null;
+        String         zoneName      = xSecurityZone != null ? xSecurityZone.getName() : null;
 
-        return service != null ? service.getId() : null;
+        vObj.setGuid(xObj.getGuid());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setName(xObj.getName());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
+        vObj.setService(serviceName);
+        vObj.setZone(zoneName);
+        vObj.setConditionExpr(xObj.getConditionExpr());
+        vObj.setDefaultAccessTypes(JsonUtils.jsonToSetString(xObj.getDefaultAccessTypes()));
+        vObj.setDefaultTagMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getDefaultTagMasks()));
+        vObj.setTermsOfUse(xObj.getTermsOfUse());
+        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+
+        return vObj;
     }
 
     @Override
@@ -229,68 +268,26 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa
     }
 
     @Override
-    protected XXGdsDataShare mapViewToEntityBean(RangerDataShare vObj, XXGdsDataShare xObj, int OPERATION_CONTEXT) {
-        XXService xService = daoMgr.getXXService().findByName(vObj.getService());
-
-        if (xService == null) {
-            throw restErrorUtil.createRESTException("No service found with name: " + vObj.getService(), MessageEnums.INVALID_INPUT_DATA);
-        }
-
-        final Long zoneId;
-
-        if (StringUtils.isBlank(vObj.getZone())) {
-            zoneId = RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
-        } else {
-            XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().findByZoneName(vObj.getZone());
-
-            if (xSecurityZone == null) {
-                throw restErrorUtil.createRESTException("No security zone found with name: " + vObj.getZone(), MessageEnums.INVALID_INPUT_DATA);
-            }
-
-            zoneId = xSecurityZone.getId();
-        }
+    public XXGdsDataShare preDelete(Long id) {
+        // Update ServiceVersionInfo for each service in the zone
+        XXGdsDataShare ret = super.preDelete(id);
 
-        xObj.setGuid(vObj.getGuid());
-        xObj.setIsEnabled(vObj.getIsEnabled());
-        xObj.setName(vObj.getName());
-        xObj.setDescription(vObj.getDescription());
-        xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
-        xObj.setServiceId(xService.getId());
-        xObj.setZoneId(zoneId);
-        xObj.setConditionExpr(vObj.getConditionExpr());
-        xObj.setDefaultAccessTypes(JsonUtils.objectToJson(vObj.getDefaultAccessTypes()));
-        xObj.setDefaultTagMasks(JsonUtils.objectToJson(vObj.getDefaultTagMasks()));
-        xObj.setTermsOfUse(vObj.getTermsOfUse());
-        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
-        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+        // TODO:
 
-        return xObj;
+        return ret;
     }
 
     @Override
-    protected RangerDataShare mapEntityToViewBean(RangerDataShare vObj, XXGdsDataShare xObj) {
-        XXService      xService      = daoMgr.getXXService().getById(xObj.getServiceId());
-        XXSecurityZone xSecurityZone = daoMgr.getXXSecurityZoneDao().getById(xObj.getZoneId());
-
-        String serviceName = xService != null ? xService.getName() : null;
-        String zoneName    = xSecurityZone != null ? xSecurityZone.getName() : null;
+    public String getParentObjectName(RangerDataShare obj, RangerDataShare oldObj) {
+        return obj != null ? obj.getService() : null;
+    }
 
-        vObj.setGuid(xObj.getGuid());
-        vObj.setIsEnabled(xObj.getIsEnabled());
-        vObj.setVersion(xObj.getVersion());
-        vObj.setName(xObj.getName());
-        vObj.setDescription(xObj.getDescription());
-        vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
-        vObj.setService(serviceName);
-        vObj.setZone(zoneName);
-        vObj.setConditionExpr(xObj.getConditionExpr());
-        vObj.setDefaultAccessTypes(JsonUtils.jsonToSetString(xObj.getDefaultAccessTypes()));
-        vObj.setDefaultTagMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getDefaultTagMasks()));
-        vObj.setTermsOfUse(xObj.getTermsOfUse());
-        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
-        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+    @Override
+    public Long getParentObjectId(RangerDataShare obj, RangerDataShare oldObj) {
+        String    serviceName = obj != null ? obj.getService() : null;
+        XXService service     = serviceName != null ? daoMgr.getXXService().findByName(serviceName) : null;
 
-        return vObj;
+        return service != null ? service.getId() : null;
     }
 
     public RangerDataShare getPopulatedViewObject(XXGdsDataShare xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java
index 73274ec5a..1038f3464 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetInProjectService.java
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
@@ -28,9 +27,9 @@ import org.apache.ranger.common.SearchField;
 import org.apache.ranger.common.SortField;
 import org.apache.ranger.common.view.VTrxLogAttr;
 import org.apache.ranger.db.XXPortalUserDao;
-import org.apache.ranger.entity.XXGdsProject;
-import org.apache.ranger.entity.XXGdsDatasetInProject;
 import org.apache.ranger.entity.XXGdsDataset;
+import org.apache.ranger.entity.XXGdsDatasetInProject;
+import org.apache.ranger.entity.XXGdsProject;
 import org.apache.ranger.entity.XXPortalUser;
 import org.apache.ranger.plugin.model.RangerGds.RangerDatasetInProject;
 import org.apache.ranger.plugin.model.RangerValiditySchedule;
@@ -61,27 +60,27 @@ public class RangerGdsDatasetInProjectService extends RangerGdsBaseModelService<
     public RangerGdsDatasetInProjectService() {
         super(AppConstants.CLASS_TYPE_GDS_DATASET_IN_PROJECT, AppConstants.CLASS_TYPE_GDS_DATASET);
 
-        searchFields.add(new SearchField(SearchFilter.DATASET_IN_PROJECT_ID, "obj.id",         SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,            "obj.datasetId",  SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,          "d.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataset d", "obj.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,  "d.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,            "obj.projectId",  SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,          "p.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsProject p", "obj.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,  "p.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsProject p", "obj.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,            "dsh.serviceId",  SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",              "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,          "s.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,  "s.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,           "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,           "obj.updateTime"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_IN_PROJECT_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataset d", "obj.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataset d", "obj.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "obj.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsProject p", "obj.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsProject p", "obj.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
         sortFields.add(new SortField(SearchFilter.DATASET_IN_PROJECT_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
 
-        trxLogAttrs.put("datasetId",        new VTrxLogAttr("datasetId", "Dataset ID"));
-        trxLogAttrs.put("projectId",        new VTrxLogAttr("projectId", "Project ID"));
-        trxLogAttrs.put("status",           new VTrxLogAttr("status", "Status", true));
+        trxLogAttrs.put("datasetId", new VTrxLogAttr("datasetId", "Dataset ID"));
+        trxLogAttrs.put("projectId", new VTrxLogAttr("projectId", "Project ID"));
+        trxLogAttrs.put("status", new VTrxLogAttr("status", "Status", true));
         trxLogAttrs.put("validitySchedule", new VTrxLogAttr("validitySchedule", "Validity Schedule"));
-        trxLogAttrs.put("profiles",         new VTrxLogAttr("profiles", "Profiles"));
-        trxLogAttrs.put("approver",         new VTrxLogAttr("approver", "Approver"));
+        trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
+        trxLogAttrs.put("approver", new VTrxLogAttr("approver", "Approver"));
     }
 
     @Override
@@ -103,26 +102,53 @@ public class RangerGdsDatasetInProjectService extends RangerGdsBaseModelService<
     }
 
     @Override
-    public XXGdsDatasetInProject preDelete(Long id) {
-        // Update ServiceVersionInfo for each service in the zone
-        XXGdsDatasetInProject ret = super.preDelete(id);
+    protected XXGdsDatasetInProject mapViewToEntityBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj, int operationContext) {
+        XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
 
-        // TODO:
+        if (xDataset == null) {
+            throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-        return ret;
-    }
+        XXGdsProject xProject = daoMgr.getXXGdsProject().getById(vObj.getProjectId());
 
-    @Override
-    public String getParentObjectName(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
-        Long         datasetId = obj != null ? obj.getDatasetId() : null;
-        XXGdsDataset dataset   = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
+        if (xProject == null) {
+            throw restErrorUtil.createRESTException("No project found with ID: " + vObj.getProjectId(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-        return dataset != null ? dataset.getName() : null;
+        xObj.setGuid(vObj.getGuid());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setProjectId(vObj.getProjectId());
+        xObj.setDatasetId(vObj.getDatasetId());
+        xObj.setStatus((short) vObj.getStatus().ordinal());
+        xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
+        xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
+        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+
+        final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
+
+        xObj.setApproverId(user == null ? null : user.getId());
+
+        return xObj;
     }
 
     @Override
-    public Long getParentObjectId(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
-        return obj != null ? obj.getDatasetId() : null;
+    protected RangerDatasetInProject mapEntityToViewBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setProjectId(xObj.getProjectId());
+        vObj.setDatasetId(xObj.getDatasetId());
+        vObj.setStatus(toShareStatus(xObj.getStatus()));
+        vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
+        vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
+        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+        vObj.setApprover(getUserName(xObj.getApproverId()));
+
+        return vObj;
     }
 
     @Override
@@ -228,52 +254,26 @@ public class RangerGdsDatasetInProjectService extends RangerGdsBaseModelService<
     }
 
     @Override
-    protected XXGdsDatasetInProject mapViewToEntityBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj, int OPERATION_CONTEXT) {
-        XXGdsDataset xDataset = daoMgr.getXXGdsDataset().getById(vObj.getDatasetId());
-
-        if (xDataset == null) {
-            throw restErrorUtil.createRESTException("No dataset found with ID: " + vObj.getDatasetId(), MessageEnums.INVALID_INPUT_DATA);
-        }
-
-        XXGdsProject xProject = daoMgr.getXXGdsProject().getById(vObj.getProjectId());
+    public XXGdsDatasetInProject preDelete(Long id) {
+        // Update ServiceVersionInfo for each service in the zone
+        XXGdsDatasetInProject ret = super.preDelete(id);
 
-        if (xProject == null) {
-            throw restErrorUtil.createRESTException("No project found with ID: " + vObj.getProjectId(), MessageEnums.INVALID_INPUT_DATA);
-        }
+        // TODO:
 
-        xObj.setGuid(vObj.getGuid());
-        xObj.setIsEnabled(vObj.getIsEnabled());
-        xObj.setDescription(vObj.getDescription());
-        xObj.setProjectId(vObj.getProjectId());
-        xObj.setDatasetId(vObj.getDatasetId());
-        xObj.setStatus((short) vObj.getStatus().ordinal());
-        xObj.setValidityPeriod(JsonUtils.objectToJson(vObj.getValiditySchedule()));
-        xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
-        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
-        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+        return ret;
+    }
 
-        final XXPortalUser user = xxPortalUserDao.findByLoginId(vObj.getApprover());
-        xObj.setApproverId(user == null? null : user.getId());
+    @Override
+    public String getParentObjectName(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
+        Long         datasetId = obj != null ? obj.getDatasetId() : null;
+        XXGdsDataset dataset   = datasetId != null ? daoMgr.getXXGdsDataset().getById(datasetId) : null;
 
-        return xObj;
+        return dataset != null ? dataset.getName() : null;
     }
 
     @Override
-    protected RangerDatasetInProject mapEntityToViewBean(RangerDatasetInProject vObj, XXGdsDatasetInProject xObj) {
-        vObj.setGuid(xObj.getGuid());
-        vObj.setIsEnabled(xObj.getIsEnabled());
-        vObj.setVersion(xObj.getVersion());
-        vObj.setDescription(xObj.getDescription());
-        vObj.setProjectId(xObj.getProjectId());
-        vObj.setDatasetId(xObj.getDatasetId());
-        vObj.setStatus(toShareStatus(xObj.getStatus()));
-        vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValidityPeriod(), RangerValiditySchedule.class));
-        vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
-        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
-        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
-        vObj.setApprover(getUserName(xObj.getApproverId()));
-
-        return vObj;
+    public Long getParentObjectId(RangerDatasetInProject obj, RangerDatasetInProject oldObj) {
+        return obj != null ? obj.getDatasetId() : null;
     }
 
     public RangerDatasetInProject getPopulatedViewObject(XXGdsDatasetInProject xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
index 0e3b733b1..8ace32a53 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
@@ -27,7 +26,7 @@ import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.SearchField;
 import org.apache.ranger.common.SortField;
 import org.apache.ranger.common.view.VTrxLogAttr;
-import org.apache.ranger.entity.*;
+import org.apache.ranger.entity.XXGdsDataset;
 import org.apache.ranger.plugin.model.RangerGds;
 import org.apache.ranger.plugin.model.RangerGds.RangerDataset;
 import org.apache.ranger.plugin.model.RangerValiditySchedule;
@@ -41,7 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.List;
 
 @Service
 @Scope("singleton")
@@ -54,32 +53,32 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData
     public RangerGdsDatasetService() {
         super(AppConstants.CLASS_TYPE_GDS_DATASET);
 
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,              "obj.id",            SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,            "obj.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,    "obj.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,           "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid",                                       "obj.id = dshid.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,         "dsh.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,              "dsh.serviceId",     SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,            "s.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL,     "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s",      "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,    "s.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL,  "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s",      "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_ID,                 "dsh.zoneId",        SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,               "z.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL,     "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,       "z.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL,  "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,              "dip.projectId",     SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip",                    "obj.id = dip.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,            "proj.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,    "proj.name",         SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id"));
-        searchFields.add(new SearchField(SearchFilter.CREATED_BY,              "obj.addedByUserId", SearchField.DATA_TYPE.INTEGER,  SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_LABEL,           "obj.labels",        SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_KEYWORD,         "obj.keywords",      SearchField.DATA_TYPE.STRING, SearchField.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.DATASET_ID,   "obj.id", true, SortField.SORT_ORDER.ASC));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid", "obj.id = dshid.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "proj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "proj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsProject proj", "obj.id = dip.datasetId and dip.projectId = proj.id"));
+        searchFields.add(new SearchField(SearchFilter.CREATED_BY, "obj.addedByUserId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_LABEL, "obj.labels", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_KEYWORD, "obj.keywords", SearchField.DATA_TYPE.STRING, SearchField.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.DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name"));
 
-        trxLogAttrs.put("name",       new VTrxLogAttr("name", "Name", false, true));
-        trxLogAttrs.put("acl",        new VTrxLogAttr("acl", "ACL"));
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+        trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
         trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
     }
 
@@ -102,13 +101,38 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData
     }
 
     @Override
-    public XXGdsDataset preDelete(Long id) {
-        // Update ServiceVersionInfo for each service in the zone
-        XXGdsDataset ret = super.preDelete(id);
+    protected XXGdsDataset mapViewToEntityBean(RangerDataset vObj, XXGdsDataset xObj, int operationContext) {
+        xObj.setGuid(vObj.getGuid());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setName(vObj.getName());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
+        xObj.setTermsOfUse(vObj.getTermsOfUse());
+        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+        xObj.setValiditySchedule(JsonUtils.objectToJson(vObj.getValiditySchedule()));
+        xObj.setLabels(JsonUtils.listToJson(vObj.getLabels()));
+        xObj.setKeywords(JsonUtils.listToJson(vObj.getKeywords()));
 
-        // TODO:
+        return xObj;
+    }
 
-        return ret;
+    @Override
+    protected RangerDataset mapEntityToViewBean(RangerDataset vObj, XXGdsDataset xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setName(xObj.getName());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
+        vObj.setTermsOfUse(xObj.getTermsOfUse());
+        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+        vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValiditySchedule(), RangerValiditySchedule.class));
+        vObj.setLabels(JsonUtils.jsonToListString(xObj.getLabels()));
+        vObj.setKeywords(JsonUtils.jsonToListString(xObj.getKeywords()));
+
+        return vObj;
     }
 
     @Override
@@ -170,38 +194,13 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData
     }
 
     @Override
-    protected XXGdsDataset mapViewToEntityBean(RangerDataset vObj, XXGdsDataset xObj, int OPERATION_CONTEXT) {
-        xObj.setGuid(vObj.getGuid());
-        xObj.setIsEnabled(vObj.getIsEnabled());
-        xObj.setName(vObj.getName());
-        xObj.setDescription(vObj.getDescription());
-        xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
-        xObj.setTermsOfUse(vObj.getTermsOfUse());
-        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
-        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
-        xObj.setValiditySchedule(JsonUtils.objectToJson(vObj.getValiditySchedule()));
-        xObj.setLabels(JsonUtils.listToJson(vObj.getLabels()));
-        xObj.setKeywords(JsonUtils.listToJson(vObj.getKeywords()));
-
-        return xObj;
-    }
+    public XXGdsDataset preDelete(Long id) {
+        // Update ServiceVersionInfo for each service in the zone
+        XXGdsDataset ret = super.preDelete(id);
 
-    @Override
-    protected RangerDataset mapEntityToViewBean(RangerDataset vObj, XXGdsDataset xObj) {
-        vObj.setGuid(xObj.getGuid());
-        vObj.setIsEnabled(xObj.getIsEnabled());
-        vObj.setVersion(xObj.getVersion());
-        vObj.setName(xObj.getName());
-        vObj.setDescription(xObj.getDescription());
-        vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
-        vObj.setTermsOfUse(xObj.getTermsOfUse());
-        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
-        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
-        vObj.setValiditySchedule(JsonUtils.jsonToObject(xObj.getValiditySchedule(), RangerValiditySchedule.class));
-        vObj.setLabels(JsonUtils.jsonToListString(xObj.getLabels()));
-        vObj.setKeywords(JsonUtils.jsonToListString(xObj.getKeywords()));
+        // TODO:
 
-        return vObj;
+        return ret;
     }
 
     public RangerDataset getPopulatedViewObject(XXGdsDataset xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
index 4298834f9..7ef6ed214 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
@@ -53,29 +52,29 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj
     public RangerGdsProjectService() {
         super(AppConstants.CLASS_TYPE_GDS_PROJECT);
 
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,            "obj.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,    "obj.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,              "obj.id",            SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,            "d.name",            SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip, XXGdsDataset d",                                                      "obj.id = dip.projectId and dip.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,    "d.name",            SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataset d",                                                      "obj.id = dip.projectId and dip.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,              "dip.datasetId",     SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip",                                                                      "obj.id = dip.projectId"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,           "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShareInDataset dsid",         "obj.id = dip.projectId and dip.datasetId = dshid.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,         "dsh.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,              "dsh.serviceId",     SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,            "s.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL,     "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s",      "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,    "s.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL,  "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s",      "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_ID,                 "dsh.zoneId",        SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh",                   "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,               "z.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL,     "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,       "z.name",            SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL,  "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
-
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,  "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  "obj.updateTime"));
-        sortFields.add(new SortField(SearchFilter.PROJECT_ID,   "obj.id", true, SortField.SORT_ORDER.ASC));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataset d", "obj.id = dip.projectId and dip.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataset d", "obj.id = dip.projectId and dip.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dip.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip", "obj.id = dip.projectId"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "dshid.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShareInDataset dsid", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXService s", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDatasetInProject dip, XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dip.projectId and dip.datasetId = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id"));
+
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+        sortFields.add(new SortField(SearchFilter.PROJECT_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.PROJECT_NAME, "obj.name"));
 
-        trxLogAttrs.put("name",       new VTrxLogAttr("name", "Name", false, true));
-        trxLogAttrs.put("acl",        new VTrxLogAttr("acl", "ACL"));
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+        trxLogAttrs.put("acl", new VTrxLogAttr("acl", "ACL"));
         trxLogAttrs.put("termsOfUse", new VTrxLogAttr("termsOfUse", "Terms of use"));
     }
 
@@ -98,13 +97,32 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj
     }
 
     @Override
-    public XXGdsProject preDelete(Long id) {
-        // Update ServiceVersionInfo for each service in the zone
-        XXGdsProject ret = super.preDelete(id);
+    protected XXGdsProject mapViewToEntityBean(RangerProject vObj, XXGdsProject xObj, int operationContext) {
+        xObj.setGuid(vObj.getGuid());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setName(vObj.getName());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
+        xObj.setTermsOfUse(vObj.getTermsOfUse());
+        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
 
-        // TODO:
+        return xObj;
+    }
 
-        return ret;
+    @Override
+    protected RangerProject mapEntityToViewBean(RangerProject vObj, XXGdsProject xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setName(xObj.getName());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
+        vObj.setTermsOfUse(xObj.getTermsOfUse());
+        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+
+        return vObj;
     }
 
     @Override
@@ -166,32 +184,13 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj
     }
 
     @Override
-    protected XXGdsProject mapViewToEntityBean(RangerProject vObj, XXGdsProject xObj, int OPERATION_CONTEXT) {
-        xObj.setGuid(vObj.getGuid());
-        xObj.setIsEnabled(vObj.getIsEnabled());
-        xObj.setName(vObj.getName());
-        xObj.setDescription(vObj.getDescription());
-        xObj.setAcl(JsonUtils.objectToJson(vObj.getAcl()));
-        xObj.setTermsOfUse(vObj.getTermsOfUse());
-        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
-        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
-
-        return xObj;
-    }
+    public XXGdsProject preDelete(Long id) {
+        // Update ServiceVersionInfo for each service in the zone
+        XXGdsProject ret = super.preDelete(id);
 
-    @Override
-    protected RangerProject mapEntityToViewBean(RangerProject vObj, XXGdsProject xObj) {
-        vObj.setGuid(xObj.getGuid());
-        vObj.setIsEnabled(xObj.getIsEnabled());
-        vObj.setVersion(xObj.getVersion());
-        vObj.setName(xObj.getName());
-        vObj.setDescription(xObj.getDescription());
-        vObj.setAcl(JsonUtils.jsonToObject(xObj.getAcl(), RangerGds.RangerGdsObjectACL.class));
-        vObj.setTermsOfUse(xObj.getTermsOfUse());
-        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
-        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+        // TODO:
 
-        return vObj;
+        return ret;
     }
 
     public RangerProject getPopulatedViewObject(XXGdsProject xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
index 1c58692ef..f0b7cba72 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java
@@ -17,12 +17,11 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
-import org.apache.ranger.common.GUIDUtil;
 import org.apache.ranger.common.AppConstants;
+import org.apache.ranger.common.GUIDUtil;
 import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.SearchField;
 import org.apache.ranger.common.SortField;
@@ -56,40 +55,40 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX
     public RangerGdsSharedResourceService() {
         super(AppConstants.CLASS_TYPE_GDS_SHARED_RESOURCE, AppConstants.CLASS_TYPE_GDS_DATA_SHARE);
 
-        searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_ID,           "obj.id",          SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME,         "obj.name",        SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME_PARTIAL, "obj.name",        SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID,                "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME,              "dsh.name",        SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh",                                                                           "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL,      "dsh.name",        SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh",                                                                           "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_ID,                   "dsh.serviceId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh",                                                                           "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME,                 "s.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXService s",                                                              "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL,         "s.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXService s",                                                              "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_ID,                      "dsh.zoneId",      SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh",                                                                           "obj.dataShareId = dsh.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME,                    "z.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXSecurityZone z",                                                         "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL,            "z.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXSecurityZone z",                                                         "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_ID,                   "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid",                                            "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME,                 "d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d",                            "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL,         "d.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d",                            "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = d.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_ID,                   "dip.projectId",   SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip",                 "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME,                 "p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.FULL,    "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
-        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL,         "p.name",          SearchField.DATA_TYPE.STRING,  SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
-
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,  "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  "obj.updateTime"));
-        sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_ID,   "obj.id", true, SortField.SORT_ORDER.ASC));
+        searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.SHARED_RESOURCE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_ID, "obj.dataShareId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.DATA_SHARE_NAME_PARTIAL, "dsh.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_ID, "dsh.serviceId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "s.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXService s", "obj.dataShareId = dsh.id and dsh.serviceId = s.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh", "obj.dataShareId = dsh.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXSecurityZone z", "obj.dataShareId = dsh.id and dsh.zoneId = z.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_ID, "dshid.datasetId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.DATASET_NAME_PARTIAL, "d.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDataset d", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = d.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_ID, "dip.projectId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+        searchFields.add(new SearchField(SearchFilter.PROJECT_NAME_PARTIAL, "p.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShare dsh, XXGdsDataShareInDataset dshid, XXGdsDatasetInProject dip, XXGdsProject p", "obj.dataShareId = dsh.id and dsh.id = dshid.dataShareId and dshid.datasetId = dip.datasetId and dip.projectId = p.id"));
+
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
+        sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_NAME, "obj.name"));
 
-        trxLogAttrs.put("name",             new VTrxLogAttr("name", "Name", false, true));
-        trxLogAttrs.put("dataShareId",      new VTrxLogAttr("dataShareId", "DataShare ID"));
-        trxLogAttrs.put("resource",         new VTrxLogAttr("resource", "Resource"));
-        trxLogAttrs.put("subResource",      new VTrxLogAttr("subResource", "Subresource"));
-        trxLogAttrs.put("subResourceType",  new VTrxLogAttr("subResourceType", "Subresource Type"));
-        trxLogAttrs.put("conditionExpr",    new VTrxLogAttr("conditionExpr", "Condition expression"));
-        trxLogAttrs.put("accessTypes",      new VTrxLogAttr("accessTypes", "Access types"));
-        trxLogAttrs.put("rowFilter",        new VTrxLogAttr("rowFilter", "Row filter"));
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Name", false, true));
+        trxLogAttrs.put("dataShareId", new VTrxLogAttr("dataShareId", "DataShare ID"));
+        trxLogAttrs.put("resource", new VTrxLogAttr("resource", "Resource"));
+        trxLogAttrs.put("subResource", new VTrxLogAttr("subResource", "Subresource"));
+        trxLogAttrs.put("subResourceType", new VTrxLogAttr("subResourceType", "Subresource Type"));
+        trxLogAttrs.put("conditionExpr", new VTrxLogAttr("conditionExpr", "Condition expression"));
+        trxLogAttrs.put("accessTypes", new VTrxLogAttr("accessTypes", "Access types"));
+        trxLogAttrs.put("rowFilter", new VTrxLogAttr("rowFilter", "Row filter"));
         trxLogAttrs.put("subResourceMasks", new VTrxLogAttr("subResourceMasks", "Subresource Masks"));
-        trxLogAttrs.put("profiles",         new VTrxLogAttr("profiles", "Profiles"));
+        trxLogAttrs.put("profiles", new VTrxLogAttr("profiles", "Profiles"));
     }
 
     @Override
@@ -111,26 +110,53 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX
     }
 
     @Override
-    public XXGdsSharedResource preDelete(Long id) {
-        // Update ServiceVersionInfo for each service in the zone
-        XXGdsSharedResource ret = super.preDelete(id);
-
-        // TODO:
+    protected XXGdsSharedResource mapViewToEntityBean(RangerSharedResource vObj, XXGdsSharedResource xObj, int operationContext) {
+        XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
 
-        return ret;
-    }
+        if (xDataShare == null) {
+            throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-    @Override
-    public String getParentObjectName(RangerSharedResource obj, RangerSharedResource oldObj) {
-        Long           dataShareId = obj != null ? obj.getDataShareId() : null;
-        XXGdsDataShare dataShare   = dataShareId != null ? daoMgr.getXXGdsDataShare().getById(dataShareId) : null;
+        xObj.setGuid(vObj.getGuid());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setName(vObj.getName());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setDataShareId(vObj.getDataShareId());
+        xObj.setResource(JsonUtils.mapToJson(vObj.getResource()));
+        xObj.setSubResource(JsonUtils.objectToJson(vObj.getSubResource()));
+        xObj.setSubResourceType(vObj.getSubResourceType());
+        xObj.setResourceSignature(new RangerPolicyResourceSignature(vObj).getSignature());
+        xObj.setConditionExpr(vObj.getConditionExpr());
+        xObj.setAccessTypes(JsonUtils.objectToJson(vObj.getAccessTypes()));
+        xObj.setRowFilter(JsonUtils.objectToJson(vObj.getRowFilter()));
+        xObj.setSubResourceMasks(JsonUtils.objectToJson(vObj.getSubResourceMasks()));
+        xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
+        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
+        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
 
-        return dataShare != null ? dataShare.getName() : null;
+        return xObj;
     }
 
     @Override
-    public Long getParentObjectId(RangerSharedResource obj, RangerSharedResource oldObj) {
-        return obj != null ? obj.getDataShareId() : null;
+    protected RangerSharedResource mapEntityToViewBean(RangerSharedResource vObj, XXGdsSharedResource xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setName(xObj.getName());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setDataShareId(xObj.getDataShareId());
+        vObj.setResource(JsonUtils.jsonToMapPolicyResource(xObj.getResource()));
+        vObj.setSubResource(JsonUtils.jsonToObject(xObj.getSubResource(), RangerPolicy.RangerPolicyResource.class));
+        vObj.setSubResourceType(xObj.getSubResourceType());
+        vObj.setConditionExpr(xObj.getConditionExpr());
+        vObj.setAccessTypes(JsonUtils.jsonToSetString(xObj.getAccessTypes()));
+        vObj.setRowFilter(JsonUtils.jsonToObject(xObj.getRowFilter(), RangerPolicy.RangerPolicyItemRowFilterInfo.class));
+        vObj.setSubResourceMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getSubResourceMasks()));
+        vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
+        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
+        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+
+        return vObj;
     }
 
     @Override
@@ -214,53 +240,26 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX
     }
 
     @Override
-    protected XXGdsSharedResource mapViewToEntityBean(RangerSharedResource vObj, XXGdsSharedResource xObj, int OPERATION_CONTEXT) {
-        XXGdsDataShare xDataShare = daoMgr.getXXGdsDataShare().getById(vObj.getDataShareId());
-
-        if (xDataShare == null) {
-            throw restErrorUtil.createRESTException("No data share found with ID: " + vObj.getDataShareId(), MessageEnums.INVALID_INPUT_DATA);
-        }
+    public XXGdsSharedResource preDelete(Long id) {
+        // Update ServiceVersionInfo for each service in the zone
+        XXGdsSharedResource ret = super.preDelete(id);
 
-        xObj.setGuid(vObj.getGuid());
-        xObj.setIsEnabled(vObj.getIsEnabled());
-        xObj.setName(vObj.getName());
-        xObj.setDescription(vObj.getDescription());
-        xObj.setDataShareId(vObj.getDataShareId());
-        xObj.setResource(JsonUtils.mapToJson(vObj.getResource()));
-        xObj.setSubResource(JsonUtils.objectToJson(vObj.getSubResource()));
-        xObj.setSubResourceType(vObj.getSubResourceType());
-        xObj.setResourceSignature(new RangerPolicyResourceSignature(vObj).getSignature());
-        xObj.setConditionExpr(vObj.getConditionExpr());
-        xObj.setAccessTypes(JsonUtils.objectToJson(vObj.getAccessTypes()));
-        xObj.setRowFilter(JsonUtils.objectToJson(vObj.getRowFilter()));
-        xObj.setSubResourceMasks(JsonUtils.objectToJson(vObj.getSubResourceMasks()));
-        xObj.setProfiles(JsonUtils.objectToJson(vObj.getProfiles()));
-        xObj.setOptions(JsonUtils.mapToJson(vObj.getOptions()));
-        xObj.setAdditionalInfo(JsonUtils.mapToJson(vObj.getAdditionalInfo()));
+        // TODO:
 
-        return xObj;
+        return ret;
     }
 
     @Override
-    protected RangerSharedResource mapEntityToViewBean(RangerSharedResource vObj, XXGdsSharedResource xObj) {
-        vObj.setGuid(xObj.getGuid());
-        vObj.setIsEnabled(xObj.getIsEnabled());
-        vObj.setVersion(xObj.getVersion());
-        vObj.setName(xObj.getName());
-        vObj.setDescription(xObj.getDescription());
-        vObj.setDataShareId(xObj.getDataShareId());
-        vObj.setResource(JsonUtils.jsonToMapPolicyResource(xObj.getResource()));
-        vObj.setSubResource(JsonUtils.jsonToObject(xObj.getSubResource(), RangerPolicy.RangerPolicyResource.class));
-        vObj.setSubResourceType(xObj.getSubResourceType());
-        vObj.setConditionExpr(xObj.getConditionExpr());
-        vObj.setAccessTypes(JsonUtils.jsonToSetString(xObj.getAccessTypes()));
-        vObj.setRowFilter(JsonUtils.jsonToObject(xObj.getRowFilter(), RangerPolicy.RangerPolicyItemRowFilterInfo.class));
-        vObj.setSubResourceMasks(JsonUtils.jsonToListGdsMaskInfo(xObj.getSubResourceMasks()));
-        vObj.setProfiles(JsonUtils.jsonToSetString(xObj.getProfiles()));
-        vObj.setOptions(JsonUtils.jsonToMapStringString(xObj.getOptions()));
-        vObj.setAdditionalInfo(JsonUtils.jsonToMapStringString(xObj.getAdditionalInfo()));
+    public String getParentObjectName(RangerSharedResource obj, RangerSharedResource oldObj) {
+        Long           dataShareId = obj != null ? obj.getDataShareId() : null;
+        XXGdsDataShare dataShare   = dataShareId != null ? daoMgr.getXXGdsDataShare().getById(dataShareId) : null;
 
-        return vObj;
+        return dataShare != null ? dataShare.getName() : null;
+    }
+
+    @Override
+    public Long getParentObjectId(RangerSharedResource obj, RangerSharedResource oldObj) {
+        return obj != null ? obj.getDataShareId() : null;
     }
 
     public RangerSharedResource getPopulatedViewObject(XXGdsSharedResource xObj) {
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
index 9dc26ceb7..747abd223 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
@@ -17,13 +17,6 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.biz.RangerBizUtil;
@@ -47,273 +40,287 @@ import org.springframework.stereotype.Service;
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 @Service
 public class RangerPluginInfoService {
+    private static final Logger LOG = LoggerFactory.getLogger(RangerPluginInfoService.class);
+
+    private final List<SortField>   sortFields   = new ArrayList<>();
+    private final List<SearchField> searchFields = new ArrayList<>();
+
+    @Autowired
+    RangerSearchUtil searchUtil;
+
+    @Autowired
+    RangerBizUtil bizUtil;
+
+    @Autowired
+    JSONUtil jsonUtil;
+
+    @Autowired
+    RangerDaoManager daoManager;
+
+    RangerPluginInfoService() {
+        searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "obj.serviceName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.PLUGIN_IP_ADDRESS, "obj.ipAddress", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+
+        sortFields.add(new SortField(SearchFilter.SERVICE_NAME, "obj.serviceName", true, SortField.SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", true, SortField.SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", true, SortField.SORT_ORDER.ASC));
+    }
+
+    public List<SearchField> getSearchFields() {
+        return searchFields;
+    }
+
+    public List<SortField> getSortFields() {
+        return sortFields;
+    }
+
+    public PList<RangerPluginInfo> searchRangerPluginInfo(SearchFilter searchFilter) {
+        PList<RangerPluginInfo> retList = new PList<>();
+        List<RangerPluginInfo>  objList = new ArrayList<>();
+
+        List<XXService> servicesWithTagService = daoManager.getXXService().getAllServicesWithTagService();
+        String          serviceTypeToSearch    = searchFilter.getParam(SearchFilter.SERVICE_TYPE);
+        String          clusterNameToSearch    = searchFilter.getParam(SearchFilter.CLUSTER_NAME);
+
+        // Rebuild searchFilter without serviceType
+        if (StringUtils.isNotBlank(serviceTypeToSearch)) {
+            searchFilter.removeParam(SearchFilter.SERVICE_TYPE);
+        }
+
+        List<XXPluginInfo> xObjList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
+
+        List<Object[]> objectsList = null;
+
+        if (CollectionUtils.isNotEmpty(xObjList)) {
+            objectsList = daoManager.getXXServiceVersionInfo().getAllWithServiceNames();
+        }
+
+        for (XXPluginInfo xObj : xObjList) {
+            XXServiceVersionInfo xxServiceVersionInfo    = null;
+            boolean              hasAssociatedTagService = false;
+
+            if (CollectionUtils.isNotEmpty(objectsList)) {
+                for (Object[] objects : objectsList) {
+                    if (objects.length == 2) {
+                        if (xObj.getServiceName().equals(objects[1])) {
+                            if (objects[0] instanceof XXServiceVersionInfo) {
+                                xxServiceVersionInfo = (XXServiceVersionInfo) objects[0];
+
+                                for (XXService service : servicesWithTagService) {
+                                    if (service.getName().equals(xObj.getServiceName())) {
+                                        hasAssociatedTagService = true;
+                                        break;
+                                    }
+                                }
+                            } else {
+                                LOG.warn("Expected first object to be XXServiceVersionInfo, got {}", objects[0]);
+                            }
+                            break;
+                        }
+                    } else {
+                        LOG.warn("Expected 2 objects in the list returned by getAllWithServiceNames(), received {}", objects.length);
+                    }
+                }
+            }
 
-	private static final Logger LOG = LoggerFactory.getLogger(RangerPluginInfoService.class);
+            RangerPluginInfo obj = populateViewObjectWithServiceVersionInfo(xObj, xxServiceVersionInfo, hasAssociatedTagService);
 
-	@Autowired
-	RangerSearchUtil searchUtil;
+            if (StringUtils.isBlank(serviceTypeToSearch) || StringUtils.equals(serviceTypeToSearch, obj.getServiceType())) {
+                objList.add(obj);
+            }
 
-	@Autowired
-	RangerBizUtil bizUtil;
+            if (StringUtils.isNotBlank(clusterNameToSearch)) {
+                Map<String, String>            infoMap = obj.getInfo();
+                Set<Map.Entry<String, String>> infoSet = infoMap.entrySet();
 
-	@Autowired
-	JSONUtil jsonUtil;
+                for (Map.Entry<String, String> info : infoSet) {
+                    if (StringUtils.equals(info.getKey(), SearchFilter.CLUSTER_NAME)) {
+                        if (!StringUtils.equals(info.getValue(), clusterNameToSearch)) {
+                            objList.remove(obj);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
 
-	@Autowired
-	RangerDaoManager daoManager;
+        retList.setList(objList);
 
-	private List<SortField> sortFields = new ArrayList<SortField>();
-	private List<SearchField> searchFields = new ArrayList<SearchField>();
+        return retList;
+    }
 
-	RangerPluginInfoService() {
+    public RangerPluginInfo populateViewObject(XXPluginInfo xObj) {
+        RangerPluginInfo ret = new RangerPluginInfo();
 
-		searchFields.add(new SearchField(SearchFilter.SERVICE_NAME, "obj.serviceName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.PLUGIN_IP_ADDRESS, "obj.ipAddress", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+        ret.setId(xObj.getId());
+        ret.setCreateTime(xObj.getCreateTime());
+        ret.setUpdateTime(xObj.getUpdateTime());
+        ret.setServiceName(xObj.getServiceName());
 
-		sortFields.add(new SortField(SearchFilter.SERVICE_NAME, "obj.serviceName", true, SortField.SORT_ORDER.ASC));
-		sortFields.add(new SortField(SearchFilter.PLUGIN_HOST_NAME, "obj.hostName", true, SortField.SORT_ORDER.ASC));
-		sortFields.add(new SortField(SearchFilter.PLUGIN_APP_TYPE, "obj.appType", true, SortField.SORT_ORDER.ASC));
+        String serviceType = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
 
-	}
+        if (StringUtils.isNotBlank(serviceType)) {
+            ret.setServiceType(serviceType);
+        }
 
-	public List<SearchField> getSearchFields() {
-		return searchFields;
-	}
+        ret.setHostName(xObj.getHostName());
+        ret.setAppType(xObj.getAppType());
+        ret.setIpAddress(xObj.getIpAddress());
+        ret.setInfo(jsonStringToMap(xObj.getInfo(), null, false));
 
-	public List<SortField> getSortFields() {
-		return sortFields;
-	}
+        return ret;
+    }
 
-	public PList<RangerPluginInfo> searchRangerPluginInfo(SearchFilter searchFilter) {
-		PList<RangerPluginInfo> retList = new PList<RangerPluginInfo>();
-		List<RangerPluginInfo> objList = new ArrayList<RangerPluginInfo>();
+    public XXPluginInfo populateDBObject(RangerPluginInfo modelObj) {
+        XXPluginInfo ret = new XXPluginInfo();
 
-		List<XXService> servicesWithTagService = daoManager.getXXService().getAllServicesWithTagService();
+        ret.setId(modelObj.getId());
+        ret.setCreateTime(modelObj.getCreateTime());
+        ret.setUpdateTime(modelObj.getUpdateTime());
+        ret.setServiceName(modelObj.getServiceName());
+        ret.setHostName(modelObj.getHostName());
+        ret.setAppType(modelObj.getAppType());
+        ret.setIpAddress(modelObj.getIpAddress());
+        ret.setInfo(mapToJsonString(modelObj.getInfo()));
 
-                // Rebuild searchFilter without serviceType
+        return ret;
+    }
 
-                String serviceTypeToSearch = searchFilter.getParam(SearchFilter.SERVICE_TYPE);
-                if (StringUtils.isNotBlank(serviceTypeToSearch)) {
-                        searchFilter.removeParam(SearchFilter.SERVICE_TYPE);
-                }
-                String clusterNameToSearch =  searchFilter.getParam(SearchFilter.CLUSTER_NAME);
-
-		List<XXPluginInfo> xObjList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
-
-		List<Object[]> objectsList = null;
-		if (CollectionUtils.isNotEmpty(xObjList)) {
-			objectsList = daoManager.getXXServiceVersionInfo().getAllWithServiceNames();
-		}
-
-		for (XXPluginInfo xObj : xObjList) {
-			XXServiceVersionInfo xxServiceVersionInfo = null;
-			boolean hasAssociatedTagService = false;
-
-			if (CollectionUtils.isNotEmpty(objectsList)) {
-				for (Object[] objects : objectsList) {
-					if (objects.length == 2) {
-						if (xObj.getServiceName().equals(objects[1])) {
-							if (objects[0] instanceof XXServiceVersionInfo) {
-								xxServiceVersionInfo = (XXServiceVersionInfo) objects[0];
-								for (XXService service : servicesWithTagService) {
-									if (service.getName().equals(xObj.getServiceName())) {
-										hasAssociatedTagService = true;
-										break;
-									}
-								}
-							} else {
-								LOG.warn("Expected first object to be XXServiceVersionInfo, got " + objects[0]);
-							}
-							break;
-						}
-					} else {
-						LOG.warn("Expected 2 objects in the list returned by getAllWithServiceNames(), received " + objects.length);
-					}
-				}
-			}
-
-			RangerPluginInfo obj = populateViewObjectWithServiceVersionInfo(xObj, xxServiceVersionInfo, hasAssociatedTagService);
-
-                        if (StringUtils.isBlank(serviceTypeToSearch) || StringUtils.equals(serviceTypeToSearch, obj.getServiceType())) {
-                                objList.add(obj);
-                        }
+    private RangerPluginInfo populateViewObjectWithServiceVersionInfo(XXPluginInfo xObj, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
+        RangerPluginInfo ret = new RangerPluginInfo();
+
+        ret.setId(xObj.getId());
+        ret.setCreateTime(xObj.getCreateTime());
+        ret.setUpdateTime(xObj.getUpdateTime());
+        ret.setServiceName(xObj.getServiceName());
+
+        String serviceDefName = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
+
+        if (StringUtils.isNotBlank(serviceDefName)) {
+            ret.setServiceType(serviceDefName);
+
+            XXServiceDef xxServiceDef = daoManager.getXXServiceDef().findByName(serviceDefName);
+
+            ret.setServiceTypeDisplayName(xxServiceDef.getDisplayName());
+        }
+
+        ret.setHostName(xObj.getHostName());
+        ret.setAppType(xObj.getAppType());
+        ret.setIpAddress(xObj.getIpAddress());
+        ret.setInfo(jsonStringToMap(xObj.getInfo(), xxServiceVersionInfo, hasAssociatedTagService));
+
+        XXService xxService = daoManager.getXXService().findByName(ret.getServiceName());
+
+        if (xxService != null) {
+            ret.setServiceDisplayName(xxService.getDisplayName());
+        }
+
+        return ret;
+    }
+
+    private List<XXPluginInfo> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<RangerPluginInfo> pList) {
+        // Get total count of the rows which meet the search criteria
+        long count = -1;
+
+        if (searchCriteria.isGetCount()) {
+            count = getCountForSearchQuery(searchCriteria, searchFieldList);
+
+            if (count == 0) {
+                return Collections.emptyList();
+            }
+        }
+
+        String             sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
+        String             queryStr   = "SELECT obj FROM " + XXPluginInfo.class.getName() + " obj ";
+        Query              query      = createQuery(queryStr, sortClause, searchCriteria, searchFieldList, false);
+        List<XXPluginInfo> resultList = daoManager.getXXPluginInfo().executeQueryInSecurityContext(XXPluginInfo.class, query);
+
+        if (pList != null) {
+            pList.setResultSize(resultList.size());
+            pList.setPageSize(query.getMaxResults());
+            pList.setSortBy(searchCriteria.getSortBy());
+            pList.setSortType(searchCriteria.getSortType());
+            pList.setStartIndex(query.getFirstResult());
+            pList.setTotalCount(count);
+        }
+
+        return resultList;
+    }
+
+    private Query createQuery(String searchString, String sortString, SearchFilter searchCriteria, List<SearchField> searchFieldList, boolean isCountQuery) {
+        EntityManager em = daoManager.getEntityManager();
+
+        return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria, searchFieldList, false, isCountQuery);
+    }
+
+    private long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
+        String countQueryStr = "SELECT COUNT(obj) FROM " + XXPluginInfo.class.getName() + " obj ";
+        Query  query         = createQuery(countQueryStr, null, searchCriteria, searchFieldList, true);
+        Long   count         = daoManager.getXXPluginInfo().executeCountQueryInSecurityContext(XXPluginInfo.class, query);
+
+        if (count == null) {
+            return 0;
+        }
+
+        return count;
+    }
+
+    private String mapToJsonString(Map<String, String> map) {
+        String ret = null;
+
+        if (map != null) {
+            try {
+                ret = jsonUtil.readMapToString(map);
+            } catch (Exception excp) {
+                LOG.error("Failed to convert map to JSON string: {}", map, excp);
+            }
+        }
+
+        return ret;
+    }
+
+    private Map<String, String> jsonStringToMap(String jsonStr, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
+        Map<String, String> ret = null;
 
-			if (StringUtils.isNotBlank(clusterNameToSearch)) {
-				Map<String, String> infoMap = obj.getInfo();
-				Set<Map.Entry<String, String>> infoSet = infoMap.entrySet();
-				for (Map.Entry<String, String> info : infoSet) {
-					if (StringUtils.equals(info.getKey(), SearchFilter.CLUSTER_NAME)) {
-						if (!StringUtils.equals(info.getValue(), clusterNameToSearch)) {
-							objList.remove(obj);
-						}
-						break;
-					}
-				}
-			}
-		}
-
-		retList.setList(objList);
-
-		return retList;
-	}
-
-	public RangerPluginInfo populateViewObject(XXPluginInfo xObj) {
-		RangerPluginInfo ret = new RangerPluginInfo();
-		ret.setId(xObj.getId());
-		ret.setCreateTime(xObj.getCreateTime());
-		ret.setUpdateTime(xObj.getUpdateTime());
-		ret.setServiceName(xObj.getServiceName());
-
-                String serviceType = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
-                if (StringUtils.isNotBlank(serviceType)) {
-                        ret.setServiceType(serviceType);
+        try {
+            ret = jsonUtil.jsonToMap(jsonStr);
+
+            if (xxServiceVersionInfo != null) {
+                Long latestPolicyVersion  = xxServiceVersionInfo.getPolicyVersion();
+                Date lastPolicyUpdateTime = xxServiceVersionInfo.getPolicyUpdateTime();
+                Long latestTagVersion     = xxServiceVersionInfo.getTagVersion();
+                Date lastTagUpdateTime    = xxServiceVersionInfo.getTagUpdateTime();
+                Long latestGdsVersion     = xxServiceVersionInfo.getGdsVersion();
+                Date lastGdsUpdateTime    = xxServiceVersionInfo.getGdsUpdateTime();
+
+                ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_POLICY_VERSION, Long.toString(latestPolicyVersion));
+                ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_POLICY_UPDATE_TIME, Long.toString(lastPolicyUpdateTime.getTime()));
+                ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_GDS_VERSION, Long.toString(latestGdsVersion));
+                ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_GDS_UPDATE_TIME, Long.toString(lastGdsUpdateTime.getTime()));
+
+                if (hasAssociatedTagService) {
+                    ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION, Long.toString(latestTagVersion));
+                    ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME, Long.toString(lastTagUpdateTime.getTime()));
+                } else {
+                    ret.remove(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION);
+                    ret.remove(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME);
                 }
-		ret.setHostName(xObj.getHostName());
-		ret.setAppType(xObj.getAppType());
-		ret.setIpAddress(xObj.getIpAddress());
-		ret.setInfo(jsonStringToMap(xObj.getInfo(), null, false));
-		return ret;
-	}
-
-	public XXPluginInfo populateDBObject(RangerPluginInfo modelObj) {
-		XXPluginInfo ret = new XXPluginInfo();
-		ret.setId(modelObj.getId());
-		ret.setCreateTime(modelObj.getCreateTime());
-		ret.setUpdateTime(modelObj.getUpdateTime());
-		ret.setServiceName(modelObj.getServiceName());
-		ret.setHostName(modelObj.getHostName());
-		ret.setAppType(modelObj.getAppType());
-		ret.setIpAddress(modelObj.getIpAddress());
-		ret.setInfo(mapToJsonString(modelObj.getInfo()));
-		return ret;
-	}
-
-	private RangerPluginInfo populateViewObjectWithServiceVersionInfo(XXPluginInfo xObj, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
-		RangerPluginInfo ret = new RangerPluginInfo();
-		ret.setId(xObj.getId());
-		ret.setCreateTime(xObj.getCreateTime());
-		ret.setUpdateTime(xObj.getUpdateTime());
-		ret.setServiceName(xObj.getServiceName());
-
-		String serviceDefName = daoManager.getXXServiceDef().findServiceDefTypeByServiceName(ret.getServiceName());
-		if (StringUtils.isNotBlank(serviceDefName)) {
-			ret.setServiceType(serviceDefName);
-			XXServiceDef xxServiceDef = daoManager.getXXServiceDef().findByName(serviceDefName);
-
-			ret.setServiceTypeDisplayName(xxServiceDef.getDisplayName());
-		}
-		ret.setHostName(xObj.getHostName());
-		ret.setAppType(xObj.getAppType());
-		ret.setIpAddress(xObj.getIpAddress());
-		ret.setInfo(jsonStringToMap(xObj.getInfo(), xxServiceVersionInfo, hasAssociatedTagService));
-
-		XXService xxService = daoManager.getXXService().findByName(ret.getServiceName());
-		if (xxService != null) {
-			ret.setServiceDisplayName(xxService.getDisplayName());
-		}
-		return ret;
-	}
-
-	private List<XXPluginInfo> searchRangerObjects(SearchFilter searchCriteria, List<SearchField> searchFieldList, List<SortField> sortFieldList, PList<RangerPluginInfo> pList) {
-
-		// Get total count of the rows which meet the search criteria
-		long count = -1;
-		if (searchCriteria.isGetCount()) {
-			count = getCountForSearchQuery(searchCriteria, searchFieldList);
-			if (count == 0) {
-				return Collections.emptyList();
-			}
-		}
-
-		String sortClause = searchUtil.constructSortClause(searchCriteria, sortFieldList);
-
-		String queryStr = "SELECT obj FROM " + XXPluginInfo.class.getName() + " obj ";
-		Query query = createQuery(queryStr, sortClause, searchCriteria, searchFieldList, false);
-
-		List<XXPluginInfo> resultList = daoManager.getXXPluginInfo().executeQueryInSecurityContext(XXPluginInfo.class, query);
-
-		if (pList != null) {
-			pList.setResultSize(resultList.size());
-			pList.setPageSize(query.getMaxResults());
-			pList.setSortBy(searchCriteria.getSortBy());
-			pList.setSortType(searchCriteria.getSortType());
-			pList.setStartIndex(query.getFirstResult());
-			pList.setTotalCount(count);
-		}
-		return resultList;
-	}
-
-	private Query createQuery(String searchString, String sortString, SearchFilter searchCriteria,
-								List<SearchField> searchFieldList, boolean isCountQuery) {
-
-		EntityManager em = daoManager.getEntityManager();
-		return searchUtil.createSearchQuery(em, searchString, sortString, searchCriteria,
-				searchFieldList, false, isCountQuery);
-	}
-
-	private long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
-
-		String countQueryStr = "SELECT COUNT(obj) FROM " + XXPluginInfo.class.getName() + " obj ";
-
-		Query query = createQuery(countQueryStr, null, searchCriteria, searchFieldList, true);
-		Long count = daoManager.getXXPluginInfo().executeCountQueryInSecurityContext(XXPluginInfo.class, query);
-
-		if (count == null) {
-			return 0;
-		}
-		return count;
-	}
-
-	private String mapToJsonString(Map<String, String> map) {
-		String ret = null;
-
-		if(map != null) {
-			try {
-				ret = jsonUtil.readMapToString(map);
-			} catch(Exception excp) {
-				LOG.error("Failed to convert map to JSON string: '" + map + "'", excp);
-			}
-		}
-
-		return ret;
-	}
-
-	private Map<String, String> jsonStringToMap(String jsonStr, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
-
-		Map<String, String> ret = null;
-
-		try {
-			ret = jsonUtil.jsonToMap(jsonStr);
-
-			if (xxServiceVersionInfo != null) {
-				Long latestPolicyVersion = xxServiceVersionInfo.getPolicyVersion();
-				Date lastPolicyUpdateTime = xxServiceVersionInfo.getPolicyUpdateTime();
-				Long latestTagVersion = xxServiceVersionInfo.getTagVersion();
-				Date lastTagUpdateTime = xxServiceVersionInfo.getTagUpdateTime();
-				Long latestGdsVersion = xxServiceVersionInfo.getGdsVersion();
-				Date lastGdsUpdateTime = xxServiceVersionInfo.getGdsUpdateTime();
-
-				ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_POLICY_VERSION, Long.toString(latestPolicyVersion));
-				ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_POLICY_UPDATE_TIME, Long.toString(lastPolicyUpdateTime.getTime()));
-				ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_GDS_VERSION, Long.toString(latestGdsVersion));
-				ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_GDS_UPDATE_TIME, Long.toString(lastGdsUpdateTime.getTime()));
-				if (hasAssociatedTagService) {
-					ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION, Long.toString(latestTagVersion));
-					ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME, Long.toString(lastTagUpdateTime.getTime()));
-				} else {
-					ret.remove(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION);
-					ret.remove(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME);
-				}
-			}
-		}
-		catch(Exception excp) {
-			LOG.error("Failed to convert JSON string to Map: '" + jsonStr + "'", excp);
-		}
-
-		return ret;
-	}
-}
\ No newline at end of file
+            }
+        } catch (Exception excp) {
+            LOG.error("Failed to convert JSON string to Map: {}", jsonStr, excp);
+        }
+
+        return ret;
+    }
+}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java
index ece9997e7..e9e21a8cb 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyLabelsService.java
@@ -31,41 +31,36 @@ import org.springframework.stereotype.Service;
 
 @Service
 @Scope("singleton")
-public class RangerPolicyLabelsService<T extends XXPolicyLabel, V extends RangerPolicy>
-		extends RangerBaseModelService<T, V> {
+public class RangerPolicyLabelsService<T extends XXPolicyLabel, V extends RangerPolicy> extends RangerBaseModelService<T, V> {
+    @Autowired
+    RangerAuditFields<?> rangerAuditFields;
 
-	@Autowired
-	RangerAuditFields<?> rangerAuditFields;
+    public RangerPolicyLabelsService() {
+        super();
 
-	public RangerPolicyLabelsService() {
-		super();
-		searchFields.add(
-				new SearchField(SearchFilter.POLICY_LABEL, "obj.policyLabel", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
-		sortFields.add(new SortField(SearchFilter.POLICY_LABEL_ID, "obj.id", true, SORT_ORDER.ASC));
-	}
+        searchFields.add(new SearchField(SearchFilter.POLICY_LABEL, "obj.policyLabel", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+        sortFields.add(new SortField(SearchFilter.POLICY_LABEL_ID, "obj.id", true, SORT_ORDER.ASC));
+    }
 
-	@Override
-	protected T mapViewToEntityBean(V viewBean, T t, int OPERATION_CONTEXT) {
-		// TODO Auto-generated method stub
-		return null;
-	}
+    @Override
+    protected T mapViewToEntityBean(V viewBean, T t, int operationContext) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
-	@Override
-	protected V mapEntityToViewBean(V viewBean, T t) {
-		// TODO Auto-generated method stub
-		return null;
-	}
+    @Override
+    protected V mapEntityToViewBean(V viewBean, T t) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
-	@Override
-	protected void validateForCreate(V vObj) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	protected void validateForUpdate(V vObj, T entityObj) {
-		// TODO Auto-generated method stub
-
-	}
+    @Override
+    protected void validateForCreate(V vObj) {
+        // TODO Auto-generated method stub
+    }
 
+    @Override
+    protected void validateForUpdate(V vObj, T entityObj) {
+        // TODO Auto-generated method stub
+    }
 }
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 a0381da8b..193face94 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
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.ranger.biz.RangerPolicyRetriever;
 import org.apache.ranger.entity.XXPolicy;
 import org.apache.ranger.plugin.model.RangerPolicy;
@@ -27,39 +26,38 @@ import org.springframework.stereotype.Service;
 @Service
 @Scope("singleton")
 public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, RangerPolicy> {
-
-	public RangerPolicyService() {
-		super();
-	}
-
-	@Override
-	protected XXPolicy mapViewToEntityBean(RangerPolicy vObj, XXPolicy xObj, int OPERATION_CONTEXT) {
-		return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
-	}
-
-	@Override
-	protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicy xObj) {
-		return super.mapEntityToViewBean(vObj, xObj);
-	}
-	
-	@Override
-	protected void validateForCreate(RangerPolicy vObj) {
-		// TODO Auto-generated method stub
-	}
-
-	@Override
-	protected void validateForUpdate(RangerPolicy vObj, XXPolicy entityObj) {
-		// TODO Auto-generated method stub
-	}
-	
-	@Override
-	protected RangerPolicy populateViewBean(XXPolicy xPolicy) {
-		RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
-
-		return retriever.getPolicy(xPolicy);
-	}
-	
-	public RangerPolicy getPopulatedViewObject(XXPolicy xPolicy) {
-		return this.populateViewBean(xPolicy);
-	}
+    public RangerPolicyService() {
+        super();
+    }
+
+    public RangerPolicy getPopulatedViewObject(XXPolicy xPolicy) {
+        return this.populateViewBean(xPolicy);
+    }
+
+    @Override
+    protected XXPolicy mapViewToEntityBean(RangerPolicy vObj, XXPolicy xObj, int operationContext) {
+        return super.mapViewToEntityBean(vObj, xObj, operationContext);
+    }
+
+    @Override
+    protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicy xObj) {
+        return super.mapEntityToViewBean(vObj, xObj);
+    }
+
+    @Override
+    protected RangerPolicy populateViewBean(XXPolicy xPolicy) {
+        RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
+
+        return retriever.getPolicy(xPolicy);
+    }
+
+    @Override
+    protected void validateForCreate(RangerPolicy vObj) {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    protected void validateForUpdate(RangerPolicy vObj, XXPolicy entityObj) {
+        // TODO Auto-generated method stub
+    }
 }
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 7d5727a76..03ec978ac 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
@@ -20,15 +20,20 @@ package org.apache.ranger.service;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
-import org.apache.ranger.common.*;
+import org.apache.ranger.common.AppConstants;
+import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.MessageEnums;
+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.SortField;
 import org.apache.ranger.common.SortField.SORT_ORDER;
 import org.apache.ranger.common.view.VTrxLogAttr;
 import org.apache.ranger.entity.XXPolicyBase;
 import org.apache.ranger.entity.XXSecurityZone;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceDef;
+import org.apache.ranger.plugin.model.RangerBaseModelObject;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerSecurityZone;
 import org.apache.ranger.plugin.util.SearchFilter;
@@ -37,236 +42,228 @@ import org.springframework.beans.factory.annotation.Autowired;
 import java.util.Map;
 
 public abstract class RangerPolicyServiceBase<T extends XXPolicyBase, V extends RangerPolicy> extends RangerAuditedModelService<T, V> {
-
     public static final String OPTION_POLICY_VALIDITY_SCHEDULES = "POLICY_VALIDITY_SCHEDULES";
 
     @Autowired
-	GUIDUtil guidUtil;
-
-	public RangerPolicyServiceBase() {
-		super(AppConstants.CLASS_TYPE_RANGER_POLICY, AppConstants.CLASS_TYPE_XA_SERVICE);
-
-		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));
-		//might need updation
-		/*searchFields.add(new SearchField(SearchFilter.IS_RECURSIVE,"xPolRes.isRecursive",DATA_TYPE.BOOLEAN,SEARCH_TYPE.FULL,
-				"XXPolicyResource xPolRes","obj.id=xPolRes.policyId"));*/
-		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.GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.USER, "xUser.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
-				"XXUser xUser, XXPolicyRefUser refUser", "obj.id = refUser.policyId "
-						+ "and xUser.id = refUser.userId"));
-		searchFields.add(new SearchField(SearchFilter.GROUP, "xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
-				"XXGroup xGrp , XXPolicyRefGroup refGroup", "obj.id = refGroup.policyId "
-						+ "and xGrp.id = refGroup.groupId"));
-		searchFields.add(new SearchField(SearchFilter.ROLE, "xRole.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
-				"XXRole xRole , XXPolicyRefRole refRole", "obj.id = refRole.policyId "
-				+ "and xRole.id = refRole.roleId"));
-		//might need updation
-		/*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_LABELS_PARTIAL, "obj.label_name", DATA_TYPE.STRING,
-                                SEARCH_TYPE.PARTIAL));*/
-		searchFields.add(new SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING,
-				SEARCH_TYPE.PARTIAL));
-		searchFields.add(new SearchField(SearchFilter.POLICY_TYPE, "obj.policyType", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "xZone.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
-				"XXSecurityZone xZone", "xZone.id = obj.zoneId"));
-		searchFields.add(new SearchField(SearchFilter.ZONE_ID, "xZone.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL,
-				"XXSecurityZone xZone", "xZone.id = obj.zoneId"));
-
-		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", true, SORT_ORDER.ASC));
-		sortFields.add(new SortField(SearchFilter.POLICY_NAME, "obj.name"));
-
-		trxLogAttrs.put("name",                 new VTrxLogAttr("name", "Policy Name", false, true));
-		trxLogAttrs.put("description",          new VTrxLogAttr("description", "Policy Description"));
-		trxLogAttrs.put("isEnabled",            new VTrxLogAttr("isEnabled", "Policy Status"));
-		trxLogAttrs.put("resources",            new VTrxLogAttr("resources", "Policy Resources"));
-		trxLogAttrs.put("additionalResources",  new VTrxLogAttr("additionalResources", "Policy Additional Resources"));
-		trxLogAttrs.put("conditions",           new VTrxLogAttr("conditions", "Policy Conditions"));
-		trxLogAttrs.put("policyItems",          new VTrxLogAttr("policyItems", "Policy Items"));
-		trxLogAttrs.put("denyPolicyItems",      new VTrxLogAttr("denyPolicyItems", "DenyPolicy Items"));
-		trxLogAttrs.put("allowExceptions",      new VTrxLogAttr("allowExceptions", "Allow Exceptions"));
-		trxLogAttrs.put("denyExceptions",       new VTrxLogAttr("denyExceptions", "Deny Exceptions"));
-		trxLogAttrs.put("dataMaskPolicyItems",  new VTrxLogAttr("dataMaskPolicyItems", "Masked Policy Items"));
-		trxLogAttrs.put("rowFilterPolicyItems", new VTrxLogAttr("rowFilterPolicyItems", "Row level filter Policy Items"));
-		trxLogAttrs.put("isAuditEnabled",       new VTrxLogAttr("isAuditEnabled", "Audit Status"));
-		trxLogAttrs.put("policyLabels",         new VTrxLogAttr("policyLabels", "Policy Labels"));
-		trxLogAttrs.put("validitySchedules",    new VTrxLogAttr("validitySchedules", "Validity Schedules"));
-		trxLogAttrs.put("policyPriority",       new VTrxLogAttr("policyPriority", "Priority"));
-		trxLogAttrs.put("zoneName",             new VTrxLogAttr("zoneName", "Zone Name"));
-		trxLogAttrs.put("isDenyAllElse",        new VTrxLogAttr("isDenyAllElse", "Deny All Other Accesses"));
-	}
-
-	@Override
-	public String getParentObjectName(V obj, V oldObj) {
-		return obj != null ? obj.getService() : null;
-	}
-
-	@Override
-	public Long getParentObjectId(V obj, V oldObj) {
-		String    serviceName = obj != null ? obj.getService() : null;
-		XXService service     = serviceName != null ? daoMgr.getXXService().findByName(obj.getService()) : null;
-
-		return service != null ? service.getId() : null;
-	}
-
-	@Override
-	public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
-		final boolean ret;
-
-		int policyType = (obj == null || obj.getPolicyType() == null) ? RangerPolicy.POLICY_TYPE_ACCESS : obj.getPolicyType();
-
-		switch (trxLogAttr.getAttribName()) {
-			case "dataMaskPolicyItems":
-				ret = policyType != RangerPolicy.POLICY_TYPE_DATAMASK;
-			break;
-
-			case "rowFilterPolicyItems":
-				ret = policyType != RangerPolicy.POLICY_TYPE_ROWFILTER;
-			break;
-
-			case "policyItems":
-			case "allowExceptions":
-			case "denyPolicyItems":
-			case "denyExceptions":
-			case "isDenyAllElse":
+    GUIDUtil guidUtil;
+
+    public RangerPolicyServiceBase() {
+        super(AppConstants.CLASS_TYPE_RANGER_POLICY, AppConstants.CLASS_TYPE_XA_SERVICE);
+
+        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.GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.USER, "xUser.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXUser xUser, XXPolicyRefUser refUser", "obj.id = refUser.policyId and xUser.id = refUser.userId"));
+        searchFields.add(new SearchField(SearchFilter.GROUP, "xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXGroup xGrp , XXPolicyRefGroup refGroup", "obj.id = refGroup.policyId and xGrp.id = refGroup.groupId"));
+        searchFields.add(new SearchField(SearchFilter.ROLE, "xRole.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXRole xRole , XXPolicyRefRole refRole", "obj.id = refRole.policyId and xRole.id = refRole.roleId"));
+        searchFields.add(new SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.POLICY_TYPE, "obj.policyType", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "xZone.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXSecurityZone xZone", "xZone.id = obj.zoneId"));
+        searchFields.add(new SearchField(SearchFilter.ZONE_ID, "xZone.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL, "XXSecurityZone xZone", "xZone.id = obj.zoneId"));
+
+        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", true, SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.POLICY_NAME, "obj.name"));
+
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Policy Name", false, true));
+        trxLogAttrs.put("description", new VTrxLogAttr("description", "Policy Description"));
+        trxLogAttrs.put("isEnabled", new VTrxLogAttr("isEnabled", "Policy Status"));
+        trxLogAttrs.put("resources", new VTrxLogAttr("resources", "Policy Resources"));
+        trxLogAttrs.put("additionalResources", new VTrxLogAttr("additionalResources", "Policy Additional Resources"));
+        trxLogAttrs.put("conditions", new VTrxLogAttr("conditions", "Policy Conditions"));
+        trxLogAttrs.put("policyItems", new VTrxLogAttr("policyItems", "Policy Items"));
+        trxLogAttrs.put("denyPolicyItems", new VTrxLogAttr("denyPolicyItems", "DenyPolicy Items"));
+        trxLogAttrs.put("allowExceptions", new VTrxLogAttr("allowExceptions", "Allow Exceptions"));
+        trxLogAttrs.put("denyExceptions", new VTrxLogAttr("denyExceptions", "Deny Exceptions"));
+        trxLogAttrs.put("dataMaskPolicyItems", new VTrxLogAttr("dataMaskPolicyItems", "Masked Policy Items"));
+        trxLogAttrs.put("rowFilterPolicyItems", new VTrxLogAttr("rowFilterPolicyItems", "Row level filter Policy Items"));
+        trxLogAttrs.put("isAuditEnabled", new VTrxLogAttr("isAuditEnabled", "Audit Status"));
+        trxLogAttrs.put("policyLabels", new VTrxLogAttr("policyLabels", "Policy Labels"));
+        trxLogAttrs.put("validitySchedules", new VTrxLogAttr("validitySchedules", "Validity Schedules"));
+        trxLogAttrs.put("policyPriority", new VTrxLogAttr("policyPriority", "Priority"));
+        trxLogAttrs.put("zoneName", new VTrxLogAttr("zoneName", "Zone Name"));
+        trxLogAttrs.put("isDenyAllElse", new VTrxLogAttr("isDenyAllElse", "Deny All Other Accesses"));
+    }
+
+    @Override
+    public String getParentObjectName(V obj, V oldObj) {
+        return obj != null ? obj.getService() : null;
+    }
+
+    @Override
+    public Long getParentObjectId(V obj, V oldObj) {
+        String    serviceName = obj != null ? obj.getService() : null;
+        XXService service     = serviceName != null ? daoMgr.getXXService().findByName(obj.getService()) : null;
+
+        return service != null ? service.getId() : null;
+    }
+
+    @Override
+    public boolean skipTrxLogForAttribute(V obj, V oldObj, VTrxLogAttr trxLogAttr) {
+        final boolean ret;
+
+        int policyType = (obj == null || obj.getPolicyType() == null) ? RangerPolicy.POLICY_TYPE_ACCESS : obj.getPolicyType();
+
+        switch (trxLogAttr.getAttribName()) {
+            case "dataMaskPolicyItems":
+                ret = policyType != RangerPolicy.POLICY_TYPE_DATAMASK;
+                break;
+
+            case "rowFilterPolicyItems":
+                ret = policyType != RangerPolicy.POLICY_TYPE_ROWFILTER;
+                break;
+
+            case "policyItems":
+            case "allowExceptions":
+            case "denyPolicyItems":
+            case "denyExceptions":
+            case "isDenyAllElse":
                 ret = policyType != RangerPolicy.POLICY_TYPE_ACCESS;
-			break;
-
-			default:
-				ret = false;
-			break;
-		}
-
-		return ret;
-	}
-
-	@Override
-	protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
-		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.getService(), MessageEnums.INVALID_INPUT_DATA);
-		}
-		Long zoneId = convertZoneNameToZoneId(vObj.getZoneName(), vObj);
-		xObj.setZoneId(zoneId);
-
-		XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
-		if (xServiceDef != null) {
-			vObj.setServiceType(xServiceDef.getName());
-		}
-
-		String guid = vObj.getGuid();
-		if (StringUtils.isEmpty(guid)) {
-			guid = guidUtil.genGUID();
-			vObj.setGuid(guid);
-		}
-		Integer policyPriority = vObj.getPolicyPriority();
-		if (policyPriority == null) {
-			policyPriority = RangerPolicy.POLICY_PRIORITY_NORMAL;
-			vObj.setPolicyPriority(policyPriority);
-		}
-		Integer policyType = vObj.getPolicyType();
-		if (policyType == null) {
-			policyType = RangerPolicy.POLICY_TYPE_ACCESS;
-			vObj.setPolicyType(policyType);
-		}
-
-		xObj.setGuid(guid);
-		xObj.setVersion(vObj.getVersion());
-		xObj.setService(xService.getId());
-		xObj.setName(StringUtils.trim(vObj.getName()));
-		xObj.setPolicyType(policyType);
-		xObj.setPolicyPriority(policyPriority);
-		xObj.setDescription(vObj.getDescription());
-		xObj.setResourceSignature(vObj.getResourceSignature());
-		xObj.setIsAuditEnabled(vObj.getIsAuditEnabled());
-		xObj.setIsEnabled(vObj.getIsEnabled());
-
-		String              validitySchedules = JsonUtils.listToJson(vObj.getValiditySchedules());
-		Map<String, Object> options           = vObj.getOptions();
-
-		if (StringUtils.isNotBlank(validitySchedules)) {
-			options = vObj.getUpdatableMap(options);
-			options.put(OPTION_POLICY_VALIDITY_SCHEDULES, validitySchedules);
-		} else if (MapUtils.isNotEmpty(options)) {
-			options.remove(OPTION_POLICY_VALIDITY_SCHEDULES);
-		}
-
-		xObj.setOptions(JsonUtils.mapToJson(options));
-
-		xObj.setPolicyText(JsonUtils.objectToJson(vObj));
-
-		return xObj;
-	}
-
-	@Override
-	protected V mapEntityToViewBean(V vObj, T xObj) {
-		XXService xService = daoMgr.getXXService().getById(xObj.getService());
-		XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
-		vObj.setGuid(xObj.getGuid());
-		vObj.setVersion(xObj.getVersion());
-		vObj.setService(xService.getName());
-		vObj.setServiceType(xServiceDef.getName());
-		vObj.setName(StringUtils.trim(xObj.getName()));
-		vObj.setPolicyType(xObj.getPolicyType() == null ? RangerPolicy.POLICY_TYPE_ACCESS : xObj.getPolicyType());
-		vObj.setPolicyPriority(xObj.getPolicyPriority() == null ? RangerPolicy.POLICY_PRIORITY_NORMAL : xObj.getPolicyPriority());
-		vObj.setDescription(xObj.getDescription());
-		vObj.setResourceSignature(xObj.getResourceSignature());
-		vObj.setIsEnabled(xObj.getIsEnabled());
-		vObj.setIsAuditEnabled(xObj.getIsAuditEnabled());
-		String zoneName = convertZoneIdToZoneName(xObj.getZoneId(), vObj);
-		vObj.setZoneName(zoneName);
-
-		String policyText = xObj.getPolicyText();
-
-		RangerPolicy ret = JsonUtils.jsonToObject(policyText, RangerPolicy.class);
-
-		if (ret != null) {
-			vObj.setOptions(ret.getOptions());
-			vObj.setValiditySchedules(ret.getValiditySchedules());
-			vObj.setPolicyLabels(ret.getPolicyLabels());
-		}
-
-		return vObj;
-	}
-
-	private Long convertZoneNameToZoneId(String zoneName, V vObj) {
-		if (StringUtils.isEmpty(zoneName)) return RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
-		XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneName(zoneName);
-		if (zone == null) {
-			throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName()
-					+ "Zone Not Found : " + zoneName, MessageEnums.INVALID_INPUT_DATA);
-		}
-		return zone.getId();
-	}
-
-	private String convertZoneIdToZoneName(Long zoneId, V vObj) {
-		if (zoneId == null) {
-			throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName()
-					+ "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
-		}
-		if (zoneId.equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
-			return StringUtils.EMPTY;
-		}
-		XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneId(zoneId);
-		if (zone == null) {
-			throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName()
-					+ "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
-		}
-		return zone.getName();
-	}
+                break;
+
+            default:
+                ret = false;
+                break;
+        }
+
+        return ret;
+    }
+
+    @Override
+    protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+        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.getService(), MessageEnums.INVALID_INPUT_DATA);
+        }
+
+        Long zoneId = convertZoneNameToZoneId(vObj.getZoneName(), vObj);
+
+        xObj.setZoneId(zoneId);
+
+        XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
+
+        if (xServiceDef != null) {
+            vObj.setServiceType(xServiceDef.getName());
+        }
+
+        String guid = vObj.getGuid();
+
+        if (StringUtils.isEmpty(guid)) {
+            guid = guidUtil.genGUID();
+            vObj.setGuid(guid);
+        }
+
+        Integer policyPriority = vObj.getPolicyPriority();
+
+        if (policyPriority == null) {
+            policyPriority = RangerPolicy.POLICY_PRIORITY_NORMAL;
+            vObj.setPolicyPriority(policyPriority);
+        }
+
+        Integer policyType = vObj.getPolicyType();
+
+        if (policyType == null) {
+            policyType = RangerPolicy.POLICY_TYPE_ACCESS;
+            vObj.setPolicyType(policyType);
+        }
+
+        xObj.setGuid(guid);
+        xObj.setVersion(vObj.getVersion());
+        xObj.setService(xService.getId());
+        xObj.setName(StringUtils.trim(vObj.getName()));
+        xObj.setPolicyType(policyType);
+        xObj.setPolicyPriority(policyPriority);
+        xObj.setDescription(vObj.getDescription());
+        xObj.setResourceSignature(vObj.getResourceSignature());
+        xObj.setIsAuditEnabled(vObj.getIsAuditEnabled());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+
+        String              validitySchedules = JsonUtils.listToJson(vObj.getValiditySchedules());
+        Map<String, Object> options           = vObj.getOptions();
+
+        if (StringUtils.isNotBlank(validitySchedules)) {
+            options = RangerBaseModelObject.getUpdatableMap(options);
+            options.put(OPTION_POLICY_VALIDITY_SCHEDULES, validitySchedules);
+        } else if (MapUtils.isNotEmpty(options)) {
+            options.remove(OPTION_POLICY_VALIDITY_SCHEDULES);
+        }
+
+        xObj.setOptions(JsonUtils.mapToJson(options));
+        xObj.setPolicyText(JsonUtils.objectToJson(vObj));
+
+        return xObj;
+    }
+
+    @Override
+    protected V mapEntityToViewBean(V vObj, T xObj) {
+        XXService    xService    = daoMgr.getXXService().getById(xObj.getService());
+        XXServiceDef xServiceDef = daoMgr.getXXServiceDef().getById(xService.getType());
+
+        vObj.setGuid(xObj.getGuid());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setService(xService.getName());
+        vObj.setServiceType(xServiceDef.getName());
+        vObj.setName(StringUtils.trim(xObj.getName()));
+        vObj.setPolicyType(xObj.getPolicyType() == null ? RangerPolicy.POLICY_TYPE_ACCESS : xObj.getPolicyType());
+        vObj.setPolicyPriority(xObj.getPolicyPriority() == null ? RangerPolicy.POLICY_PRIORITY_NORMAL : xObj.getPolicyPriority());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setResourceSignature(xObj.getResourceSignature());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setIsAuditEnabled(xObj.getIsAuditEnabled());
+
+        String zoneName = convertZoneIdToZoneName(xObj.getZoneId(), vObj);
+
+        vObj.setZoneName(zoneName);
+
+        String policyText = xObj.getPolicyText();
+
+        RangerPolicy ret = JsonUtils.jsonToObject(policyText, RangerPolicy.class);
+
+        if (ret != null) {
+            vObj.setOptions(ret.getOptions());
+            vObj.setValiditySchedules(ret.getValiditySchedules());
+            vObj.setPolicyLabels(ret.getPolicyLabels());
+        }
+
+        return vObj;
+    }
+
+    private Long convertZoneNameToZoneId(String zoneName, V vObj) {
+        if (StringUtils.isEmpty(zoneName)) {
+            return RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID;
+        }
+
+        XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneName(zoneName);
+
+        if (zone == null) {
+            throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName() + "Zone Not Found : " + zoneName, MessageEnums.INVALID_INPUT_DATA);
+        }
+
+        return zone.getId();
+    }
+
+    private String convertZoneIdToZoneName(Long zoneId, V vObj) {
+        if (zoneId == null) {
+            throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName() + "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
+        }
+
+        if (zoneId.equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
+            return StringUtils.EMPTY;
+        }
+
+        XXSecurityZone zone = daoMgr.getXXSecurityZoneDao().findByZoneId(zoneId);
+
+        if (zone == null) {
+            throw restErrorUtil.createRESTException("No corresponding zone found for policyName: " + vObj.getName() + "Zone Not Found : " + zoneId, MessageEnums.INVALID_INPUT_DATA);
+        }
+
+        return zone.getName();
+    }
 }
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
index 540a29eb2..2e61df41d 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyWithAssignedIdService.java
@@ -17,7 +17,6 @@
 
 package org.apache.ranger.service;
 
-
 import org.apache.ranger.biz.RangerPolicyRetriever;
 import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.entity.XXPolicyWithAssignedId;
@@ -27,44 +26,37 @@ 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 super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
-	}
-
-	@Override
-	protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj) {
-		return super.mapEntityToViewBean(vObj, 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) {
-		RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
-
-		RangerPolicy vPolicy = retriever.getPolicy(xPolicy.getId());
-
-		return vPolicy;
-	}
-
-	public RangerPolicy getPopulatedViewObject(XXPolicyWithAssignedId xPolicy) {
-		return this.populateViewBean(xPolicy);
-	}
-
+    @Autowired
+    JSONUtil jsonUtil;
+
+    public RangerPolicy getPopulatedViewObject(XXPolicyWithAssignedId xPolicy) {
+        return this.populateViewBean(xPolicy);
+    }
+
+    @Override
+    protected XXPolicyWithAssignedId mapViewToEntityBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj, int operationContext) {
+        return super.mapViewToEntityBean(vObj, xObj, operationContext);
+    }
+
+    @Override
+    protected RangerPolicy mapEntityToViewBean(RangerPolicy vObj, XXPolicyWithAssignedId xObj) {
+        return super.mapEntityToViewBean(vObj, xObj);
+    }
+
+    @Override
+    protected RangerPolicy populateViewBean(XXPolicyWithAssignedId xPolicy) {
+        RangerPolicyRetriever retriever = new RangerPolicyRetriever(daoMgr);
+
+        return retriever.getPolicy(xPolicy.getId());
+    }
+
+    @Override
+    protected void validateForCreate(RangerPolicy vObj) {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    protected void validateForUpdate(RangerPolicy vObj, XXPolicyWithAssignedId entityObj) {
+        // TODO Auto-generated method stub
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java
index eb8ed8bfa..bc9156085 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleService.java
@@ -17,11 +17,6 @@
 
 package org.apache.ranger.service;
 
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
@@ -38,16 +33,43 @@ import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 @Service
 @Scope("singleton")
 public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole> {
-
     private static final Logger logger = LoggerFactory.getLogger(RangerRoleService.class);
 
     public RangerRoleService() {
         super();
     }
 
+    public void updatePolicyVersions(Long roleId) {
+        logger.debug("==> updatePolicyVersions(roleId={})", roleId);
+        // Get all roles which include this role because change to this affects all these roles
+        Set<Long> containingRoles = getContainingRoles(roleId);
+
+        logger.debug("All containing Roles for roleId:[{}] are [{}]", roleId, containingRoles);
+
+        updatePolicyVersions(containingRoles);
+
+        logger.debug("<== updatePolicyVersions(roleId={})", roleId);
+    }
+
+    public void updateRoleVersions(Long roleId) {
+        logger.debug("==> updateRoleVersions(roleId={})", roleId);
+        // Get all roles which include this role because change to this affects all these roles
+        Set<Long> containingRoles = getContainingRoles(roleId);
+
+        logger.debug("All containing Roles for roleId:[{}] are [{}]", roleId, containingRoles);
+
+        updateRoleVersions(containingRoles);
+
+        logger.debug("<== updateRoleVersions(roleId={})", roleId);
+    }
+
     @Override
     protected void validateForCreate(RangerRole vObj) {
     }
@@ -57,25 +79,26 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
     }
 
     @Override
-    protected XXRole mapViewToEntityBean(RangerRole rangerRole, XXRole xxRole, int OPERATION_CONTEXT) {
-        XXRole ret = super.mapViewToEntityBean(rangerRole, xxRole, OPERATION_CONTEXT);
+    protected XXRole mapViewToEntityBean(RangerRole rangerRole, XXRole xxRole, int operationContext) {
+        XXRole ret = super.mapViewToEntityBean(rangerRole, xxRole, operationContext);
+
         ret.setRoleText(JsonUtils.objectToJson(rangerRole));
+
         return ret;
     }
+
     @Override
     protected RangerRole mapEntityToViewBean(RangerRole rangerRole, XXRole xxRole) {
         RangerRole ret = super.mapEntityToViewBean(rangerRole, xxRole);
 
         if (StringUtils.isNotEmpty(xxRole.getRoleText())) {
-            if (logger.isDebugEnabled()) {
-                logger.debug("roleText=" + xxRole.getRoleText());
-            }
+            logger.debug("roleText={}", xxRole.getRoleText());
+
             RangerRole roleFromJsonData = JsonUtils.jsonToObject(xxRole.getRoleText(), RangerRole.class);
 
             if (roleFromJsonData != null) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("Role object built from JSON :[" + roleFromJsonData +"]");
-                }
+                logger.debug("Role object built from JSON :[{}]", roleFromJsonData);
+
                 ret.setOptions(roleFromJsonData.getOptions());
                 ret.setUsers(roleFromJsonData.getUsers());
                 ret.setGroups(roleFromJsonData.getGroups());
@@ -83,30 +106,12 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
                 ret.setCreatedByUser(roleFromJsonData.getCreatedByUser());
             }
         } else {
-            logger.info("Empty string representing jsonData in [" + xxRole + "]!!");
+            logger.info("Empty string representing jsonData in [{}]!!", xxRole);
         }
 
         return ret;
     }
 
-    public void updatePolicyVersions(Long roleId) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("==> updatePolicyVersions(roleId=" + roleId + ")");
-        }
-        // Get all roles which include this role because change to this affects all these roles
-        Set<Long> containingRoles = getContainingRoles(roleId);
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("All containing Roles for roleId:[" + roleId +"] are [" + containingRoles + "]");
-        }
-
-        updatePolicyVersions(containingRoles);
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("<== updatePolicyVersions(roleId=" + roleId + ")");
-        }
-    }
-
     private Set<Long> getContainingRoles(Long roleId) {
         Set<Long> ret = new HashSet<>();
 
@@ -115,28 +120,9 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
         return ret;
     }
 
-    public void updateRoleVersions(Long roleId) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("==> updateRoleVersions(roleId=" + roleId + ")");
-        }
-        // Get all roles which include this role because change to this affects all these roles
-        Set<Long> containingRoles = getContainingRoles(roleId);
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("All containing Roles for roleId:[" + roleId +"] are [" + containingRoles + "]");
-        }
-
-        updateRoleVersions(containingRoles);
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("<== updateRoleVersions(roleId=" + roleId + ")");
-        }
-    }
-
     private void addContainingRoles(Long roleId, Set<Long> allRoles) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("==> addContainingRoles(roleId=" + roleId + ")");
-        }
+        logger.debug("==> addContainingRoles(roleId={})", roleId);
+
         if (!allRoles.contains(roleId)) {
             allRoles.add(roleId);
 
@@ -146,15 +132,12 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
                 addContainingRoles(role, allRoles);
             }
         }
-        if (logger.isDebugEnabled()) {
-            logger.debug("<== addContainingRoles(roleId=" + roleId + ")");
-        }
+
+        logger.debug("<== addContainingRoles(roleId={})", roleId);
     }
 
     private void updatePolicyVersions(Set<Long> roleIds) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("==> updatePolicyVersions(roleIds=" + roleIds + ")");
-        }
+        logger.debug("==> updatePolicyVersions(roleIds={})", roleIds);
 
         if (CollectionUtils.isNotEmpty(roleIds)) {
             Set<Long> allAffectedServiceIds = new HashSet<>();
@@ -172,31 +155,32 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
             }
         }
 
-        if (logger.isDebugEnabled()) {
-            logger.debug("<== updatePolicyVersions(roleIds=" + roleIds + ")");
-        }
+        logger.debug("<== updatePolicyVersions(roleIds={})", roleIds);
     }
 
     private void updateRoleVersions(Set<Long> roleIds) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("==> updatePolicyVersions(roleIds=" + roleIds + ")");
-        }
+        logger.debug("==> updatePolicyVersions(roleIds={})", roleIds);
 
         if (CollectionUtils.isNotEmpty(roleIds)) {
             Set<Long> allAffectedServiceIds = new HashSet<>();
 
             for (Long roleId : roleIds) {
                 List<Long> affectedServiceIds = daoMgr.getXXPolicy().findServiceIdsByRoleId(roleId);
+
                 allAffectedServiceIds.addAll(affectedServiceIds);
             }
 
             XXServiceDao serviceDao = daoMgr.getXXService();
+
             if (CollectionUtils.isNotEmpty(allAffectedServiceIds)) {
                 for (final Long serviceId : allAffectedServiceIds) {
                     Runnable serviceVersionUpdater = new ServiceDBStore.ServiceVersionUpdater(daoMgr, serviceId, ServiceDBStore.VERSION_TYPE.ROLE_VERSION, null, RangerPolicyDelta.CHANGE_TYPE_ROLE_UPDATE, null);
+
                     daoMgr.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(serviceVersionUpdater);
+
                     XXService serviceDbObj = serviceDao.getById(serviceId);
                     boolean   isTagService = serviceDbObj.getType() == EmbeddedServiceDefsUtil.instance().getTagServiceDefId();
+
                     if (isTagService) {
                         updateRoleVersionOfAllServicesRefferingTag(daoMgr, serviceDao, serviceId);
                     }
@@ -204,20 +188,19 @@ public class RangerRoleService extends RangerRoleServiceBase<XXRole, RangerRole>
             }
         }
 
-        if (logger.isDebugEnabled()) {
-            logger.debug("<== updatePolicyVersions(roleIds=" + roleIds + ")");
-        }
+        logger.debug("<== updatePolicyVersions(roleIds={})", roleIds);
     }
 
     private void updateRoleVersionOfAllServicesRefferingTag(RangerDaoManager daoManager, XXServiceDao serviceDao, Long serviceId) {
         List<XXService> referringServices = serviceDao.findByTagServiceId(serviceId);
-        if(CollectionUtils.isNotEmpty(referringServices)) {
-            for(XXService referringService : referringServices) {
+
+        if (CollectionUtils.isNotEmpty(referringServices)) {
+            for (XXService referringService : referringServices) {
                 final Long referringServiceId = referringService.getId();
                 Runnable   roleVersionUpdater = new ServiceDBStore.ServiceVersionUpdater(daoManager, referringServiceId, ServiceDBStore.VERSION_TYPE.ROLE_VERSION, null, RangerPolicyDelta.CHANGE_TYPE_ROLE_UPDATE, null);
+
                 daoMgr.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(roleVersionUpdater);
             }
         }
     }
 }
-
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java
index 22867cbe5..e5832850c 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerRoleServiceBase.java
@@ -30,52 +30,45 @@ import java.util.HashMap;
 import java.util.Map;
 
 public abstract class RangerRoleServiceBase<T extends XXRole, V extends RangerRole> extends RangerAuditedModelService<T, V> {
-
     public RangerRoleServiceBase() {
         super(AppConstants.CLASS_TYPE_RANGER_ROLE);
 
         searchFields.add(new SearchField(SearchFilter.ROLE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
         searchFields.add(new SearchField(SearchFilter.ROLE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.GROUP_NAME, "xXRoleRefGroup.groupName",
-				SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXRoleRefGroup xXRoleRefGroup",
-				"xXRoleRefGroup.roleId = obj.id"));
-		searchFields.add(new SearchField(SearchFilter.USER_NAME, "xXRoleRefUser.userName", SearchField.DATA_TYPE.STRING,
-				SearchField.SEARCH_TYPE.FULL, "XXRoleRefUser xXRoleRefUser", "xXRoleRefUser.roleId = obj.id"));
-		searchFields.add(new SearchField(SearchFilter.ROLE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING,
-				SearchField.SEARCH_TYPE.PARTIAL));
-		searchFields.add(new SearchField(SearchFilter.GROUP_NAME_PARTIAL, "xXRoleRefGroup.groupName",
-				SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefGroup xXRoleRefGroup",
-				"xXRoleRefGroup.roleId = obj.id"));
-		searchFields.add(new SearchField(SearchFilter.USER_NAME_PARTIAL, "xXRoleRefUser.userName",
-				SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefUser xXRoleRefUser",
-				"xXRoleRefUser.roleId = obj.id"));
+        searchFields.add(new SearchField(SearchFilter.GROUP_NAME, "xXRoleRefGroup.groupName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXRoleRefGroup xXRoleRefGroup", "xXRoleRefGroup.roleId = obj.id"));
+        searchFields.add(new SearchField(SearchFilter.USER_NAME, "xXRoleRefUser.userName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL, "XXRoleRefUser xXRoleRefUser", "xXRoleRefUser.roleId = obj.id"));
+        searchFields.add(new SearchField(SearchFilter.ROLE_NAME_PARTIAL, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.GROUP_NAME_PARTIAL, "xXRoleRefGroup.groupName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefGroup xXRoleRefGroup", "xXRoleRefGroup.roleId = obj.id"));
+        searchFields.add(new SearchField(SearchFilter.USER_NAME_PARTIAL, "xXRoleRefUser.userName", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXRoleRefUser xXRoleRefUser", "xXRoleRefUser.roleId = obj.id"));
 
         sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
         sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
         sortFields.add(new SortField(SearchFilter.ROLE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.ROLE_NAME, "obj.name"));
 
-        trxLogAttrs.put("name",          new VTrxLogAttr("name", "Role Name", false, true));
-        trxLogAttrs.put("description",   new VTrxLogAttr("description", "Role Description"));
-        trxLogAttrs.put("options",       new VTrxLogAttr("options", "Options"));
-        trxLogAttrs.put("users",         new VTrxLogAttr("users", "Users"));
-        trxLogAttrs.put("adminUsers",    new VTrxLogAttr("adminUsers", "Admin Users"));
-        trxLogAttrs.put("groups",        new VTrxLogAttr("groups", "Groups"));
-        trxLogAttrs.put("adminGroups",   new VTrxLogAttr("adminGroups", "Admin Groups"));
-        trxLogAttrs.put("roles",         new VTrxLogAttr("roles", "Roles"));
-        trxLogAttrs.put("adminRoles",    new VTrxLogAttr("adminRoles", "Admin Roles"));
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Role Name", false, true));
+        trxLogAttrs.put("description", new VTrxLogAttr("description", "Role Description"));
+        trxLogAttrs.put("options", new VTrxLogAttr("options", "Options"));
+        trxLogAttrs.put("users", new VTrxLogAttr("users", "Users"));
+        trxLogAttrs.put("adminUsers", new VTrxLogAttr("adminUsers", "Admin Users"));
+        trxLogAttrs.put("groups", new VTrxLogAttr("groups", "Groups"));
+        trxLogAttrs.put("adminGroups", new VTrxLogAttr("adminGroups", "Admin Groups"));
+        trxLogAttrs.put("roles", new VTrxLogAttr("roles", "Roles"));
+        trxLogAttrs.put("adminRoles", new VTrxLogAttr("adminRoles", "Admin Roles"));
         trxLogAttrs.put("createdByUser", new VTrxLogAttr("createdByUser", "Created By User"));
     }
 
     @Override
-    protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
+    protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
         xObj.setName(vObj.getName());
         xObj.setDescription(vObj.getDescription());
 
         Map<String, Object> options = vObj.getOptions();
+
         if (options == null) {
             options = new HashMap<>();
         }
+
         xObj.setOptions(JsonUtils.mapToJson(options));
 
         return xObj;
@@ -89,4 +82,3 @@ public abstract class RangerRoleServiceBase<T extends XXRole, V extends RangerRo
         return vObj;
     }
 }
-
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java
index 272914db0..da5a5e4d3 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceBase.java
@@ -26,11 +26,9 @@ import org.apache.ranger.entity.XXSecurityZone;
 import org.apache.ranger.plugin.model.RangerSecurityZone;
 import org.apache.ranger.plugin.util.SearchFilter;
 
-
 public abstract class RangerSecurityZoneServiceBase<T extends XXSecurityZone, V extends RangerSecurityZone> extends RangerAuditedModelService<T, V> {
-
-	public RangerSecurityZoneServiceBase() {
-		super(AppConstants.CLASS_TYPE_RANGER_SECURITY_ZONE);
+    public RangerSecurityZoneServiceBase() {
+        super(AppConstants.CLASS_TYPE_RANGER_SECURITY_ZONE);
 
         searchFields.add(new SearchField(SearchFilter.ZONE_ID, "obj.id", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
         searchFields.add(new SearchField(SearchFilter.ZONE_NAME, "obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
@@ -40,33 +38,36 @@ public abstract class RangerSecurityZoneServiceBase<T extends XXSecurityZone, V
         sortFields.add(new SortField(SearchFilter.ZONE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.ZONE_NAME, "obj.name"));
 
-		trxLogAttrs.put("name",            new VTrxLogAttr("name", "Zone Name", false, true));
-		trxLogAttrs.put("services",        new VTrxLogAttr("services", "Zone Services"));
-		trxLogAttrs.put("adminUsers",      new VTrxLogAttr("adminUsers", "Zone Admin Users"));
-		trxLogAttrs.put("adminUserGroups", new VTrxLogAttr("adminUserGroups", "Zone Admin User Groups"));
-		trxLogAttrs.put("auditUsers",      new VTrxLogAttr("auditUsers", "Zone Audit Users"));
-		trxLogAttrs.put("auditUserGroups", new VTrxLogAttr("auditUserGroups", "Zone Audit User Groups"));
-		trxLogAttrs.put("adminRoles",      new VTrxLogAttr("adminRoles", "Zone Admin Roles"));
-		trxLogAttrs.put("auditRoles",      new VTrxLogAttr("auditRoles", "Zone Audit Roles"));
-		trxLogAttrs.put("description",     new VTrxLogAttr("description", "Zone Description"));
-		trxLogAttrs.put("tagServices",     new VTrxLogAttr("tagServices", "Zone Tag Services"));
-	}
+        trxLogAttrs.put("name", new VTrxLogAttr("name", "Zone Name", false, true));
+        trxLogAttrs.put("services", new VTrxLogAttr("services", "Zone Services"));
+        trxLogAttrs.put("adminUsers", new VTrxLogAttr("adminUsers", "Zone Admin Users"));
+        trxLogAttrs.put("adminUserGroups", new VTrxLogAttr("adminUserGroups", "Zone Admin User Groups"));
+        trxLogAttrs.put("auditUsers", new VTrxLogAttr("auditUsers", "Zone Audit Users"));
+        trxLogAttrs.put("auditUserGroups", new VTrxLogAttr("auditUserGroups", "Zone Audit User Groups"));
+        trxLogAttrs.put("adminRoles", new VTrxLogAttr("adminRoles", "Zone Admin Roles"));
+        trxLogAttrs.put("auditRoles", new VTrxLogAttr("auditRoles", "Zone Audit Roles"));
+        trxLogAttrs.put("description", new VTrxLogAttr("description", "Zone Description"));
+        trxLogAttrs.put("tagServices", new VTrxLogAttr("tagServices", "Zone Tag Services"));
+    }
+
+    @Override
+    protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+        xObj.setName(vObj.getName());
+        xObj.setDescription(vObj.getDescription());
+
+        return xObj;
+    }
+
+    @Override
+    protected V mapEntityToViewBean(V vObj, T xObj) {
+        if (xObj.getId().equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
+            vObj.setName(StringUtils.EMPTY);
+        } else {
+            vObj.setName(xObj.getName());
+        }
 
-	@Override
-	protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
-		xObj.setName(vObj.getName());
-		xObj.setDescription(vObj.getDescription());
-		return xObj;
-	}
+        vObj.setDescription(xObj.getDescription());
 
-	@Override
-	protected V mapEntityToViewBean(V vObj, T xObj) {
-		if (xObj.getId().equals(RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)) {
-			vObj.setName(StringUtils.EMPTY);
-		} else {
-			vObj.setName(xObj.getName());
-		}
-		vObj.setDescription(xObj.getDescription());
-		return vObj;
-	}
+        return vObj;
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
index 12aed36b6..18d7bf90e 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerSecurityZoneServiceService.java
@@ -17,22 +17,11 @@
 
 package org.apache.ranger.service;
 
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
-import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.authorization.utils.JsonUtils;
+import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.biz.GdsDBStore;
 import org.apache.ranger.biz.ServiceDBStore;
 import org.apache.ranger.common.view.VTrxLogAttr;
@@ -51,22 +40,31 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 @Service
 @Scope("singleton")
 public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceBase<XXSecurityZone, RangerSecurityZone> {
-	@Autowired
-	ServiceDBStore serviceDBStore;
-
-    @Autowired
-    GdsDBStore gdsStore;
+    private static final Logger logger = LoggerFactory.getLogger(RangerSecurityZoneServiceService.class);
 
-    boolean compressJsonData = false;
+    private final Map<Long, Set<String>> serviceNamesInZones    = new HashMap<>();
+    private final Map<Long, Set<String>> tagServiceNamesInZones = new HashMap<>();
 
-    private static final Logger logger = LoggerFactory.getLogger(RangerSecurityZoneServiceService.class);
+    @Autowired
+    ServiceDBStore serviceDBStore;
 
-    private Map<Long, Set<String>> serviceNamesInZones = new HashMap<>();
-    private Map<Long, Set<String>> tagServiceNamesInZones = new HashMap<>();
+    @Autowired
+    GdsDBStore gdsStore;
 
+    boolean compressJsonData;
 
     public RangerSecurityZoneServiceService() {
         super();
@@ -74,9 +72,7 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
 
     @PostConstruct
     public void initService() {
-        if (logger.isDebugEnabled()) {
-            logger.debug("==> RangerSecurityZoneServiceService.initService()");
-        }
+        logger.debug("==> RangerSecurityZoneServiceService.initService()");
 
         RangerAdminConfig config = RangerAdminConfig.getInstance();
 
@@ -84,94 +80,16 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
 
         logger.info("ranger.admin.store.security.zone.compress.json_data={}", compressJsonData);
 
-        if (logger.isDebugEnabled()) {
-            logger.debug("<== RangerSecurityZoneServiceService.initService()");
-        }
-    }
-
-    @Override
-    protected void validateForCreate(RangerSecurityZone vObj) {
-    }
-
-    @Override
-    protected void validateForUpdate(RangerSecurityZone vObj, XXSecurityZone entityObj) {
-        // Cache service-names in existing zone object
-        RangerSecurityZone existingZone = new RangerSecurityZone();
-        existingZone = mapEntityToViewBean(existingZone, entityObj);
-        serviceNamesInZones.put(entityObj.getId(), existingZone.getServices().keySet());
-        tagServiceNamesInZones.put(entityObj.getId(), new HashSet<>(existingZone.getTagServices()));
-    }
-
-    @Override
-    protected XXSecurityZone mapViewToEntityBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone, int OPERATION_CONTEXT) {
-        XXSecurityZone ret = super.mapViewToEntityBean(securityZone, xxSecurityZone, OPERATION_CONTEXT);
-
-        String json = JsonUtils.objectToJson(securityZone);
-
-        if (StringUtils.isNotEmpty(json) && compressJsonData) {
-            try {
-                ret.setJsonData(null);
-                ret.setGzJsonData(StringUtil.gzipCompress(json));
-            } catch (IOException excp) {
-                logger.error("mapViewToEntityBean(): json compression failed (length="+json.length()+"). Will save uncompressed json", excp);
-
-                ret.setJsonData(json);
-                ret.setGzJsonData(null);
-            }
-        } else {
-            ret.setJsonData(json);
-            ret.setGzJsonData(null);
-        }
-
-        return ret;
-    }
-    @Override
-    protected RangerSecurityZone mapEntityToViewBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone) {
-        RangerSecurityZone ret    = super.mapEntityToViewBean(securityZone, xxSecurityZone);
-        byte[]             gzJson = xxSecurityZone.getGzJsonData();
-        String             json;
-
-        if (gzJson != null) {
-            try {
-                json = StringUtil.gzipDecompress(gzJson);
-            } catch (IOException excp) {
-                json = xxSecurityZone.getJsonData();
-
-                logger.error("mapEntityToViewBean(): decompression of x_security_zone.gz_jsonData failed (length={}). Will use contents of x_security_zone.jsonData (length={})", gzJson.length, (json != null ? json.length() : 0), excp);
-            }
-        } else {
-            json = xxSecurityZone.getJsonData();
-        }
-
-        if (StringUtils.isNotEmpty(json)) {
-            RangerSecurityZone zoneFromJsonData = JsonUtils.jsonToObject(json, RangerSecurityZone.class);
-
-            if (zoneFromJsonData != null) {
-                ret.setName(zoneFromJsonData.getName());
-                ret.setServices(zoneFromJsonData.getServices());
-                ret.setAdminUsers(zoneFromJsonData.getAdminUsers());
-                ret.setAdminUserGroups(zoneFromJsonData.getAdminUserGroups());
-                ret.setAdminRoles(zoneFromJsonData.getAdminRoles());
-                ret.setAuditUsers(zoneFromJsonData.getAuditUsers());
-                ret.setAuditUserGroups(zoneFromJsonData.getAuditUserGroups());
-                ret.setAuditRoles(zoneFromJsonData.getAuditRoles());
-                ret.setTagServices(zoneFromJsonData.getTagServices());
-            }
-        } else {
-            logger.info("Empty string representing jsonData in [" + xxSecurityZone + "]!!");
-        }
-
-        return ret;
+        logger.debug("<== RangerSecurityZoneServiceService.initService()");
     }
 
     @Override
     public RangerSecurityZone postCreate(XXSecurityZone xObj) {
         // Ensure to update ServiceVersionInfo for each service in the zone
 
-        RangerSecurityZone ret = super.postCreate(xObj);
-        Set<String> serviceNames = ret.getServices().keySet();
-
-        List<String> tagServiceNames = ret.getTagServices();
+        RangerSecurityZone ret             = super.postCreate(xObj);
+        Set<String>        serviceNames    = ret.getServices().keySet();
+        List<String>       tagServiceNames = ret.getTagServices();
 
         // Create default zone policies
         try {
@@ -181,25 +99,25 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
             serviceDBStore.createZoneDefaultPolicies(tagServiceNames, ret);
             updateServiceInfos(tagServiceNames);
         } catch (Exception exception) {
-            logger.error("postCreate processing failed for security-zone:[" + ret + "]", exception);
+            logger.error("postCreate processing failed for security-zone:[{}]", ret, exception);
             ret = null;
         }
 
         return ret;
     }
 
-        @Override
+    @Override
     public RangerSecurityZone postUpdate(XXSecurityZone xObj) {
         // Update ServiceVersionInfo for all affected services
         RangerSecurityZone ret = super.postUpdate(xObj);
 
-        Set<String> oldServiceNames = new HashSet(serviceNamesInZones.remove(xObj.getId()));
+        Set<String> oldServiceNames     = new HashSet<>(serviceNamesInZones.remove(xObj.getId()));
         Set<String> updatedServiceNames = ret.getServices().keySet();
 
-        Set<String> oldTagServiceNames = new HashSet(tagServiceNamesInZones.remove(xObj.getId()));
-        Set<String> updatedTagServiceNames = new HashSet<String>(ret.getTagServices());
+        Set<String> oldTagServiceNames     = new HashSet<>(tagServiceNamesInZones.remove(xObj.getId()));
+        Set<String> updatedTagServiceNames = new HashSet<>(ret.getTagServices());
 
-        Collection<String> newServiceNames = CollectionUtils.subtract(updatedServiceNames, oldServiceNames);
+        Collection<String> newServiceNames     = CollectionUtils.subtract(updatedServiceNames, oldServiceNames);
         Collection<String> deletedServiceNames = CollectionUtils.subtract(oldServiceNames, updatedServiceNames);
 
         Collection<String> deletedTagServiceNames = CollectionUtils.subtract(oldTagServiceNames, updatedTagServiceNames);
@@ -215,16 +133,31 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
             oldServiceNames.addAll(updatedServiceNames);
             updateServiceInfos(oldServiceNames);
         } catch (Exception exception) {
-            logger.error("postUpdate processing failed for security-zone:[" + ret + "]", exception);
+            logger.error("postUpdate processing failed for security-zone:[{}]", ret, exception);
+
             ret = null;
         }
+
         return ret;
     }
 
+    @Override
+    protected void validateForCreate(RangerSecurityZone vObj) {
+    }
+
+    @Override
+    protected void validateForUpdate(RangerSecurityZone vObj, XXSecurityZone entityObj) {
+        // Cache service-names in existing zone object
+        RangerSecurityZone existingZone = new RangerSecurityZone();
+        existingZone = mapEntityToViewBean(existingZone, entityObj);
+        serviceNamesInZones.put(entityObj.getId(), existingZone.getServices().keySet());
+        tagServiceNamesInZones.put(entityObj.getId(), new HashSet<>(existingZone.getTagServices()));
+    }
+
     @Override
     public XXSecurityZone preDelete(Long id) {
         // Update ServiceVersionInfo for each service in the zone
-        XXSecurityZone ret = super.preDelete(id);
+        XXSecurityZone     ret        = super.preDelete(id);
         RangerSecurityZone viewObject = new RangerSecurityZone();
         viewObject = mapEntityToViewBean(viewObject, ret);
         Set<String> allServiceNames = new HashSet<>(viewObject.getTagServices());
@@ -237,7 +170,7 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
             gdsStore.deleteAllGdsObjectsForSecurityZone(id);
             updateServiceInfos(allServiceNames);
         } catch (Exception exception) {
-            logger.error("preDelete processing failed for security-zone:[" + viewObject + "]", exception);
+            logger.error("preDelete processing failed for security-zone:[{}]", viewObject, exception);
             ret = null;
         }
 
@@ -256,8 +189,11 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
                 RangerSecurityZoneService service        = entry.getValue();
                 int                       resourceCount  = service != null && service.getResources() != null ? service.getResources().size() : 0;
                 RangerSecurityZoneService serviceSummary = new RangerSecurityZoneService();
-
-                serviceSummary.getResources().add((new HashMap<String, List<String>>() {{ put("resourceCount", Collections.singletonList(Integer.toString(resourceCount))); }}));
+                serviceSummary.getResources().add((new HashMap<String, List<String>>() {
+                    {
+                        put("resourceCount", Collections.singletonList(Integer.toString(resourceCount)));
+                    }
+                }));
 
                 servicesSummary.put(serviceName, serviceSummary);
             }
@@ -278,8 +214,70 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
         return ret;
     }
 
+    @Override
+    protected XXSecurityZone mapViewToEntityBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone, int operationContext) {
+        XXSecurityZone ret  = super.mapViewToEntityBean(securityZone, xxSecurityZone, operationContext);
+        String         json = JsonUtils.objectToJson(securityZone);
+
+        if (StringUtils.isNotEmpty(json) && compressJsonData) {
+            try {
+                ret.setJsonData(null);
+                ret.setGzJsonData(StringUtil.gzipCompress(json));
+            } catch (IOException excp) {
+                logger.error("mapViewToEntityBean(): json compression failed (length={}). Will save uncompressed json", json.length(), excp);
+
+                ret.setJsonData(json);
+                ret.setGzJsonData(null);
+            }
+        } else {
+            ret.setJsonData(json);
+            ret.setGzJsonData(null);
+        }
+
+        return ret;
+    }
+
+    @Override
+    protected RangerSecurityZone mapEntityToViewBean(RangerSecurityZone securityZone, XXSecurityZone xxSecurityZone) {
+        RangerSecurityZone ret    = super.mapEntityToViewBean(securityZone, xxSecurityZone);
+        byte[]             gzJson = xxSecurityZone.getGzJsonData();
+        String             json;
+
+        if (gzJson != null) {
+            try {
+                json = StringUtil.gzipDecompress(gzJson);
+            } catch (IOException excp) {
+                json = xxSecurityZone.getJsonData();
+
+                logger.error("mapEntityToViewBean(): decompression of x_security_zone.gz_jsonData failed (length={}). Will use contents of x_security_zone.jsonData (length={})", gzJson.length, (json != null ? json.length() : 0), excp);
+            }
+        } else {
+            json = xxSecurityZone.getJsonData();
+        }
+
+        if (StringUtils.isNotEmpty(json)) {
+            RangerSecurityZone zoneFromJsonData = JsonUtils.jsonToObject(json, RangerSecurityZone.class);
+
+            if (zoneFromJsonData != null) {
+                ret.setName(zoneFromJsonData.getName());
+                ret.setServices(zoneFromJsonData.getServices());
+                ret.setAdminUsers(zoneFromJsonData.getAdminUsers());
+                ret.setAdminUserGroups(zoneFromJsonData.getAdminUserGroups());
+                ret.setAdminRoles(zoneFromJsonData.getAdminRoles());
+                ret.setAuditUsers(zoneFromJsonData.getAuditUsers());
+                ret.setAuditUserGroups(zoneFromJsonData.getAuditUserGroups());
+                ret.setAuditRoles(zoneFromJsonData.getAuditRoles());
+                ret.setTagServices(zoneFromJsonData.getTagServices());
+            }
+        } else {
+            logger.info("Empty string representing jsonData in [{}]!!", xxSecurityZone);
+        }
+
+        return ret;
+    }
+
     private void updateServiceInfos(Collection<String> services) {
-        if(CollectionUtils.isEmpty(services)) {
+        if (CollectionUtils.isEmpty(services)) {
             return;
         }
 
@@ -289,15 +287,14 @@ public class RangerSecurityZoneServiceService extends RangerSecurityZoneServiceB
             serviceVersionInfos.add(daoMgr.getXXServiceVersionInfo().findByServiceName(serviceName));
         }
 
-        for(XXServiceVersionInfo serviceVersionInfo : serviceVersionInfos) {
-            final RangerDaoManager finaldaoManager 		  = daoMgr;
-            final Long 		       finalServiceId  		  = serviceVersionInfo.getServiceId();
-            final ServiceDBStore.VERSION_TYPE versionType = ServiceDBStore.VERSION_TYPE.POLICY_VERSION;
+        for (XXServiceVersionInfo serviceVersionInfo : serviceVersionInfos) {
+            final RangerDaoManager            finaldaoManager = daoMgr;
+            final Long                        finalServiceId  = serviceVersionInfo.getServiceId();
+            final ServiceDBStore.VERSION_TYPE versionType     = ServiceDBStore.VERSION_TYPE.POLICY_VERSION;
 
             Runnable serviceVersionUpdater = new ServiceDBStore.ServiceVersionUpdater(finaldaoManager, finalServiceId, versionType, null, RangerPolicyDelta.CHANGE_TYPE_SERVICE_CHANGE, null);
 
             daoMgr.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(serviceVersionUpdater);
         }
-
     }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
index 3fb3dea40..6966c44d8 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefService.java
@@ -17,10 +17,6 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
 import org.apache.ranger.entity.XXServiceDef;
@@ -29,73 +25,80 @@ import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 @Service
 @Scope("singleton")
 public class RangerServiceDefService extends RangerServiceDefServiceBase<XXServiceDef, RangerServiceDef> {
-	private final RangerAdminConfig config;
-
-	public RangerServiceDefService() {
-		super();
-
-		this.config = RangerAdminConfig.getInstance();
-	}
-
-	@Override
-	protected void validateForCreate(RangerServiceDef vObj) {
-
-	}
-
-	@Override
-	protected void validateForUpdate(RangerServiceDef vObj, XXServiceDef entityObj) {
-
-	}
-
-	@Override
-	protected XXServiceDef mapViewToEntityBean(RangerServiceDef vObj, XXServiceDef xObj, int OPERATION_CONTEXT) {
-		return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
-	}
-
-	@Override
-	protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDef xObj) {
-		RangerServiceDef ret =  super.mapEntityToViewBean(vObj, xObj);
-
-		Map<String, String> serviceDefOptions = ret.getOptions();
-
-		if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES) == null) {
-			boolean enableDenyAndExceptionsInPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableDenyAndExceptionsInPolicies", true);
-			if (enableDenyAndExceptionsInPoliciesHiddenOption || StringUtils.equalsIgnoreCase(ret.getName(), EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
-				serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "true");
-			} else {
-				serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "false");
-			}
-			ret.setOptions(serviceDefOptions);
-		}
-
-		if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES) == null) {
-			boolean enableTagBasedPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableTagBasedPolicies", true);
-			if (enableTagBasedPoliciesHiddenOption) {
-				serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "true");
-			} else {
-				serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "false");
-			}
-			ret.setOptions(serviceDefOptions);
-		}
-		return ret;
-	}
-
-	public List<RangerServiceDef> getAllServiceDefs() {
-		List<XXServiceDef> xxServiceDefList = getDao().getAll();
-		List<RangerServiceDef> serviceDefList = new ArrayList<RangerServiceDef>();
-
-		for (XXServiceDef xxServiceDef : xxServiceDefList) {
-			RangerServiceDef serviceDef = populateViewBean(xxServiceDef);
-			serviceDefList.add(serviceDef);
-		}
-		return serviceDefList;
-	}
-
-	public RangerServiceDef getPopulatedViewObject(XXServiceDef xServiceDef) {
-		return this.populateViewBean(xServiceDef);
-	}
+    private final RangerAdminConfig config;
+
+    public RangerServiceDefService() {
+        super();
+
+        this.config = RangerAdminConfig.getInstance();
+    }
+
+    public List<RangerServiceDef> getAllServiceDefs() {
+        List<XXServiceDef>     xxServiceDefList = getDao().getAll();
+        List<RangerServiceDef> serviceDefList   = new ArrayList<>();
+
+        for (XXServiceDef xxServiceDef : xxServiceDefList) {
+            RangerServiceDef serviceDef = populateViewBean(xxServiceDef);
+
+            serviceDefList.add(serviceDef);
+        }
+
+        return serviceDefList;
+    }
+
+    public RangerServiceDef getPopulatedViewObject(XXServiceDef xServiceDef) {
+        return this.populateViewBean(xServiceDef);
+    }
+
+    @Override
+    protected void validateForCreate(RangerServiceDef vObj) {
+    }
+
+    @Override
+    protected void validateForUpdate(RangerServiceDef vObj, XXServiceDef entityObj) {
+    }
+
+    @Override
+    protected XXServiceDef mapViewToEntityBean(RangerServiceDef vObj, XXServiceDef xObj, int operationContext) {
+        return super.mapViewToEntityBean(vObj, xObj, operationContext);
+    }
+
+    @Override
+    protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDef xObj) {
+        RangerServiceDef    ret               = super.mapEntityToViewBean(vObj, xObj);
+        Map<String, String> serviceDefOptions = ret.getOptions();
+
+        if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES) == null) {
+            boolean enableDenyAndExceptionsInPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableDenyAndExceptionsInPolicies", true);
+
+            if (enableDenyAndExceptionsInPoliciesHiddenOption || StringUtils.equalsIgnoreCase(ret.getName(), EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
+                serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "true");
+            } else {
+                serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_DENY_AND_EXCEPTIONS_IN_POLICIES, "false");
+            }
+
+            ret.setOptions(serviceDefOptions);
+        }
+
+        if (serviceDefOptions.get(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES) == null) {
+            boolean enableTagBasedPoliciesHiddenOption = config.getBoolean("ranger.servicedef.enableTagBasedPolicies", true);
+
+            if (enableTagBasedPoliciesHiddenOption) {
+                serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "true");
+            } else {
+                serviceDefOptions.put(RangerServiceDef.OPTION_ENABLE_TAG_BASED_POLICIES, "false");
+            }
+
+            ret.setOptions(serviceDefOptions);
+        }
+
+        return ret;
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
index a0ba463e4..9e082977f 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
@@ -17,14 +17,6 @@
 
 package org.apache.ranger.service;
 
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.AppConstants;
@@ -33,10 +25,19 @@ import org.apache.ranger.common.JSONUtil;
 import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.PropertiesUtil;
 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.*;
+import org.apache.ranger.common.SortField;
+import org.apache.ranger.entity.XXAccessTypeDef;
+import org.apache.ranger.entity.XXContextEnricherDef;
+import org.apache.ranger.entity.XXDataMaskTypeDef;
+import org.apache.ranger.entity.XXEnumDef;
+import org.apache.ranger.entity.XXEnumElementDef;
+import org.apache.ranger.entity.XXPolicyConditionDef;
+import org.apache.ranger.entity.XXResourceDef;
+import org.apache.ranger.entity.XXServiceConfigDef;
+import org.apache.ranger.entity.XXServiceDef;
+import org.apache.ranger.entity.XXServiceDefBase;
 import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.model.RangerServiceDef.RangerAccessTypeDef;
 import org.apache.ranger.plugin.model.RangerServiceDef.RangerAccessTypeDef.AccessTypeCategory;
@@ -56,728 +57,779 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import static org.apache.ranger.plugin.util.ServiceDefUtil.IMPLICIT_CONDITION_EXPRESSION_EVALUATOR;
 
-public abstract class RangerServiceDefServiceBase<T extends XXServiceDefBase, V extends RangerServiceDef>
-		extends RangerBaseModelService<T, V> {
-	private static final Logger LOG = LoggerFactory.getLogger(RangerServiceDefServiceBase.class);
-
-	private static final String OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS = "__accessTypeRestrictions";
-	private static final String OPTION_RESOURCE_IS_VALID_LEAF            = "__isValidLeaf";
-	public static final String PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION = "ranger.servicedef.enableImplicitConditionExpression";
-
-	@Autowired
-	RangerAuditFields<?> rangerAuditFields;
-
-	@Autowired
-	JSONUtil jsonUtil;
-	
-	@Autowired
-	GUIDUtil guidUtil;
-
-	public RangerServiceDefServiceBase() {
-		super();
-
-		searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_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_TYPE_ID, "obj.id"));
-		sortFields.add(new SortField(SearchFilter.SERVICE_TYPE, "obj.name"));
-		sortFields.add(new SortField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName"));
-	}
-
-	@Override
-	protected V populateViewBean(T xServiceDef) {
-		V serviceDef = super.populateViewBean((T) xServiceDef);
-		Long serviceDefId = xServiceDef.getId();
-
-		List<XXServiceConfigDef> xConfigs = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xConfigs)) {
-			List<RangerServiceConfigDef> configs = new ArrayList<RangerServiceConfigDef>();
-			for (XXServiceConfigDef xConfig : xConfigs) {
-				RangerServiceConfigDef config = populateXXToRangerServiceConfigDef(xConfig);
-				configs.add(config);
-			}
-			serviceDef.setConfigs(configs);
-		}
-
-		List<XXResourceDef> xResources = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xResources)) {
-			List<RangerResourceDef> resources = new ArrayList<RangerResourceDef>();
-			for (XXResourceDef xResource : xResources) {
-				RangerResourceDef resource = populateXXToRangerResourceDef(xResource);
-				resources.add(resource);
-			}
-			serviceDef.setResources(resources);
-		}
-
-		List<XXAccessTypeDef>     xAccessTypes  = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId);
-		Map<String, List<String>> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xAccessTypes)) {
-			List<RangerAccessTypeDef> accessTypes = new ArrayList<RangerAccessTypeDef>();
-			for (XXAccessTypeDef xAtd : xAccessTypes) {
-				RangerAccessTypeDef accessType = populateXXToRangerAccessTypeDef(xAtd, impliedGrants.get(xAtd.getName()));
-				accessTypes.add(accessType);
-			}
-			serviceDef.setAccessTypes(accessTypes);
-		}
-
-		serviceDef.setMarkerAccessTypes(ServiceDefUtil.getMarkerAccessTypes(serviceDef.getAccessTypes()));
-
-		List<XXPolicyConditionDef> xPolicyConditions = daoMgr.getXXPolicyConditionDef()
-				.findByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xPolicyConditions)) {
-			List<RangerPolicyConditionDef> policyConditions = new ArrayList<RangerPolicyConditionDef>();
-			for (XXPolicyConditionDef xPolicyCondDef : xPolicyConditions) {
-				RangerPolicyConditionDef policyCondition = populateXXToRangerPolicyConditionDef(xPolicyCondDef);
-				policyConditions.add(policyCondition);
-			}
-			serviceDef.setPolicyConditions(policyConditions);
-		}
-
-		List<XXContextEnricherDef> xContextEnrichers = daoMgr.getXXContextEnricherDef()
-				.findByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xContextEnrichers)) {
-			List<RangerContextEnricherDef> contextEnrichers = new ArrayList<RangerContextEnricherDef>();
-			for (XXContextEnricherDef xContextEnricherDef : xContextEnrichers) {
-				RangerContextEnricherDef contextEnricher = populateXXToRangerContextEnricherDef(xContextEnricherDef);
-				contextEnrichers.add(contextEnricher);
-			}
-			serviceDef.setContextEnrichers(contextEnrichers);
-		}
-
-		List<XXEnumDef> xEnumList = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xEnumList)) {
-			List<RangerEnumDef> enums = new ArrayList<RangerEnumDef>();
-			for (XXEnumDef xEnum : xEnumList) {
-				RangerEnumDef vEnum = populateXXToRangerEnumDef(xEnum);
-				enums.add(vEnum);
-			}
-			serviceDef.setEnums(enums);
-		}
-
-		RangerDataMaskDef  dataMaskDef  = new RangerDataMaskDef();
-		RangerRowFilterDef rowFilterDef = new RangerRowFilterDef();
-
-		List<XXDataMaskTypeDef> xDataMaskTypes = daoMgr.getXXDataMaskTypeDef().findByServiceDefId(serviceDefId);
-		if (!stringUtil.isEmpty(xDataMaskTypes)) {
-			List<RangerDataMaskTypeDef> dataMaskTypes = new ArrayList<RangerDataMaskTypeDef>();
-			for (XXDataMaskTypeDef xDataMaskType : xDataMaskTypes) {
-				RangerDataMaskTypeDef dataMaskType = populateXXToRangerDataMaskTypeDef(xDataMaskType);
-				dataMaskTypes.add(dataMaskType);
-			}
-
-			dataMaskDef.setMaskTypes(dataMaskTypes);
-		}
-
-		if (!stringUtil.isEmpty(xResources)) {
-			for (XXResourceDef xResource : xResources) {
-				if (StringUtils.isNotEmpty(xResource.getDataMaskOptions())) {
-					RangerResourceDef dataMaskResource = jsonToObject(xResource.getDataMaskOptions(), RangerResourceDef.class);
-
-					dataMaskDef.getResources().add(dataMaskResource);
-				}
-
-				if (StringUtils.isNotEmpty(xResource.getRowFilterOptions())) {
-					RangerResourceDef resource = jsonToObject(xResource.getRowFilterOptions(), RangerResourceDef.class);
-
-					rowFilterDef.getResources().add(resource);
-				}
-			}
-		}
-
-		if (!stringUtil.isEmpty(xAccessTypes)) {
-			for (XXAccessTypeDef xAtd : xAccessTypes) {
-				if(StringUtils.isNotEmpty(xAtd.getDataMaskOptions())) {
-					RangerAccessTypeDef dataMaskAccessType = jsonToObject(xAtd.getDataMaskOptions(), RangerAccessTypeDef.class);
-
-					dataMaskDef.getAccessTypes().add(dataMaskAccessType);
-				}
-
-				if(StringUtils.isNotEmpty(xAtd.getRowFilterOptions())) {
-					RangerAccessTypeDef accessType = jsonToObject(xAtd.getRowFilterOptions(), RangerAccessTypeDef.class);
-
-					rowFilterDef.getAccessTypes().add(accessType);
-				}
-			}
-		}
-		serviceDef.setDataMaskDef(dataMaskDef);
-		serviceDef.setRowFilterDef(rowFilterDef);
-
-		addImplicitConditionExpressionIfNeeded(serviceDef);
-
-		ServiceDefUtil.normalize(serviceDef);
-
-		return serviceDef;
-	}
-
-	@Override
-	protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
-
-		String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
-
-		xObj.setGuid(guid);
-		xObj.setName(vObj.getName());
-		xObj.setDisplayName(vObj.getDisplayName());
-		xObj.setImplclassname(vObj.getImplClass());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setDescription(vObj.getDescription());
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setRbkeydescription(vObj.getRbKeyDescription());
-		xObj.setIsEnabled(vObj.getIsEnabled());
-
-		xObj.setDefOptions(mapToJsonString(vObj.getOptions()));
-
-		return xObj;
-	}
-
-	@Override
-	protected V mapEntityToViewBean(V vObj, T xObj) {
-		vObj.setGuid(xObj.getGuid());
-		vObj.setVersion(xObj.getVersion());
-		vObj.setName(xObj.getName());
-		vObj.setImplClass(xObj.getImplclassname());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setDescription(xObj.getDescription());
-		vObj.setOptions(jsonStringToMap(xObj.getDefOptions()));
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		vObj.setRbKeyDescription(xObj.getRbkeydescription());
-		vObj.setIsEnabled(xObj.getIsEnabled());
-		vObj.setDisplayName(xObj.getDisplayName());
-		return vObj;
-	}
-
-	public XXServiceConfigDef populateRangerServiceConfigDefToXX(RangerServiceConfigDef vObj, XXServiceConfigDef xObj,
-			XXServiceDef serviceDef, int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerServiceConfigDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-		
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setType(vObj.getType());
-		xObj.setSubtype(vObj.getSubType());
-		xObj.setIsMandatory(vObj.getMandatory());
-		xObj.setDefaultvalue(vObj.getDefaultValue());
-		xObj.setValidationRegEx(vObj.getValidationRegEx());
-		xObj.setValidationMessage(vObj.getValidationMessage());
-		xObj.setUiHint(vObj.getUiHint());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setDescription(vObj.getDescription());
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setRbkeydescription(vObj.getRbKeyDescription());
-		xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-		return xObj;
-	}
-
-	public RangerServiceConfigDef populateXXToRangerServiceConfigDef(XXServiceConfigDef xObj) {
-		RangerServiceConfigDef vObj = new RangerServiceConfigDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setType(xObj.getType());
-		vObj.setSubType(xObj.getSubtype());
-		vObj.setMandatory(xObj.getIsMandatory());
-		vObj.setDefaultValue(xObj.getDefaultvalue());
-		vObj.setValidationRegEx(xObj.getValidationRegEx());
-		vObj.setValidationMessage(xObj.getValidationMessage());
-		vObj.setUiHint(xObj.getUiHint());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setDescription(xObj.getDescription());
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		vObj.setRbKeyDescription(xObj.getRbkeydescription());
-		vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
-		return vObj;
-	}
-	
-	public XXResourceDef populateRangerResourceDefToXX(RangerResourceDef vObj, XXResourceDef xObj,
-			XXServiceDef serviceDef, int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerResourceDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-		
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setType(vObj.getType());
-		xObj.setLevel(vObj.getLevel());
-		xObj.setMandatory(vObj.getMandatory());
-		xObj.setLookupsupported(vObj.getLookupSupported());
-		xObj.setRecursivesupported(vObj.getRecursiveSupported());
-		xObj.setExcludessupported(vObj.getExcludesSupported());
-		xObj.setMatcher(vObj.getMatcher());
-
-		String              accessTypeRestrictions = objectToJson((HashSet<String>)vObj.getAccessTypeRestrictions());
-		String              isValidLeaf            = objectToJson(vObj.getIsValidLeaf());
-		Map<String, String> matcherOptions         = vObj.getMatcherOptions();
-
-		if (StringUtils.isNotBlank(accessTypeRestrictions)) {
-			matcherOptions.put(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS, accessTypeRestrictions);
-		} else {
-			matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
-		}
-
-		if (StringUtils.isNotBlank(isValidLeaf)) {
-			matcherOptions.put(OPTION_RESOURCE_IS_VALID_LEAF, isValidLeaf);
-		} else {
-			matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
-		}
+public abstract class RangerServiceDefServiceBase<T extends XXServiceDefBase, V extends RangerServiceDef> extends RangerBaseModelService<T, V> {
+    private static final Logger LOG = LoggerFactory.getLogger(RangerServiceDefServiceBase.class);
+
+    public static final String PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION = "ranger.servicedef.enableImplicitConditionExpression";
+
+    private static final String OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS  = "__accessTypeRestrictions";
+    private static final String OPTION_RESOURCE_IS_VALID_LEAF             = "__isValidLeaf";
+
+    @Autowired
+    RangerAuditFields<?> rangerAuditFields;
+
+    @Autowired
+    JSONUtil jsonUtil;
+
+    @Autowired
+    GUIDUtil guidUtil;
+
+    public RangerServiceDefServiceBase() {
+        super();
+
+        searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.SERVICE_TYPE_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_TYPE_ID, "obj.id"));
+        sortFields.add(new SortField(SearchFilter.SERVICE_TYPE, "obj.name"));
+        sortFields.add(new SortField(SearchFilter.SERVICE_TYPE_DISPLAY_NAME, "obj.displayName"));
+    }
+
+    public XXServiceConfigDef populateRangerServiceConfigDefToXX(RangerServiceConfigDef vObj, XXServiceConfigDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerServiceConfigDefToXX, serviceDef can not be null");
+
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setType(vObj.getType());
+        xObj.setSubtype(vObj.getSubType());
+        xObj.setIsMandatory(vObj.getMandatory());
+        xObj.setDefaultvalue(vObj.getDefaultValue());
+        xObj.setValidationRegEx(vObj.getValidationRegEx());
+        xObj.setValidationMessage(vObj.getValidationMessage());
+        xObj.setUiHint(vObj.getUiHint());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setRbkeydescription(vObj.getRbKeyDescription());
+        xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        return xObj;
+    }
+
+    public RangerServiceConfigDef populateXXToRangerServiceConfigDef(XXServiceConfigDef xObj) {
+        RangerServiceConfigDef vObj = new RangerServiceConfigDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setType(xObj.getType());
+        vObj.setSubType(xObj.getSubtype());
+        vObj.setMandatory(xObj.getIsMandatory());
+        vObj.setDefaultValue(xObj.getDefaultvalue());
+        vObj.setValidationRegEx(xObj.getValidationRegEx());
+        vObj.setValidationMessage(xObj.getValidationMessage());
+        vObj.setUiHint(xObj.getUiHint());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+        vObj.setRbKeyDescription(xObj.getRbkeydescription());
+        vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
+
+        return vObj;
+    }
+
+    public XXResourceDef populateRangerResourceDefToXX(RangerResourceDef vObj, XXResourceDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerResourceDefToXX, serviceDef can not be null");
+
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setType(vObj.getType());
+        xObj.setLevel(vObj.getLevel());
+        xObj.setMandatory(vObj.getMandatory());
+        xObj.setLookupsupported(vObj.getLookupSupported());
+        xObj.setRecursivesupported(vObj.getRecursiveSupported());
+        xObj.setExcludessupported(vObj.getExcludesSupported());
+        xObj.setMatcher(vObj.getMatcher());
+
+        String              accessTypeRestrictions = objectToJson((HashSet<String>) vObj.getAccessTypeRestrictions());
+        String              isValidLeaf            = objectToJson(vObj.getIsValidLeaf());
+        Map<String, String> matcherOptions         = vObj.getMatcherOptions();
+
+        if (StringUtils.isNotBlank(accessTypeRestrictions)) {
+            matcherOptions.put(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS, accessTypeRestrictions);
+        } else {
+            matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
+        }
+
+        if (StringUtils.isNotBlank(isValidLeaf)) {
+            matcherOptions.put(OPTION_RESOURCE_IS_VALID_LEAF, isValidLeaf);
+        } else {
+            matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
+        }
 
         xObj.setMatcheroptions(mapToJsonString(matcherOptions));
+        xObj.setValidationRegEx(vObj.getValidationRegEx());
+        xObj.setValidationMessage(vObj.getValidationMessage());
+        xObj.setUiHint(vObj.getUiHint());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setRbkeydescription(vObj.getRbKeyDescription());
+        xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        return xObj;
+    }
+
+    public RangerResourceDef populateXXToRangerResourceDef(XXResourceDef xObj) {
+        RangerResourceDef vObj = new RangerResourceDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setType(xObj.getType());
+        vObj.setLevel(xObj.getLevel());
+        vObj.setMandatory(xObj.getMandatory());
+        vObj.setLookupSupported(xObj.getLookupsupported());
+        vObj.setRecursiveSupported(xObj.getRecursivesupported());
+        vObj.setExcludesSupported(xObj.getExcludessupported());
+        vObj.setMatcher(xObj.getMatcher());
+
+        Map<String, String> matcherOptions = jsonStringToMap(xObj.getMatcheroptions());
+
+        if (MapUtils.isNotEmpty(matcherOptions)) {
+            String optionAccessTypeRestrictions = matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
+            String optionIsValidLeaf            = matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
+
+            if (StringUtils.isNotBlank(optionAccessTypeRestrictions)) {
+                Set<String> accessTypeRestrictions = new HashSet<>();
+
+                accessTypeRestrictions = jsonToObject(optionAccessTypeRestrictions, accessTypeRestrictions.getClass());
+
+                vObj.setAccessTypeRestrictions(accessTypeRestrictions);
+            }
+
+            if (StringUtils.isNotBlank(optionIsValidLeaf)) {
+                Boolean isValidLeaf = jsonToObject(optionIsValidLeaf, Boolean.class);
+
+                vObj.setIsValidLeaf(isValidLeaf);
+            }
+        }
+
+        vObj.setMatcherOptions(matcherOptions);
+        vObj.setValidationRegEx(xObj.getValidationRegEx());
+        vObj.setValidationMessage(xObj.getValidationMessage());
+        vObj.setUiHint(xObj.getUiHint());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+        vObj.setRbKeyDescription(xObj.getRbkeydescription());
+        vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
+
+        XXResourceDef parent     = daoMgr.getXXResourceDef().getById(xObj.getParent());
+        String        parentName = (parent != null) ? parent.getName() : null;
+
+        vObj.setParent(parentName);
+
+        return vObj;
+    }
+
+    public XXAccessTypeDef populateRangerAccessTypeDefToXX(RangerAccessTypeDef vObj, XXAccessTypeDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerAccessTypeDefToXX, serviceDef can not be null");
+
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        if (vObj.getCategory() != null) {
+            xObj.setCategory((short) vObj.getCategory().ordinal());
+        }
+
+        return xObj;
+    }
+
+    public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj) {
+        List<String> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByATDId(xObj.getId());
+
+        return populateXXToRangerAccessTypeDef(xObj, impliedGrants);
+    }
+
+    public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj, List<String> impliedGrants) {
+        RangerAccessTypeDef vObj = new RangerAccessTypeDef();
+
+        if (impliedGrants == null) {
+            impliedGrants = new ArrayList<>();
+        }
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+        vObj.setImpliedGrants(impliedGrants);
+
+        if (xObj.getCategory() != null) {
+            vObj.setCategory(toAccessTypeCategory(xObj.getCategory()));
+        }
+
+        return vObj;
+    }
+
+    public XXPolicyConditionDef populateRangerPolicyConditionDefToXX(RangerPolicyConditionDef vObj, XXPolicyConditionDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerPolicyConditionDefToXX, serviceDef can not be null");
+
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setEvaluator(vObj.getEvaluator());
+        xObj.setEvaluatoroptions(mapToJsonString(vObj.getEvaluatorOptions()));
+        xObj.setValidationRegEx(vObj.getValidationRegEx());
+        xObj.setValidationMessage(vObj.getValidationMessage());
+        xObj.setUiHint(vObj.getUiHint());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setRbkeydescription(vObj.getRbKeyDescription());
+        xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        return xObj;
+    }
+
+    public RangerPolicyConditionDef populateXXToRangerPolicyConditionDef(XXPolicyConditionDef xObj) {
+        RangerPolicyConditionDef vObj = new RangerPolicyConditionDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setEvaluator(xObj.getEvaluator());
+        vObj.setEvaluatorOptions(jsonStringToMap(xObj.getEvaluatoroptions()));
+        vObj.setValidationRegEx(xObj.getValidationRegEx());
+        vObj.setValidationMessage(xObj.getValidationMessage());
+        vObj.setUiHint(xObj.getUiHint());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+        vObj.setRbKeyDescription(xObj.getRbkeydescription());
+        vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
+
+        return vObj;
+    }
+
+    public XXContextEnricherDef populateRangerContextEnricherDefToXX(RangerContextEnricherDef vObj, XXContextEnricherDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerContextEnricherDefToXX, serviceDef can not be null");
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setEnricher(vObj.getEnricher());
+        xObj.setEnricherOptions(mapToJsonString(vObj.getEnricherOptions()));
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        return xObj;
+    }
+
+    public RangerContextEnricherDef populateXXToRangerContextEnricherDef(XXContextEnricherDef xObj) {
+        RangerContextEnricherDef vObj = new RangerContextEnricherDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setEnricher(xObj.getEnricher());
+        vObj.setEnricherOptions(jsonStringToMap(xObj.getEnricherOptions()));
+
+        return vObj;
+    }
+
+    public XXEnumDef populateRangerEnumDefToXX(RangerEnumDef vObj, XXEnumDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerEnumDefToXX, serviceDef can not be null");
+
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setDefaultindex(vObj.getDefaultIndex());
+
+        return xObj;
+    }
+
+    public RangerEnumDef populateXXToRangerEnumDef(XXEnumDef xObj) {
+        RangerEnumDef vObj = new RangerEnumDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setDefaultIndex(xObj.getDefaultindex());
+
+        List<XXEnumElementDef>     xElements = daoMgr.getXXEnumElementDef().findByEnumDefId(xObj.getId());
+        List<RangerEnumElementDef> elements  = new ArrayList<>();
+
+        for (XXEnumElementDef xEle : xElements) {
+            RangerEnumElementDef element = populateXXToRangerEnumElementDef(xEle);
+
+            elements.add(element);
+        }
+
+        vObj.setElements(elements);
+
+        return vObj;
+    }
+
+    public XXEnumElementDef populateRangerEnumElementDefToXX(RangerEnumElementDef vObj, XXEnumElementDef xObj, XXEnumDef enumDef, int operationContext) {
+        if (enumDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerEnumElementDefToXX, enumDef can not be null");
+
+            throw restErrorUtil.createRESTException("enumDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, enumDef);
+
+        xObj.setEnumdefid(enumDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        return xObj;
+    }
+
+    public RangerEnumElementDef populateXXToRangerEnumElementDef(XXEnumElementDef xObj) {
+        RangerEnumElementDef vObj = new RangerEnumElementDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+
+        return vObj;
+    }
+
+    public XXDataMaskTypeDef populateRangerDataMaskDefToXX(RangerDataMaskTypeDef vObj, XXDataMaskTypeDef xObj, XXServiceDef serviceDef, int operationContext) {
+        if (serviceDef == null) {
+            LOG.error("RangerServiceDefServiceBase.populateRangerDataMaskDefToXX, serviceDef can not be null");
+
+            throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
+        }
+
+        xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
+
+        xObj.setDefid(serviceDef.getId());
+        xObj.setItemId(vObj.getItemId());
+        xObj.setName(vObj.getName());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setTransformer(vObj.getTransformer());
+        xObj.setDataMaskOptions(mapToJsonString(vObj.getDataMaskOptions()));
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setRbKeyDescription(vObj.getRbKeyDescription());
+        xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
+
+        return xObj;
+    }
+
+    public RangerDataMaskTypeDef populateXXToRangerDataMaskTypeDef(XXDataMaskTypeDef xObj) {
+        RangerDataMaskTypeDef vObj = new RangerDataMaskTypeDef();
+
+        vObj.setItemId(xObj.getItemId());
+        vObj.setName(xObj.getName());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setTransformer(xObj.getTransformer());
+        vObj.setDataMaskOptions(jsonStringToMap(xObj.getDataMaskOptions()));
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+        vObj.setRbKeyDescription(xObj.getRbKeyDescription());
+
+        return vObj;
+    }
+
+    public RangerServiceDefList searchRangerServiceDefs(SearchFilter searchFilter) {
+        RangerServiceDefList retList       = new RangerServiceDefList();
+        int                  startIndex    = searchFilter.getStartIndex();
+        int                  pageSize      = searchFilter.getMaxRows();
+        String               denyCondition = searchFilter.getParam(SearchFilter.FETCH_DENY_CONDITION);
+
+        searchFilter.setStartIndex(0);
+        searchFilter.setMaxRows(Integer.MAX_VALUE);
+
+        boolean isAuditPage          = searchFilter.getParam("pageSource") != null;
+        List<T> xSvcDefList          = searchResources(searchFilter, searchFields, sortFields, retList);
+        List<T> permittedServiceDefs = new ArrayList<>();
+
+        for (T xSvcDef : xSvcDefList) {
+            if ((bizUtil.hasAccess(xSvcDef, null) || (bizUtil.isAdmin() && isAuditPage)) || ("true".equals(denyCondition))) {
+                if (!bizUtil.isGdsServiceDef(xSvcDef)) {
+                    permittedServiceDefs.add(xSvcDef);
+                }
+            }
+        }
+
+        if (!permittedServiceDefs.isEmpty()) {
+            populatePageList(permittedServiceDefs, startIndex, pageSize, retList);
+        }
+
+        return retList;
+    }
+
+    public String objectToJson(Serializable obj) {
+        String ret = null;
+
+        if (obj != null) {
+            try {
+                ret = jsonUtil.writeObjectAsString(obj);
+            } catch (Exception excp) {
+                LOG.warn("objectToJson() failed to convert object to json: {}", obj, excp);
+            }
+        }
+
+        return ret;
+    }
+
+    public <DST> DST jsonToObject(String jsonStr, Class<DST> clz) {
+        DST ret = null;
+
+        if (StringUtils.isNotEmpty(jsonStr)) {
+            try {
+                ret = jsonUtil.writeJsonToJavaObject(jsonStr, clz);
+            } catch (Exception excp) {
+                LOG.warn("jsonToObject() failed to convert json to object: {}", jsonStr, excp);
+            }
+        }
+
+        return ret;
+    }
+
+    @Override
+    protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+        String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
+
+        xObj.setGuid(guid);
+        xObj.setName(vObj.getName());
+        xObj.setDisplayName(vObj.getDisplayName());
+        xObj.setImplclassname(vObj.getImplClass());
+        xObj.setLabel(vObj.getLabel());
+        xObj.setDescription(vObj.getDescription());
+        xObj.setRbkeylabel(vObj.getRbKeyLabel());
+        xObj.setRbkeydescription(vObj.getRbKeyDescription());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setDefOptions(mapToJsonString(vObj.getOptions()));
+
+        return xObj;
+    }
+
+    @Override
+    protected V mapEntityToViewBean(V vObj, T xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setName(xObj.getName());
+        vObj.setImplClass(xObj.getImplclassname());
+        vObj.setLabel(xObj.getLabel());
+        vObj.setDescription(xObj.getDescription());
+        vObj.setOptions(jsonStringToMap(xObj.getDefOptions()));
+        vObj.setRbKeyLabel(xObj.getRbkeylabel());
+        vObj.setRbKeyDescription(xObj.getRbkeydescription());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setDisplayName(xObj.getDisplayName());
+
+        return vObj;
+    }
+
+    @Override
+    protected V populateViewBean(T xServiceDef) {
+        V                        serviceDef   = super.populateViewBean(xServiceDef);
+        Long                     serviceDefId = xServiceDef.getId();
+        List<XXServiceConfigDef> xConfigs     = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xConfigs)) {
+            List<RangerServiceConfigDef> configs = new ArrayList<>();
+
+            for (XXServiceConfigDef xConfig : xConfigs) {
+                RangerServiceConfigDef config = populateXXToRangerServiceConfigDef(xConfig);
+
+                configs.add(config);
+            }
+
+            serviceDef.setConfigs(configs);
+        }
+
+        List<XXResourceDef> xResources = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xResources)) {
+            List<RangerResourceDef> resources = new ArrayList<>();
+
+            for (XXResourceDef xResource : xResources) {
+                RangerResourceDef resource = populateXXToRangerResourceDef(xResource);
+
+                resources.add(resource);
+            }
+
+            serviceDef.setResources(resources);
+        }
+
+        List<XXAccessTypeDef>     xAccessTypes  = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId);
+        Map<String, List<String>> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xAccessTypes)) {
+            List<RangerAccessTypeDef> accessTypes = new ArrayList<>();
+
+            for (XXAccessTypeDef xAtd : xAccessTypes) {
+                RangerAccessTypeDef accessType = populateXXToRangerAccessTypeDef(xAtd, impliedGrants.get(xAtd.getName()));
+
+                accessTypes.add(accessType);
+            }
+
+            serviceDef.setAccessTypes(accessTypes);
+        }
+
+        serviceDef.setMarkerAccessTypes(ServiceDefUtil.getMarkerAccessTypes(serviceDef.getAccessTypes()));
+
+        List<XXPolicyConditionDef> xPolicyConditions = daoMgr.getXXPolicyConditionDef().findByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xPolicyConditions)) {
+            List<RangerPolicyConditionDef> policyConditions = new ArrayList<>();
+
+            for (XXPolicyConditionDef xPolicyCondDef : xPolicyConditions) {
+                RangerPolicyConditionDef policyCondition = populateXXToRangerPolicyConditionDef(xPolicyCondDef);
+
+                policyConditions.add(policyCondition);
+            }
+
+            serviceDef.setPolicyConditions(policyConditions);
+        }
+
+        List<XXContextEnricherDef> xContextEnrichers = daoMgr.getXXContextEnricherDef().findByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xContextEnrichers)) {
+            List<RangerContextEnricherDef> contextEnrichers = new ArrayList<>();
+
+            for (XXContextEnricherDef xContextEnricherDef : xContextEnrichers) {
+                RangerContextEnricherDef contextEnricher = populateXXToRangerContextEnricherDef(xContextEnricherDef);
+
+                contextEnrichers.add(contextEnricher);
+            }
+
+            serviceDef.setContextEnrichers(contextEnrichers);
+        }
+
+        List<XXEnumDef> xEnumList = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xEnumList)) {
+            List<RangerEnumDef> enums = new ArrayList<>();
+
+            for (XXEnumDef xEnum : xEnumList) {
+                RangerEnumDef vEnum = populateXXToRangerEnumDef(xEnum);
+
+                enums.add(vEnum);
+            }
+
+            serviceDef.setEnums(enums);
+        }
+
+        RangerDataMaskDef       dataMaskDef    = new RangerDataMaskDef();
+        RangerRowFilterDef      rowFilterDef   = new RangerRowFilterDef();
+        List<XXDataMaskTypeDef> xDataMaskTypes = daoMgr.getXXDataMaskTypeDef().findByServiceDefId(serviceDefId);
+
+        if (!stringUtil.isEmpty(xDataMaskTypes)) {
+            List<RangerDataMaskTypeDef> dataMaskTypes = new ArrayList<>();
+
+            for (XXDataMaskTypeDef xDataMaskType : xDataMaskTypes) {
+                RangerDataMaskTypeDef dataMaskType = populateXXToRangerDataMaskTypeDef(xDataMaskType);
+
+                dataMaskTypes.add(dataMaskType);
+            }
+
+            dataMaskDef.setMaskTypes(dataMaskTypes);
+        }
+
+        if (!stringUtil.isEmpty(xResources)) {
+            for (XXResourceDef xResource : xResources) {
+                if (StringUtils.isNotEmpty(xResource.getDataMaskOptions())) {
+                    RangerResourceDef dataMaskResource = jsonToObject(xResource.getDataMaskOptions(), RangerResourceDef.class);
+
+                    dataMaskDef.getResources().add(dataMaskResource);
+                }
+
+                if (StringUtils.isNotEmpty(xResource.getRowFilterOptions())) {
+                    RangerResourceDef resource = jsonToObject(xResource.getRowFilterOptions(), RangerResourceDef.class);
+
+                    rowFilterDef.getResources().add(resource);
+                }
+            }
+        }
+
+        if (!stringUtil.isEmpty(xAccessTypes)) {
+            for (XXAccessTypeDef xAtd : xAccessTypes) {
+                if (StringUtils.isNotEmpty(xAtd.getDataMaskOptions())) {
+                    RangerAccessTypeDef dataMaskAccessType = jsonToObject(xAtd.getDataMaskOptions(), RangerAccessTypeDef.class);
+
+                    dataMaskDef.getAccessTypes().add(dataMaskAccessType);
+                }
+
+                if (StringUtils.isNotEmpty(xAtd.getRowFilterOptions())) {
+                    RangerAccessTypeDef accessType = jsonToObject(xAtd.getRowFilterOptions(), RangerAccessTypeDef.class);
+
+                    rowFilterDef.getAccessTypes().add(accessType);
+                }
+            }
+        }
+
+        serviceDef.setDataMaskDef(dataMaskDef);
+        serviceDef.setRowFilterDef(rowFilterDef);
+
+        addImplicitConditionExpressionIfNeeded(serviceDef);
+
+        ServiceDefUtil.normalize(serviceDef);
+
+        return serviceDef;
+    }
+
+    protected Map<String, String> jsonStringToMap(String jsonStr) {
+        Map<String, String> ret = null;
+
+        if (!StringUtils.isEmpty(jsonStr)) {
+            try {
+                ret = jsonUtil.jsonToMap(jsonStr);
+            } catch (Exception excp) {
+                // fallback to earlier format: "name1=value1;name2=value2"
+                for (String optionString : jsonStr.split(";")) {
+                    if (StringUtils.isEmpty(optionString)) {
+                        continue;
+                    }
+
+                    String[] nvArr = optionString.split("=");
+                    String   name  = nvArr.length > 0 ? nvArr[0].trim() : null;
+                    String   value = nvArr.length > 1 ? nvArr[1].trim() : null;
+
+                    if (StringUtils.isEmpty(name)) {
+                        continue;
+                    }
+
+                    if (ret == null) {
+                        ret = new HashMap<>();
+                    }
+
+                    ret.put(name, value);
+                }
+            }
+        }
+
+        return ret;
+    }
+
+    boolean addImplicitConditionExpressionIfNeeded(RangerServiceDef serviceDef) {
+        boolean ret                      = false;
+        boolean implicitConditionDefault = PropertiesUtil.getBooleanProperty(PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION, true);
+        boolean implicitConditionEnabled = ServiceDefUtil.getBooleanValue(serviceDef.getOptions(), RangerServiceDef.OPTION_ENABLE_IMPLICIT_CONDITION_EXPRESSION, implicitConditionDefault);
+
+        if (implicitConditionEnabled) {
+            boolean                        exists        = false;
+            List<RangerPolicyConditionDef> conditionDefs = serviceDef.getPolicyConditions();
+
+            if (conditionDefs == null) {
+                conditionDefs = new ArrayList<>();
+            }
+
+            for (RangerPolicyConditionDef conditionDef : conditionDefs) {
+                if (StringUtils.equalsIgnoreCase(conditionDef.getEvaluator(), IMPLICIT_CONDITION_EXPRESSION_EVALUATOR)) {
+                    exists = true;
+
+                    break;
+                }
+            }
+
+            if (!exists) {
+                long maxItemId = ServiceDefUtil.getConditionsMaxItemId(conditionDefs);
+
+                conditionDefs.add(ServiceDefUtil.createImplicitExpressionConditionDef(maxItemId + 1));
+
+                serviceDef.setPolicyConditions(conditionDefs);
+
+                ret = true;
+            }
+        }
+
+        LOG.debug("addImplicitConditionExpressionIfNeeded(serviceType={}): implicitConditionDefault={}, implicitConditionEnabled={}, conditionDefs={}, ret={}", serviceDef.getName(), implicitConditionDefault, implicitConditionEnabled, serviceDef.getPolicyConditions(), ret);
 
-		xObj.setValidationRegEx(vObj.getValidationRegEx());
-		xObj.setValidationMessage(vObj.getValidationMessage());
-		xObj.setUiHint(vObj.getUiHint());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setDescription(vObj.getDescription());
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setRbkeydescription(vObj.getRbKeyDescription());
-		xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-		return xObj;
-	}
-	
-	public RangerResourceDef populateXXToRangerResourceDef(XXResourceDef xObj) {
-		RangerResourceDef vObj = new RangerResourceDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setType(xObj.getType());
-		vObj.setLevel(xObj.getLevel());		
-		vObj.setMandatory(xObj.getMandatory());
-		vObj.setLookupSupported(xObj.getLookupsupported());
-		vObj.setRecursiveSupported(xObj.getRecursivesupported());
-		vObj.setExcludesSupported(xObj.getExcludessupported());
-		vObj.setMatcher(xObj.getMatcher());
-
-		Map<String, String> matcherOptions = jsonStringToMap(xObj.getMatcheroptions());
-
-		if (MapUtils.isNotEmpty(matcherOptions)) {
-			String optionAccessTypeRestrictions = matcherOptions.remove(OPTION_RESOURCE_ACCESS_TYPE_RESTRICTIONS);
-			String optionIsValidLeaf            = matcherOptions.remove(OPTION_RESOURCE_IS_VALID_LEAF);
-
-			if (StringUtils.isNotBlank(optionAccessTypeRestrictions)) {
-				Set<String> accessTypeRestrictions = new HashSet<>();
-
-				accessTypeRestrictions = jsonToObject(optionAccessTypeRestrictions, accessTypeRestrictions.getClass());
-
-				vObj.setAccessTypeRestrictions(accessTypeRestrictions);
-			}
-
-			if (StringUtils.isNotBlank(optionIsValidLeaf)) {
-				Boolean isValidLeaf = jsonToObject(optionIsValidLeaf, Boolean.class);
-
-				vObj.setIsValidLeaf(isValidLeaf);
-			}
-		}
-
-		vObj.setMatcherOptions(matcherOptions);
-
-		vObj.setValidationRegEx(xObj.getValidationRegEx());
-		vObj.setValidationMessage(xObj.getValidationMessage());
-		vObj.setUiHint(xObj.getUiHint());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setDescription(xObj.getDescription());
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		vObj.setRbKeyDescription(xObj.getRbkeydescription());
-		vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
-
-		XXResourceDef parent = daoMgr.getXXResourceDef().getById(xObj.getParent());
-		String parentName = (parent != null) ? parent.getName() : null;
-		vObj.setParent(parentName);
-		
-		return vObj;
-	}
-	
-	public XXAccessTypeDef populateRangerAccessTypeDefToXX(RangerAccessTypeDef vObj, XXAccessTypeDef xObj,
-			XXServiceDef serviceDef, int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerAccessTypeDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-		
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-
-		if (vObj.getCategory() != null) {
-			xObj.setCategory((short) vObj.getCategory().ordinal());
-		}
-
-		return xObj;
-	}
-	
-	public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj) {
-		List<String> impliedGrants = daoMgr.getXXAccessTypeDefGrants().findImpliedGrantsByATDId(xObj.getId());
-
-		return populateXXToRangerAccessTypeDef(xObj, impliedGrants);
-	}
-
-	public RangerAccessTypeDef populateXXToRangerAccessTypeDef(XXAccessTypeDef xObj, List<String> impliedGrants) {
-		RangerAccessTypeDef vObj = new RangerAccessTypeDef();
-
-		if (impliedGrants == null) {
-			impliedGrants = new ArrayList<>();
-		}
-
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		vObj.setImpliedGrants(impliedGrants);
-
-		if (xObj.getCategory() != null) {
-			vObj.setCategory(toAccessTypeCategory(xObj.getCategory()));
-		}
-
-		return vObj;
-	}
-
-	public XXPolicyConditionDef populateRangerPolicyConditionDefToXX(RangerPolicyConditionDef vObj,
-			XXPolicyConditionDef xObj, XXServiceDef serviceDef, int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerPolicyConditionDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-		
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setEvaluator(vObj.getEvaluator());
-		xObj.setEvaluatoroptions(mapToJsonString(vObj.getEvaluatorOptions()));
-		xObj.setValidationRegEx(vObj.getValidationRegEx());
-		xObj.setValidationMessage(vObj.getValidationMessage());
-		xObj.setUiHint(vObj.getUiHint());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setDescription(vObj.getDescription());
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setRbkeydescription(vObj.getRbKeyDescription());
-		xObj.setRbKeyValidationMessage(vObj.getRbKeyValidationMessage());
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-		return xObj;
-	}
-	
-	public RangerPolicyConditionDef populateXXToRangerPolicyConditionDef(XXPolicyConditionDef xObj) {
-		RangerPolicyConditionDef vObj = new RangerPolicyConditionDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setEvaluator(xObj.getEvaluator());
-		vObj.setEvaluatorOptions(jsonStringToMap(xObj.getEvaluatoroptions()));
-		vObj.setValidationRegEx(xObj.getValidationRegEx());
-		vObj.setValidationMessage(xObj.getValidationMessage());
-		vObj.setUiHint(xObj.getUiHint());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setDescription(xObj.getDescription());
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		vObj.setRbKeyDescription(xObj.getRbkeydescription());
-		vObj.setRbKeyValidationMessage(xObj.getRbKeyValidationMessage());
-		return vObj;
-	}
-	
-	public XXContextEnricherDef populateRangerContextEnricherDefToXX(RangerContextEnricherDef vObj,
-			XXContextEnricherDef xObj, XXServiceDef serviceDef, int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerContextEnricherDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setEnricher(vObj.getEnricher());
-		xObj.setEnricherOptions(mapToJsonString(vObj.getEnricherOptions()));
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-		return xObj;
-	}
-	
-	public RangerContextEnricherDef populateXXToRangerContextEnricherDef(XXContextEnricherDef xObj) {
-		RangerContextEnricherDef vObj = new RangerContextEnricherDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setEnricher(xObj.getEnricher());
-		vObj.setEnricherOptions(jsonStringToMap(xObj.getEnricherOptions()));
-		return vObj;
-	}
-	
-	public XXEnumDef populateRangerEnumDefToXX(RangerEnumDef vObj, XXEnumDef xObj, XXServiceDef serviceDef,
-			int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerEnumDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setDefaultindex(vObj.getDefaultIndex());
-		return xObj;
-	}
-	
-	public RangerEnumDef populateXXToRangerEnumDef(XXEnumDef xObj) {
-		RangerEnumDef vObj = new RangerEnumDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setDefaultIndex(xObj.getDefaultindex());
-		
-		List<XXEnumElementDef> xElements = daoMgr.getXXEnumElementDef().findByEnumDefId(xObj.getId());
-		List<RangerEnumElementDef> elements = new ArrayList<RangerEnumElementDef>();
-		
-		for(XXEnumElementDef xEle : xElements) {
-			RangerEnumElementDef element = populateXXToRangerEnumElementDef(xEle);
-			elements.add(element);
-		}
-		vObj.setElements(elements);
-		
-		return vObj;
-	}
-	
-	public XXEnumElementDef populateRangerEnumElementDefToXX(RangerEnumElementDef vObj, XXEnumElementDef xObj,
-			XXEnumDef enumDef, int operationContext) {
-		if(enumDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerEnumElementDefToXX, enumDef can not be null");
-			throw restErrorUtil.createRESTException("enumDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-
-		xObj = rangerAuditFields.populateAuditFields(xObj, enumDef);
-		xObj.setEnumdefid(enumDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-		return xObj;
-	}
-	
-	public RangerEnumElementDef populateXXToRangerEnumElementDef(XXEnumElementDef xObj) {
-		RangerEnumElementDef vObj = new RangerEnumElementDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		return vObj;
-	}
-
-	public XXDataMaskTypeDef populateRangerDataMaskDefToXX(RangerDataMaskTypeDef vObj, XXDataMaskTypeDef xObj,
-														   XXServiceDef serviceDef, int operationContext) {
-		if(serviceDef == null) {
-			LOG.error("RangerServiceDefServiceBase.populateRangerDataMaskDefToXX, serviceDef can not be null");
-			throw restErrorUtil.createRESTException("RangerServiceDef cannot be null.", MessageEnums.DATA_NOT_FOUND);
-		}
-
-		xObj = rangerAuditFields.populateAuditFields(xObj, serviceDef);
-		xObj.setDefid(serviceDef.getId());
-		xObj.setItemId(vObj.getItemId());
-		xObj.setName(vObj.getName());
-		xObj.setLabel(vObj.getLabel());
-		xObj.setDescription(vObj.getDescription());
-		xObj.setTransformer(vObj.getTransformer());
-		xObj.setDataMaskOptions(mapToJsonString(vObj.getDataMaskOptions()));
-		xObj.setRbkeylabel(vObj.getRbKeyLabel());
-		xObj.setRbKeyDescription(vObj.getRbKeyDescription());
-		xObj.setOrder(AppConstants.DEFAULT_SORT_ORDER);
-		return xObj;
-	}
-
-	public RangerDataMaskTypeDef populateXXToRangerDataMaskTypeDef(XXDataMaskTypeDef xObj) {
-		RangerDataMaskTypeDef vObj = new RangerDataMaskTypeDef();
-		vObj.setItemId(xObj.getItemId());
-		vObj.setName(xObj.getName());
-		vObj.setLabel(xObj.getLabel());
-		vObj.setDescription(xObj.getDescription());
-		vObj.setTransformer(xObj.getTransformer());
-		vObj.setDataMaskOptions(jsonStringToMap(xObj.getDataMaskOptions()));
-		vObj.setRbKeyLabel(xObj.getRbkeylabel());
-		vObj.setRbKeyDescription(xObj.getRbKeyDescription());
-
-		return vObj;
-	}
-
-	public RangerServiceDefList searchRangerServiceDefs(SearchFilter searchFilter) {
-		RangerServiceDefList retList = new RangerServiceDefList();
-		int startIndex = searchFilter.getStartIndex();
-		int pageSize = searchFilter.getMaxRows();
-		String denyCondition = searchFilter.getParam(SearchFilter.FETCH_DENY_CONDITION);
-		searchFilter.setStartIndex(0);
-		searchFilter.setMaxRows(Integer.MAX_VALUE);
-
-		boolean isAuditPage=false;
-		if(searchFilter.getParam("pageSource")!=null){
-			isAuditPage=true;
-		}
-		List<T> xSvcDefList = searchResources(searchFilter, searchFields, sortFields,
-				retList);
-		List<T> permittedServiceDefs = new ArrayList<T>();
-		for (T xSvcDef : xSvcDefList) {
-			if ((bizUtil.hasAccess(xSvcDef, null) || (bizUtil.isAdmin() && isAuditPage)) || ("true".equals(denyCondition))) {
-				if (!bizUtil.isGdsServiceDef(xSvcDef)) {
-					permittedServiceDefs.add(xSvcDef);
-				}
-			}
-		}
-		if (!permittedServiceDefs.isEmpty()) {
-			populatePageList(permittedServiceDefs, startIndex, pageSize, retList);
-		}
-		return retList;
-
-	}
-	
-
-	private void populatePageList(List<T> xxObjList, int startIndex, int pageSize,
-			RangerServiceDefList retList) {
-		List<RangerServiceDef> onePageList = new ArrayList<RangerServiceDef>();
-
-		for (int i = startIndex; i < pageSize + startIndex && i < xxObjList.size(); i++) {
-			onePageList.add(populateViewBean(xxObjList.get(i)));
-		}
-		retList.setServiceDefs(onePageList);
-		retList.setStartIndex(startIndex);
-		retList.setPageSize(pageSize);
-		retList.setResultSize(onePageList.size());
-		retList.setTotalCount(xxObjList.size());
-	}
-
-	private String mapToJsonString(Map<String, String> map) {
-		String ret = null;
-
-		if(map != null) {
-			try {
-				ret = jsonUtil.readMapToString(map);
-			} catch(Exception excp) {
-				LOG.warn("mapToJsonString() failed to convert map: " + map, excp);
-			}
-		}
-
-		return ret;
-	}
-
-	protected Map<String, String> jsonStringToMap(String jsonStr) {
-		Map<String, String> ret = null;
-
-		if(!StringUtils.isEmpty(jsonStr)) {
-			try {
-				ret = jsonUtil.jsonToMap(jsonStr);
-			} catch(Exception excp) {
-				// fallback to earlier format: "name1=value1;name2=value2"
-				for(String optionString : jsonStr.split(";")) {
-					if(StringUtils.isEmpty(optionString)) {
-						continue;
-					}
-
-					String[] nvArr = optionString.split("=");
-
-					String name  = (nvArr != null && nvArr.length > 0) ? nvArr[0].trim() : null;
-					String value = (nvArr != null && nvArr.length > 1) ? nvArr[1].trim() : null;
-
-					if(StringUtils.isEmpty(name)) {
-						continue;
-					}
-
-					if(ret == null) {
-						ret = new HashMap<String, String>();
-					}
-
-					ret.put(name, value);
-				}
-			}
-		}
-
-		return ret;
-	}
-
-	public String objectToJson(Serializable obj) {
-		String ret = null;
-
-		if(obj != null) {
-			try {
-				ret = jsonUtil.writeObjectAsString(obj);
-			} catch(Exception excp) {
-				LOG.warn("objectToJson() failed to convert object to json: " + obj, excp);
-			}
-		}
-
-		return ret;
-	}
-
-	public <DST> DST jsonToObject(String jsonStr, Class<DST> clz) {
-		DST ret = null;
-
-		if(StringUtils.isNotEmpty(jsonStr)) {
-			try {
-				ret = jsonUtil.writeJsonToJavaObject(jsonStr, clz);
-			} catch(Exception excp) {
-				LOG.warn("jsonToObject() failed to convert json to object: " + jsonStr, excp);
-			}
-		}
-
-		return ret;
-	}
-
-
-	boolean addImplicitConditionExpressionIfNeeded(RangerServiceDef serviceDef) {
-		boolean ret                      = false;
-		boolean implicitConditionDefault = PropertiesUtil.getBooleanProperty(PROP_ENABLE_IMPLICIT_CONDITION_EXPRESSION, true);
-		boolean implicitConditionEnabled = ServiceDefUtil.getBooleanValue(serviceDef.getOptions(), RangerServiceDef.OPTION_ENABLE_IMPLICIT_CONDITION_EXPRESSION, implicitConditionDefault);
-
-		if (implicitConditionEnabled) {
-			boolean                        exists        = false;
-			List<RangerPolicyConditionDef> conditionDefs = serviceDef.getPolicyConditions();
-
-			if (conditionDefs == null) {
-				conditionDefs = new ArrayList<>();
-			}
-
-			for (RangerPolicyConditionDef conditionDef : conditionDefs) {
-				if (StringUtils.equalsIgnoreCase(conditionDef.getEvaluator(), IMPLICIT_CONDITION_EXPRESSION_EVALUATOR)) {
-					exists = true;
-
-					break;
-				}
-			}
+        return ret;
+    }
 
-			if (!exists) {
-				long maxItemId = ServiceDefUtil.getConditionsMaxItemId(conditionDefs);
+    private void populatePageList(List<T> xxObjList, int startIndex, int pageSize, RangerServiceDefList retList) {
+        List<RangerServiceDef> onePageList = new ArrayList<>();
 
-				conditionDefs.add(ServiceDefUtil.createImplicitExpressionConditionDef(maxItemId + 1));
+        for (int i = startIndex; i < pageSize + startIndex && i < xxObjList.size(); i++) {
+            onePageList.add(populateViewBean(xxObjList.get(i)));
+        }
 
-				serviceDef.setPolicyConditions(conditionDefs);
+        retList.setServiceDefs(onePageList);
+        retList.setStartIndex(startIndex);
+        retList.setPageSize(pageSize);
+        retList.setResultSize(onePageList.size());
+        retList.setTotalCount(xxObjList.size());
+    }
 
-				ret = true;
-			}
-		}
+    private String mapToJsonString(Map<String, String> map) {
+        String ret = null;
 
-		if (LOG.isDebugEnabled()) {
-			LOG.debug("addImplicitConditionExpressionIfNeeded(serviceType={}): implicitConditionDefault={}, implicitConditionEnabled={}, conditionDefs={}, ret={}", serviceDef.getName(), implicitConditionDefault, implicitConditionEnabled, serviceDef.getPolicyConditions(), ret);
-		}
+        if (map != null) {
+            try {
+                ret = jsonUtil.readMapToString(map);
+            } catch (Exception excp) {
+                LOG.warn("mapToJsonString() failed to convert map: {}", map, excp);
+            }
+        }
 
-		return ret;
-	}
+        return ret;
+    }
 
-	private AccessTypeCategory toAccessTypeCategory(short val) {
-		AccessTypeCategory ret = null;
+    private AccessTypeCategory toAccessTypeCategory(short val) {
+        AccessTypeCategory ret = null;
 
-		for (AccessTypeCategory category : AccessTypeCategory.values()) {
-			if (category.ordinal() == val) {
-				ret = category;
+        for (AccessTypeCategory category : AccessTypeCategory.values()) {
+            if (category.ordinal() == val) {
+                ret = category;
 
-				break;
-			}
-		}
+                break;
+            }
+        }
 
-		return ret;
-	}
+        return ret;
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java
index ef4984d6c..7d0861b84 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefWithAssignedIdService.java
@@ -23,30 +23,25 @@ import org.springframework.stereotype.Service;
 
 @Service
 public class RangerServiceDefWithAssignedIdService extends RangerServiceDefServiceBase<XXServiceDefWithAssignedId, RangerServiceDef> {
-
-	@Override
-	protected XXServiceDefWithAssignedId mapViewToEntityBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj,
-			int OPERATION_CONTEXT) {
-		return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
-	}
-
-	@Override
-	protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj) {
-		return super.mapEntityToViewBean(vObj, xObj);
-	}
-
-	@Override
-	protected void validateForCreate(RangerServiceDef vObj) {
-
-	}
-
-	@Override
-	protected void validateForUpdate(RangerServiceDef vServiceDef, XXServiceDefWithAssignedId xServiceDef) {
-
-	}
-
-	public RangerServiceDef getPopulatedViewObject(XXServiceDefWithAssignedId xServiceDef) {
-		return this.populateViewBean(xServiceDef);
-	}
-
+    public RangerServiceDef getPopulatedViewObject(XXServiceDefWithAssignedId xServiceDef) {
+        return this.populateViewBean(xServiceDef);
+    }
+
+    @Override
+    protected XXServiceDefWithAssignedId mapViewToEntityBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj, int operationContext) {
+        return super.mapViewToEntityBean(vObj, xObj, operationContext);
+    }
+
+    @Override
+    protected RangerServiceDef mapEntityToViewBean(RangerServiceDef vObj, XXServiceDefWithAssignedId xObj) {
+        return super.mapEntityToViewBean(vObj, xObj);
+    }
+
+    @Override
+    protected void validateForCreate(RangerServiceDef vObj) {
+    }
+
+    @Override
+    protected void validateForUpdate(RangerServiceDef vServiceDef, XXServiceDefWithAssignedId xServiceDef) {
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
index 2d1aa2e63..8fe023e6c 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
@@ -19,11 +19,6 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import org.apache.commons.collections.CollectionUtils;
@@ -31,9 +26,9 @@ import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
 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.SortField;
 import org.apache.ranger.entity.XXServiceResource;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerServiceResource;
@@ -43,15 +38,19 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class RangerServiceResourceService extends RangerServiceResourceServiceBase<XXServiceResource, RangerServiceResource> {
-
     private static final Logger LOG = LoggerFactory.getLogger(RangerServiceResourceService.class);
 
-    private             boolean       serviceUpdateNeeded = true;
-    public static final TypeReference subsumedDataType    = new TypeReference<Map<String, RangerPolicy.RangerPolicyResource>>() {};
+    public static final TypeReference<Map<String, RangerPolicy.RangerPolicyResource>> subsumedDataType   = new TypeReference<Map<String, RangerPolicy.RangerPolicyResource>>() {};
+    public static final TypeReference<List<RangerTag>>                                duplicatedDataType = new TypeReference<List<RangerTag>>() {};
 
-    public static final TypeReference duplicatedDataType = new TypeReference<List<RangerTag>>() {};
+    private boolean serviceUpdateNeeded = true;
 
     public RangerServiceResourceService() {
         searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
@@ -64,23 +63,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
 
         sortFields.add(new SortField(SearchFilter.TAG_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
         sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId"));
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,  "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  "obj.updateTime"));
-    }
-
-    @Override
-    protected void validateForCreate(RangerServiceResource vObj) {
-
-    }
-
-    @Override
-    protected void validateForUpdate(RangerServiceResource vObj, XXServiceResource entityObj) {
-        if (StringUtils.equals(entityObj.getGuid(), vObj.getGuid()) &&
-                StringUtils.equals(entityObj.getResourceSignature(), vObj.getResourceSignature())) {
-            serviceUpdateNeeded = false;
-        } else {
-            serviceUpdateNeeded = true;
-        }
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
     }
 
     @Override
@@ -94,14 +78,22 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
         return ret;
     }
 
+    @Override
+    protected void validateForCreate(RangerServiceResource vObj) {
+    }
+
+    @Override
+    protected void validateForUpdate(RangerServiceResource vObj, XXServiceResource entityObj) {
+        serviceUpdateNeeded = !StringUtils.equals(entityObj.getGuid(), vObj.getGuid()) || !StringUtils.equals(entityObj.getResourceSignature(), vObj.getResourceSignature());
+    }
+
     public RangerServiceResource getPopulatedViewObject(XXServiceResource xObj) {
         return populateViewBean(xObj);
     }
 
     public RangerServiceResource getServiceResourceByGuid(String guid) {
-        RangerServiceResource ret = null;
-
-        XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByGuid(guid);
+        RangerServiceResource ret               = null;
+        XXServiceResource     xxServiceResource = daoMgr.getXXServiceResource().findByGuid(guid);
 
         if (xxServiceResource != null) {
             ret = populateViewBean(xxServiceResource);
@@ -111,9 +103,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
     }
 
     public List<RangerServiceResource> getByServiceId(Long serviceId) {
-        List<RangerServiceResource> ret = new ArrayList<RangerServiceResource>();
-
-        List<XXServiceResource> xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
+        List<RangerServiceResource> ret                = new ArrayList<>();
+        List<XXServiceResource>     xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
 
         if (CollectionUtils.isNotEmpty(xxServiceResources)) {
             for (XXServiceResource xxServiceResource : xxServiceResources) {
@@ -127,9 +118,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
     }
 
     public RangerServiceResource getByServiceAndResourceSignature(Long serviceId, String resourceSignature) {
-        RangerServiceResource ret = null;
-
-        XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByServiceAndResourceSignature(serviceId, resourceSignature);
+        RangerServiceResource ret               = null;
+        XXServiceResource     xxServiceResource = daoMgr.getXXServiceResource().findByServiceAndResourceSignature(serviceId, resourceSignature);
 
         if (xxServiceResource != null) {
             ret = populateViewBean(xxServiceResource);
@@ -139,9 +129,8 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
     }
 
     public List<RangerServiceResource> getTaggedResourcesInServiceId(Long serviceId) {
-        List<RangerServiceResource> ret = new ArrayList<RangerServiceResource>();
-
-        List<XXServiceResource> xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
+        List<RangerServiceResource> ret                = new ArrayList<>();
+        List<XXServiceResource>     xxServiceResources = daoMgr.getXXServiceResource().findByServiceId(serviceId);
 
         if (CollectionUtils.isNotEmpty(xxServiceResources)) {
             for (XXServiceResource xxServiceResource : xxServiceResources) {
@@ -157,12 +146,14 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
     @Override
     protected XXServiceResource mapViewToEntityBean(RangerServiceResource serviceResource, XXServiceResource xxServiceResource, int operationContext) {
         XXServiceResource ret = super.mapViewToEntityBean(serviceResource, xxServiceResource, operationContext);
+
         if (MapUtils.isNotEmpty(serviceResource.getResourceElements())) {
             String serviceResourceElements = JsonUtils.mapToJson(serviceResource.getResourceElements());
+
             if (StringUtils.isNotEmpty(serviceResourceElements)) {
                 ret.setServiceResourceElements(serviceResourceElements);
             } else {
-                LOG.info("Empty string representing serviceResourceElements in [" + ret + "]!!");
+                LOG.info("Empty string representing serviceResourceElements in [{}]!!", ret);
             }
         }
 
@@ -172,20 +163,23 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa
     @Override
     protected RangerServiceResource mapEntityToViewBean(RangerServiceResource serviceResource, XXServiceResource xxServiceResource) {
         RangerServiceResource ret = super.mapEntityToViewBean(serviceResource, xxServiceResource);
+
         if (StringUtils.isNotEmpty(xxServiceResource.getServiceResourceElements())) {
             Map<String, RangerPolicy.RangerPolicyResource> serviceResourceElements = null;
+
             try {
-                serviceResourceElements = (Map<String, RangerPolicy.RangerPolicyResource>) JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
+                serviceResourceElements = JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
             } catch (JsonProcessingException e) {
                 LOG.error("Error occurred while processing JSON  ", e);
             }
+
             if (MapUtils.isNotEmpty(serviceResourceElements)) {
                 ret.setResourceElements(serviceResourceElements);
             } else {
-                LOG.info("Empty serviceResourceElement in [" + ret + "]!!");
+                LOG.info("Empty serviceResourceElement in [{}]!!", ret);
             }
         } else {
-            LOG.info("Empty string representing serviceResourceElements in [" + xxServiceResource + "]!!");
+            LOG.info("Empty string representing serviceResourceElements in [{}]!!", xxServiceResource);
         }
 
         return ret;
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
index 69b64383c..1f342a507 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
@@ -19,11 +19,6 @@
 
 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;
@@ -38,58 +33,83 @@ import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public abstract class RangerServiceResourceServiceBase<T extends XXServiceResource, V extends RangerServiceResource> extends RangerBaseModelService<T, V> {
+    @Autowired
+    GUIDUtil guidUtil;
+
+    public PList<V> searchServiceResources(SearchFilter searchFilter) {
+        PList<V> retList       = new PList<>();
+        List<V>  resourceList  = new ArrayList<>();
+        List<T>  xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
+
+        for (T xResource : xResourceList) {
+            V taggedRes = populateViewBean(xResource);
+
+            resourceList.add(taggedRes);
+        }
 
-	@Autowired
-	GUIDUtil guidUtil;
+        retList.setList(resourceList);
+        retList.setResultSize(resourceList.size());
+        retList.setPageSize(searchFilter.getMaxRows());
+        retList.setStartIndex(searchFilter.getStartIndex());
+        retList.setSortType(searchFilter.getSortType());
+        retList.setSortBy(searchFilter.getSortBy());
 
-	@Override
-	protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
-		String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
+        return retList;
+    }
 
-		xObj.setGuid(guid);
-		xObj.setVersion(vObj.getVersion());
-		xObj.setIsEnabled(vObj.getIsEnabled());
-		xObj.setResourceSignature(vObj.getResourceSignature());
+    @Override
+    protected T mapViewToEntityBean(V vObj, T xObj, int operationContext) {
+        String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
 
-		XXService xService = daoMgr.getXXService().findByName(vObj.getServiceName());
-		if (xService == null) {
-			throw restErrorUtil.createRESTException("Error Populating XXServiceResource. No Service found with name: " + vObj.getServiceName(), MessageEnums.INVALID_INPUT_DATA);
-		}
+        xObj.setGuid(guid);
+        xObj.setVersion(vObj.getVersion());
+        xObj.setIsEnabled(vObj.getIsEnabled());
+        xObj.setResourceSignature(vObj.getResourceSignature());
 
-		xObj.setServiceId(xService.getId());
+        XXService xService = daoMgr.getXXService().findByName(vObj.getServiceName());
 
-		return xObj;
-	}
+        if (xService == null) {
+            throw restErrorUtil.createRESTException("Error Populating XXServiceResource. No Service found with name: " + vObj.getServiceName(), MessageEnums.INVALID_INPUT_DATA);
+        }
 
-	@Override
-	protected V mapEntityToViewBean(V vObj, T xObj) {
-		vObj.setGuid(xObj.getGuid());
-		vObj.setVersion(xObj.getVersion());
-		vObj.setIsEnabled(xObj.getIsEnabled());
-		vObj.setResourceSignature(xObj.getResourceSignature());
+        xObj.setServiceId(xService.getId());
 
-		XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
+        return xObj;
+    }
 
-		vObj.setServiceName(xService.getName());
+    @Override
+    protected V mapEntityToViewBean(V vObj, T xObj) {
+        vObj.setGuid(xObj.getGuid());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setResourceSignature(xObj.getResourceSignature());
 
-		Map<String, RangerPolicy.RangerPolicyResource> resourceElements = getServiceResourceElements(xObj);
+        XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
 
-		vObj.setResourceElements(resourceElements);
+        vObj.setServiceName(xService.getName());
 
-		return vObj;
-	}
+        Map<String, RangerPolicy.RangerPolicyResource> resourceElements = getServiceResourceElements(xObj);
 
-	Map<String, RangerPolicyResource> getServiceResourceElements(T xObj) {
-        List<XXServiceResourceElement> resElementList = daoMgr.getXXServiceResourceElement().findByResourceId(xObj.getId());
-        Map<String, RangerPolicy.RangerPolicyResource> resourceElements = new HashMap<String, RangerPolicy.RangerPolicyResource>();
+        vObj.setResourceElements(resourceElements);
 
-        for (XXServiceResourceElement resElement : resElementList) {
-            List<String> resValueMapList = daoMgr.getXXServiceResourceElementValue().findValuesByResElementId(resElement.getId());
+        return vObj;
+    }
 
-            XXResourceDef xResDef = daoMgr.getXXResourceDef().getById(resElement.getResDefId());
+    Map<String, RangerPolicyResource> getServiceResourceElements(T xObj) {
+        List<XXServiceResourceElement>                 resElementList   = daoMgr.getXXServiceResourceElement().findByResourceId(xObj.getId());
+        Map<String, RangerPolicy.RangerPolicyResource> resourceElements = new HashMap<>();
+
+        for (XXServiceResourceElement resElement : resElementList) {
+            List<String>         resValueMapList = daoMgr.getXXServiceResourceElementValue().findValuesByResElementId(resElement.getId());
+            XXResourceDef        xResDef         = daoMgr.getXXResourceDef().getById(resElement.getResDefId());
+            RangerPolicyResource policyRes       = new RangerPolicyResource();
 
-            RangerPolicyResource policyRes = new RangerPolicyResource();
             policyRes.setIsExcludes(resElement.getIsExcludes());
             policyRes.setIsRecursive(resElement.getIsRecursive());
             policyRes.setValues(resValueMapList);
@@ -98,25 +118,4 @@ public abstract class RangerServiceResourceServiceBase<T extends XXServiceResour
         }
         return resourceElements;
     }
-
-	public PList<V> searchServiceResources(SearchFilter searchFilter) {
-		PList<V> retList = new PList<V>();
-		List<V> resourceList = new ArrayList<V>();
-
-		List<T> xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
-
-		for (T xResource : xResourceList) {
-			V taggedRes = populateViewBean(xResource);
-			resourceList.add(taggedRes);
-		}
-		retList.setList(resourceList);
-		retList.setResultSize(resourceList.size());
-		retList.setPageSize(searchFilter.getMaxRows());
-		retList.setStartIndex(searchFilter.getStartIndex());
-		retList.setSortType(searchFilter.getSortType());
-		retList.setSortBy(searchFilter.getSortBy());
-
-		return retList;
-	}
-
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
index 6660c9c70..44be8dd41 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
@@ -19,18 +19,14 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
 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.SortField;
 import org.apache.ranger.entity.XXServiceResource;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerServiceResourceWithTags;
@@ -40,83 +36,86 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class RangerServiceResourceWithTagsService extends RangerServiceResourceWithTagsServiceBase<XXServiceResource, RangerServiceResourceWithTags> {
-
-	private static final Logger LOG = LoggerFactory.getLogger(RangerServiceResourceWithTagsService.class);
-
-	public RangerServiceResourceWithTagsService() {
-        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID,          "obj.id",                      DATA_TYPE.INTEGER,  SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID,           "obj.serviceId",               DATA_TYPE.INTEGER,  SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME,         "service.name",                DATA_TYPE.STRING,   SEARCH_TYPE.FULL,    "XXService service", "obj.serviceId = service.id"));
-        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME_PARTIAL, "service.name",                DATA_TYPE.STRING,   SEARCH_TYPE.PARTIAL, "XXService service", "obj.serviceId = service.id"));
-        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_GUID,        "obj.guid",                    DATA_TYPE.STRING,   SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_SIGNATURE,   "obj.resourceSignature",       DATA_TYPE.STRING,   SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_IDS,         "obj.id",                      DATA_TYPE.INT_LIST, SEARCH_TYPE.FULL));
-        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ELEMENTS,    "obj.serviceResourceElements", DATA_TYPE.STRING,   SEARCH_TYPE.PARTIAL));
-        searchFields.add(new SearchField(SearchFilter.TAG_NAMES,                "tagDef.name",                 DATA_TYPE.STR_LIST, SEARCH_TYPE.FULL,    "XXTagResourceMap map, XXTag tag, XXTagDef tagDef", "obj.id = map.resourceId and map.tagId = tag.id and tag.type = tagDef.id"));
+    private static final Logger LOG = LoggerFactory.getLogger(RangerServiceResourceWithTagsService.class);
+
+    public RangerServiceResourceWithTagsService() {
+        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME, "service.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXService service", "obj.serviceId = service.id"));
+        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME_PARTIAL, "service.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL, "XXService service", "obj.serviceId = service.id"));
+        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_GUID, "obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_SIGNATURE, "obj.resourceSignature", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_IDS, "obj.id", DATA_TYPE.INT_LIST, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ELEMENTS, "obj.serviceResourceElements", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+        searchFields.add(new SearchField(SearchFilter.TAG_NAMES, "tagDef.name", DATA_TYPE.STR_LIST, SEARCH_TYPE.FULL, "XXTagResourceMap map, XXTag tag, XXTagDef tagDef", "obj.id = map.resourceId and map.tagId = tag.id and tag.type = tagDef.id"));
 
         sortFields.add(new SortField(SearchFilter.TAG_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC));
-        sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID,  "obj.serviceId"));
-        sortFields.add(new SortField(SearchFilter.CREATE_TIME,     "obj.createTime"));
-        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,     "obj.updateTime"));
+        sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId"));
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
     }
 
-	@Override
-	protected XXServiceResource mapViewToEntityBean(RangerServiceResourceWithTags viewBean, XXServiceResource t, int OPERATION_CONTEXT) {
-		return null;
-	}
+    public RangerServiceResourceWithTags getPopulatedViewObject(XXServiceResource xObj) {
+        return this.populateViewBean(xObj);
+    }
 
-	@Override
-	protected void validateForCreate(RangerServiceResourceWithTags vObj) {
-	}
+    public RangerServiceResourceWithTagsList searchServiceResourcesWithTags(SearchFilter filter) {
+        LOG.debug("==> searchServiceResourcesWithTags({})", filter);
 
-	@Override
-	protected void validateForUpdate(RangerServiceResourceWithTags vObj, XXServiceResource entityObj) {
-	}
+        RangerServiceResourceWithTagsList   ret          = new RangerServiceResourceWithTagsList();
+        List<XXServiceResource>             xObjList     = super.searchResources(filter, searchFields, sortFields, ret);
+        List<RangerServiceResourceWithTags> resourceList = new ArrayList<>();
 
-	public RangerServiceResourceWithTags getPopulatedViewObject(XXServiceResource xObj) {
-		return this.populateViewBean(xObj);
-	}
+        if (xObjList != null) {
+            for (XXServiceResource resource : xObjList) {
+                resourceList.add(getPopulatedViewObject(resource));
+            }
+        }
 
-	public RangerServiceResourceWithTagsList searchServiceResourcesWithTags(SearchFilter filter) {
-		LOG.debug("==> searchServiceResourcesWithTags({})", filter);
+        ret.setResourceList(resourceList);
 
-		RangerServiceResourceWithTagsList   ret          = new RangerServiceResourceWithTagsList();
-		List<XXServiceResource>             xObjList     = super.searchResources(filter, searchFields, sortFields, ret);
-		List<RangerServiceResourceWithTags> resourceList = new ArrayList<>();
+        LOG.debug("<== searchServiceResourcesWithTags({}): ret={}", filter, ret);
 
-		if (xObjList != null) {
-			for (XXServiceResource resource:xObjList) {
-				resourceList.add(getPopulatedViewObject(resource));
-			}
-		}
+        return ret;
+    }
 
-		ret.setResourceList(resourceList);
+    @Override
+    protected XXServiceResource mapViewToEntityBean(RangerServiceResourceWithTags viewBean, XXServiceResource t, int operationContext) {
+        return null;
+    }
 
-		LOG.debug("<== searchServiceResourcesWithTags({}): ret={}", filter, ret);
+    @Override
+    protected void validateForCreate(RangerServiceResourceWithTags vObj) {
+    }
 
-		return ret;
-	}
+    @Override
+    protected void validateForUpdate(RangerServiceResourceWithTags vObj, XXServiceResource entityObj) {
+    }
 
-	@Override
+    @Override
     protected RangerServiceResourceWithTags mapEntityToViewBean(RangerServiceResourceWithTags serviceResourceWithTags, XXServiceResource xxServiceResource) {
-		RangerServiceResourceWithTags ret = super.mapEntityToViewBean(serviceResourceWithTags, xxServiceResource);
+        RangerServiceResourceWithTags ret = super.mapEntityToViewBean(serviceResourceWithTags, xxServiceResource);
 
         if (StringUtils.isNotEmpty(xxServiceResource.getServiceResourceElements())) {
-			try {
-				Map<String, RangerPolicyResource> serviceResourceElements = (Map<String, RangerPolicyResource>) JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
-
-				if (MapUtils.isNotEmpty(serviceResourceElements)) {
-					ret.setResourceElements(serviceResourceElements);
-				} else {
-					LOG.info("Empty serviceResourceElement in [" + ret + "]!!");
-				}
-			} catch (JsonProcessingException e) {
-				LOG.error("Error occurred while processing json", e);
-			}
+            try {
+                Map<String, RangerPolicyResource> serviceResourceElements = (Map<String, RangerPolicyResource>) JsonUtils.jsonToObject(xxServiceResource.getServiceResourceElements(), RangerServiceResourceService.subsumedDataType);
+
+                if (MapUtils.isNotEmpty(serviceResourceElements)) {
+                    ret.setResourceElements(serviceResourceElements);
+                } else {
+                    LOG.info("Empty serviceResourceElement in [{}]!!", ret);
+                }
+            } catch (JsonProcessingException e) {
+                LOG.error("Error occurred while processing json", e);
+            }
         } else {
-            LOG.info("Empty string representing serviceResourceElements in [" + xxServiceResource + "]!!");
+            LOG.info("Empty string representing serviceResourceElements in [{}]!!", xxServiceResource);
         }
 
         return ret;
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
index 57cd20ab3..6c52e05fe 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
@@ -19,9 +19,6 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.ranger.authorization.utils.JsonUtils;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceResource;
@@ -29,39 +26,41 @@ import org.apache.ranger.plugin.model.RangerServiceResourceWithTags;
 import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.util.SearchFilter;
 
-public abstract class RangerServiceResourceWithTagsServiceBase<T extends XXServiceResource, V extends RangerServiceResourceWithTags> extends RangerBaseModelService<T, V> {
+import java.util.ArrayList;
+import java.util.List;
 
-	@Override
-	protected V mapEntityToViewBean(V vObj, T xObj) {
-		XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
+public abstract class RangerServiceResourceWithTagsServiceBase<T extends XXServiceResource, V extends RangerServiceResourceWithTags> extends RangerBaseModelService<T, V> {
+    public PList<V> searchServiceResources(SearchFilter searchFilter) {
+        PList<V> retList       = new PList<V>();
+        List<V>  resourceList  = new ArrayList<V>();
+        List<T>  xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
 
-		vObj.setGuid(xObj.getGuid());
-		vObj.setVersion(xObj.getVersion());
-		vObj.setIsEnabled(xObj.getIsEnabled());
-		vObj.setServiceName(xService.getName());
-		vObj.setAssociatedTags(JsonUtils.jsonToRangerTagList(xObj.getTags()));
+        for (T xResource : xResourceList) {
+            V taggedRes = populateViewBean(xResource);
 
-		return vObj;
-	}
+            resourceList.add(taggedRes);
+        }
 
-	public PList<V> searchServiceResources(SearchFilter searchFilter) {
-		PList<V> retList       = new PList<V>();
-		List<V>  resourceList  = new ArrayList<V>();
-		List<T>  xResourceList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
+        retList.setList(resourceList);
+        retList.setResultSize(resourceList.size());
+        retList.setPageSize(searchFilter.getMaxRows());
+        retList.setStartIndex(searchFilter.getStartIndex());
+        retList.setSortType(searchFilter.getSortType());
+        retList.setSortBy(searchFilter.getSortBy());
 
-		for (T xResource : xResourceList) {
-			V taggedRes = populateViewBean(xResource);
+        return retList;
+    }
 
-			resourceList.add(taggedRes);
-		}
+    @Override
+    protected V mapEntityToViewBean(V vObj, T xObj) {
+        XXService xService = daoMgr.getXXService().getById(xObj.getServiceId());
 
-		retList.setList(resourceList);
-		retList.setResultSize(resourceList.size());
-		retList.setPageSize(searchFilter.getMaxRows());
-		retList.setStartIndex(searchFilter.getStartIndex());
-		retList.setSortType(searchFilter.getSortType());
-		retList.setSortBy(searchFilter.getSortBy());
+        vObj.setGuid(xObj.getGuid());
+        vObj.setVersion(xObj.getVersion());
+        vObj.setIsEnabled(xObj.getIsEnabled());
+        vObj.setServiceName(xService.getName());
+        vObj.setAssociatedTags(JsonUtils.jsonToRangerTagList(xObj.getTags()));
 
-		return retList;
-	}
+        return vObj;
+    }
 }
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 9285ae756..eedbb4f80 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
@@ -17,12 +17,6 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.thirdparty.com.google.common.base.Joiner;
 import org.apache.ranger.biz.GdsDBStore;
@@ -39,164 +33,157 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service
 @Scope("singleton")
 public class RangerServiceService extends RangerServiceServiceBase<XXService, RangerService> {
-	private static final Logger LOG = LoggerFactory.getLogger(RangerServiceService.class.getName());
-
-	@Autowired
-	GdsDBStore gdsStore;
-
-	String actionCreate;
-	String actionUpdate;
-	String actionDelete;
-
-	public RangerServiceService() {
-		super();
-
-		actionCreate = "create";
-		actionUpdate = "update";
-		actionDelete = "delete";
-	}
-
-	@Override
-	protected XXService mapViewToEntityBean(RangerService vObj, XXService xObj, int OPERATION_CONTEXT) {
-		return super.mapViewToEntityBean(vObj, xObj, OPERATION_CONTEXT);
-	}
-
-	@Override
-	protected RangerService mapEntityToViewBean(RangerService vObj, XXService xObj) {
-		return super.mapEntityToViewBean(vObj, xObj);
-	}
-	
-	@Override
-	protected void validateForCreate(RangerService vObj) {
-		// TODO Auto-generated method stub
-		
-	}
-
-	@Override
-	protected void validateForUpdate(RangerService vService, XXService xService) {
-		
-	}
-	
-	@Override
-	protected RangerService populateViewBean(XXService 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) {
-			String configValue = svcConfMap.getConfigvalue();
-			
-			if(StringUtils.equalsIgnoreCase(svcConfMap.getConfigkey(), ServiceDBStore.CONFIG_KEY_PASSWORD)) {
-				configValue = ServiceDBStore.HIDDEN_PASSWORD_STR;
-			}
-			configs.put(svcConfMap.getConfigkey(), configValue);
-		}
-		vService.setConfigs(configs);
-		return vService;
-	}
-
-	public RangerService getPopulatedViewObject(XXService xService) {
-		return this.populateViewBean(xService);
-	}
-	
-	public List<RangerService> getAllServices() {
-		List<XXService> xxServiceList = daoMgr.getXXService().getAll();
-		List<RangerService> serviceList = new ArrayList<RangerService>();
-		
-		for(XXService xxService : xxServiceList) {
-			RangerService service = populateViewBean(xxService);
-			serviceList.add(service);
-		}
-		return serviceList;
-	}
-
-	public Map<String, String> getConfigsWithDecryptedPassword(RangerService service) throws Exception  {
-		Map<String, String> configs = service.getConfigs();
-		
-		String pwd = configs.get(ServiceDBStore.CONFIG_KEY_PASSWORD);
-		if(!stringUtil.isEmpty(pwd) && ServiceDBStore.HIDDEN_PASSWORD_STR.equalsIgnoreCase(pwd)) {
-			XXServiceConfigMap pwdConfig = daoMgr.getXXServiceConfigMap().findByServiceAndConfigKey(service.getId(),
-					ServiceDBStore.CONFIG_KEY_PASSWORD);
-
-			if (pwdConfig != null) {
-				String encryptedPwd = pwdConfig.getConfigvalue();
-				if (encryptedPwd.contains(",")) {
-					PasswordUtils util = PasswordUtils.build(encryptedPwd);
-					String freeTextPasswordMetaData = Joiner.on(",").skipNulls().join(util.getCryptAlgo(),
-							new String(util.getEncryptKey()), new String(util.getSalt()), util.getIterationCount(),
-							PasswordUtils.needsIv(util.getCryptAlgo()) ? util.getIvAsString() : null);
-					String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
-					if (StringUtils
-							.equalsIgnoreCase(
-									freeTextPasswordMetaData + ","
-											+ PasswordUtils
-													.encryptPassword(freeTextPasswordMetaData + "," + decryptedPwd),
-									encryptedPwd)) {
-						configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd); // XXX: method name is
-																						// getConfigsWithDecryptedPassword,
-																						// then why do we store the
-																						// encryptedPwd?
-					}
-				} else {
-					String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
-					if (StringUtils.equalsIgnoreCase(PasswordUtils.encryptPassword(decryptedPwd), encryptedPwd)) {
-						configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd); // XXX: method name is
-																						// getConfigsWithDecryptedPassword,
-																						// then why do we store the
-																						// encryptedPwd?
-					}
-				}
-			}
-		}
-		return configs;
-	}
-
-	@Override
-	public RangerService postCreate(XXService xObj) {
-		XXServiceVersionInfo serviceVersionInfo = new XXServiceVersionInfo();
-
-		serviceVersionInfo.setServiceId(xObj.getId());
-		serviceVersionInfo.setPolicyVersion(1L);
-		serviceVersionInfo.setTagVersion(1L);
-		serviceVersionInfo.setRoleVersion(1L);
-		serviceVersionInfo.setGdsVersion(1L);
-		Date now = new Date();
-		serviceVersionInfo.setPolicyUpdateTime(now);
-		serviceVersionInfo.setTagUpdateTime(now);
-		serviceVersionInfo.setRoleUpdateTime(now);
-		serviceVersionInfo.setGdsUpdateTime(now);
-
-		XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
-
-		XXServiceVersionInfo createdServiceVersionInfo = serviceVersionInfoDao.create(serviceVersionInfo);
-
-		return createdServiceVersionInfo != null ? super.postCreate(xObj) : null;
-	}
-
-	@Override
-	protected XXService preDelete(Long id) {
-		XXService ret = super.preDelete(id);
-
-		if (ret != null) {
-			try {
-				gdsStore.deleteAllGdsObjectsForService(id);
-			} catch (Exception excp) {
-				LOG.error("Error deleting GDS objects for service(id={})", id, excp);
-			}
-
-			XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
-
-			XXServiceVersionInfo serviceVersionInfo = serviceVersionInfoDao.findByServiceId(id);
-
-			if (serviceVersionInfo != null) {
-				serviceVersionInfoDao.remove(serviceVersionInfo.getId());
-			}
-		}
-		return ret;
-	}
+    private static final Logger LOG = LoggerFactory.getLogger(RangerServiceService.class.getName());
+
+    @Autowired
+    GdsDBStore gdsStore;
+
+    String actionCreate;
+    String actionUpdate;
+    String actionDelete;
+
+    public RangerServiceService() {
+        super();
+
+        actionCreate = "create";
+        actionUpdate = "update";
+        actionDelete = "delete";
+    }
+
+    public RangerService getPopulatedViewObject(XXService xService) {
+        return this.populateViewBean(xService);
+    }
+
+    public List<RangerService> getAllServices() {
+        List<XXService>     xxServiceList = daoMgr.getXXService().getAll();
+        List<RangerService> serviceList   = new ArrayList<>();
+
+        for (XXService xxService : xxServiceList) {
+            RangerService service = populateViewBean(xxService);
+            serviceList.add(service);
+        }
+        return serviceList;
+    }
+
+    public Map<String, String> getConfigsWithDecryptedPassword(RangerService service) throws Exception {
+        Map<String, String> configs = service.getConfigs();
+
+        String pwd = configs.get(ServiceDBStore.CONFIG_KEY_PASSWORD);
+        if (!stringUtil.isEmpty(pwd) && ServiceDBStore.HIDDEN_PASSWORD_STR.equalsIgnoreCase(pwd)) {
+            XXServiceConfigMap pwdConfig = daoMgr.getXXServiceConfigMap().findByServiceAndConfigKey(service.getId(), ServiceDBStore.CONFIG_KEY_PASSWORD);
+
+            if (pwdConfig != null) {
+                String encryptedPwd = pwdConfig.getConfigvalue();
+                if (encryptedPwd.contains(",")) {
+                    PasswordUtils util                     = PasswordUtils.build(encryptedPwd);
+                    String        freeTextPasswordMetaData = Joiner.on(",").skipNulls().join(util.getCryptAlgo(), new String(util.getEncryptKey()), new String(util.getSalt()), util.getIterationCount(), PasswordUtils.needsIv(util.getCryptAlgo()) ? util.getIvAsString() : null);
+                    String        decryptedPwd             = PasswordUtils.decryptPassword(encryptedPwd);
+                    if (StringUtils.equalsIgnoreCase(freeTextPasswordMetaData + "," + PasswordUtils.encryptPassword(freeTextPasswordMetaData + "," + decryptedPwd), encryptedPwd)) {
+                        configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd);
+                        // XXX: method name is getConfigsWithDecryptedPassword, then why do we store the encryptedPwd?
+                    }
+                } else {
+                    String decryptedPwd = PasswordUtils.decryptPassword(encryptedPwd);
+                    if (StringUtils.equalsIgnoreCase(PasswordUtils.encryptPassword(decryptedPwd), encryptedPwd)) {
+                        configs.put(ServiceDBStore.CONFIG_KEY_PASSWORD, encryptedPwd);
+                        // XXX: method name is getConfigsWithDecryptedPassword, then why do we store the encryptedPwd?
+                    }
+                }
+            }
+        }
+        return configs;
+    }
+
+    @Override
+    public RangerService postCreate(XXService xObj) {
+        XXServiceVersionInfo serviceVersionInfo = new XXServiceVersionInfo();
+
+        serviceVersionInfo.setServiceId(xObj.getId());
+        serviceVersionInfo.setPolicyVersion(1L);
+        serviceVersionInfo.setTagVersion(1L);
+        serviceVersionInfo.setRoleVersion(1L);
+        serviceVersionInfo.setGdsVersion(1L);
+
+        Date now = new Date();
+
+        serviceVersionInfo.setPolicyUpdateTime(now);
+        serviceVersionInfo.setTagUpdateTime(now);
+        serviceVersionInfo.setRoleUpdateTime(now);
+        serviceVersionInfo.setGdsUpdateTime(now);
+
+        XXServiceVersionInfoDao serviceVersionInfoDao     = daoMgr.getXXServiceVersionInfo();
+        XXServiceVersionInfo    createdServiceVersionInfo = serviceVersionInfoDao.create(serviceVersionInfo);
+
+        return createdServiceVersionInfo != null ? super.postCreate(xObj) : null;
+    }
+
+    @Override
+    protected RangerService populateViewBean(XXService xService) {
+        RangerService            vService         = super.populateViewBean(xService);
+        HashMap<String, String>  configs          = new HashMap<>();
+        List<XXServiceConfigMap> svcConfigMapList = daoMgr.getXXServiceConfigMap().findByServiceId(xService.getId());
+
+        for (XXServiceConfigMap svcConfMap : svcConfigMapList) {
+            String configValue = svcConfMap.getConfigvalue();
+
+            if (StringUtils.equalsIgnoreCase(svcConfMap.getConfigkey(), ServiceDBStore.CONFIG_KEY_PASSWORD)) {
+                configValue = ServiceDBStore.HIDDEN_PASSWORD_STR;
+            }
+
+            configs.put(svcConfMap.getConfigkey(), configValue);
+        }
+
+        vService.setConfigs(configs);
+
+        return vService;
+    }
+
+    @Override
+    protected void validateForCreate(RangerService vObj) {
+    }
+
+    @Override
+    protected void validateForUpdate(RangerService vService, XXService xService) {
+    }
+
+    @Override
+    protected XXService preDelete(Long id) {
+        XXService ret = super.preDelete(id);
+
+        if (ret != null) {
+            try {
+                gdsStore.deleteAllGdsObjectsForService(id);
+            } catch (Exception excp) {
+                LOG.error("Error deleting GDS objects for service(id={})", id, excp);
+            }
+
+            XXServiceVersionInfoDao serviceVersionInfoDao = daoMgr.getXXServiceVersionInfo();
+            XXServiceVersionInfo    serviceVersionInfo    = serviceVersionInfoDao.findByServiceId(id);
+
+            if (serviceVersionInfo != null) {
+                serviceVersionInfoDao.remove(serviceVersionInfo.getId());
+            }
+        }
+
+        return ret;
+    }
+
+    @Override
+    protected XXService mapViewToEntityBean(RangerService vObj, XXService xObj, int operationContext) {
+        return super.mapViewToEntityBean(vObj, xObj, operationContext);
+    }
+
+    @Override
+    protected RangerService mapEntityToViewBean(RangerService vObj, XXService xObj) {
+        return super.mapEntityToViewBean(vObj, xObj);
+    }
 }
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 b09c72697..98857638e 100755
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
@@ -17,13 +17,14 @@
 
 package org.apache.ranger.service;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.commons.lang.StringUtils;
-import org.apache.ranger.common.*;
+import org.apache.ranger.common.AppConstants;
+import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.MessageEnums;
+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.SortField;
 import org.apache.ranger.common.SortField.SORT_ORDER;
 import org.apache.ranger.common.view.VTrxLogAttr;
 import org.apache.ranger.entity.XXService;
@@ -35,146 +36,150 @@ import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.view.RangerServiceList;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public abstract class RangerServiceServiceBase<T extends XXServiceBase, V extends RangerService> extends RangerAuditedModelService<T, V> {
-	
-	@Autowired
-	GUIDUtil guidUtil;
-	
-	public RangerServiceServiceBase() {
-		super(AppConstants.CLASS_TYPE_XA_SERVICE, AppConstants.CLASS_TYPE_XA_SERVICE_DEF);
-
-		trxLogAttrs.put("name",        new VTrxLogAttr("name", "Service Name", false, true));
-		trxLogAttrs.put("displayName", new VTrxLogAttr("displayName", "Service Display Name"));
-		trxLogAttrs.put("description", new VTrxLogAttr("description", "Service Description"));
-		trxLogAttrs.put("isEnabled",   new VTrxLogAttr("isEnabled", "Service Status"));
-		trxLogAttrs.put("configs",     new VTrxLogAttr("configs", "Connection Configurations"));
-		trxLogAttrs.put("tagService",  new VTrxLogAttr("tagService", "Tag Service Name"));
-
-		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_DISPLAY_NAME, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.SERVICE_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
-		searchFields.add(new SearchField(SearchFilter.SERVICE_DISPLAY_NAME_PARTIAL, "obj.displayName", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
-		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));
-		searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, "obj.tagService", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
-		searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME, "xTagSvc.name", DATA_TYPE.STRING,
-				SEARCH_TYPE.FULL, "XXServiceBase xTagSvc", "obj.tagService = xTagSvc.id"));
-
-		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", true, SORT_ORDER.ASC));
-		sortFields.add(new SortField(SearchFilter.SERVICE_NAME, "obj.name"));
-		sortFields.add(new SortField(SearchFilter.SERVICE_DISPLAY_NAME, "obj.displayName"));
-	}
-
-	@Override
-	protected T mapViewToEntityBean(V vObj, T xObj, int OPERATION_CONTEXT) {
-		String guid = (StringUtils.isEmpty(vObj.getGuid())) ? guidUtil.genGUID() : vObj.getGuid();
-		
-		xObj.setGuid(guid);
-		
-		XXServiceDef xServiceDef = daoMgr.getXXServiceDef().findByName(vObj.getType());
-
-		if(xServiceDef == null) {
-			throw restErrorUtil.createRESTException(
-					"No ServiceDefinition found with name :" + vObj.getType(),
-					MessageEnums.INVALID_INPUT_DATA);
-		}
-
-		Long   tagServiceId   = null;
-		String tagServiceName = vObj.getTagService();
... 12265 lines suppressed ...