You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/08/15 02:50:20 UTC

incubator-ranger git commit: RANGER-595: CRUDs of Tag def - Support for persisting tag info in the database

Repository: incubator-ranger
Updated Branches:
  refs/heads/tag-policy 3130174ef -> 532e2e04d


RANGER-595: CRUDs of Tag def - Support for persisting tag info in the database

Signed-off-by: Madhan Neethiraj <ma...@apache.org>


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

Branch: refs/heads/tag-policy
Commit: 532e2e04da0b7c537c3dc3351bb59b0af8eecc53
Parents: 3130174
Author: Gautam Borad <gb...@gmail.com>
Authored: Fri Aug 14 17:30:03 2015 +0530
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Fri Aug 14 17:24:48 2015 -0700

----------------------------------------------------------------------
 .../apache/ranger/plugin/store/TagStore.java    |   4 +-
 .../ranger/plugin/store/file/TagFileStore.java  |  51 +++--
 .../java/org/apache/ranger/biz/TagDBStore.java  | 190 +++++++++++++++++--
 .../java/org/apache/ranger/db/XXTagDefDao.java  |  19 ++
 .../java/org/apache/ranger/rest/TagREST.java    |  32 ++--
 .../ranger/service/RangerBaseModelService.java  |  32 +++-
 .../ranger/service/RangerTagDefService.java     |  13 ++
 .../ranger/service/RangerTagDefServiceBase.java |  23 +++
 .../service/RangerTaggedResourceService.java    |   8 +
 .../RangerTaggedResourceServiceBase.java        |  17 ++
 .../resources/META-INF/jpa_named_queries.xml    |   4 +
 11 files changed, 338 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java
index d909e56..3e61f92 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java
@@ -42,7 +42,9 @@ public interface TagStore {
 
     void deleteTagDef(String name) throws Exception;
 
-    RangerTagDef getTagDef(String name) throws Exception;
+	void deleteTagDefById(Long id) throws Exception;
+
+	List<RangerTagDef> getTagDef(String name) throws Exception;
 
     RangerTagDef getTagDefById(Long id) throws Exception;
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java
index 24a49bd..6538060 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java
@@ -115,10 +115,10 @@ public class TagFileStore extends AbstractTagStore {
 			LOG.debug("==> TagFileStore.createTagDef(" + tagDef + ")");
 		}
 
-		RangerTagDef existing = getTagDef(tagDef.getName());
+		List<RangerTagDef> existing = getTagDef(tagDef.getName());
 
-		if (existing != null) {
-			throw new Exception(tagDef.getName() + ": tag-def already exists (id=" + existing.getId() + ")");
+		if (CollectionUtils.isNotEmpty(existing)) {
+			throw new Exception(tagDef.getName() + ": tag-def already exists (id=" + existing.get(0).getId() + ")");
 		}
 
 		RangerTagDef ret;
@@ -150,12 +150,23 @@ public class TagFileStore extends AbstractTagStore {
 			LOG.debug("==> TagFileStore.updateTagDef(" + tagDef + ")");
 		}
 
-		RangerTagDef existing = getTagDef(tagDef.getName());
+		RangerTagDef existing = null;
 
-		if (existing == null) {
-			throw new Exception(tagDef.getName() + ": tag-def does not exist (id=" + tagDef.getId() + ")");
+		if(tagDef.getId() == null) {
+			List<RangerTagDef> existingDefs = getTagDef(tagDef.getName());
+
+			if (CollectionUtils.isEmpty(existingDefs)) {
+				throw new Exception("tag-def does not exist: name=" + tagDef.getName());
+			}
+		} else {
+			existing = this.getTagDefById(tagDef.getId());
+
+			if (existing == null) {
+				throw new Exception("tag-def does not exist: id=" + tagDef.getId());
+			}
 		}
 
+
 		RangerTagDef ret;
 
 		try {
@@ -186,20 +197,22 @@ public class TagFileStore extends AbstractTagStore {
 			LOG.debug("==> TagFileStore.deleteTagDef(" + name + ")");
 		}
 
-		RangerTagDef existing = getTagDef(name);
+		List<RangerTagDef> existingDefs = getTagDef(name);
 
-		if (existing == null) {
-			throw new Exception("no tag-def exists with ID=" + name);
+		if (CollectionUtils.isEmpty(existingDefs)) {
+			throw new Exception("no tag-def exists with name=" + name);
 		}
 
 		try {
-			Path filePath = new Path(fileStoreUtil.getDataFile(FILE_PREFIX_TAG_DEF, existing.getId()));
+			for(RangerTagDef existing : existingDefs) {
+				Path filePath = new Path(fileStoreUtil.getDataFile(FILE_PREFIX_TAG_DEF, existing.getId()));
 
-			preDelete(existing);
+				preDelete(existing);
 
-			fileStoreUtil.deleteFile(filePath);
+				fileStoreUtil.deleteFile(filePath);
 
-			postDelete(existing);
+				postDelete(existing);
+			}
 		} catch (Exception excp) {
 			throw new Exception("failed to delete tag-def with ID=" + name, excp);
 		}
@@ -211,19 +224,19 @@ public class TagFileStore extends AbstractTagStore {
 	}
 
 	@Override
-	public RangerTagDef getTagDef(String name) throws Exception {
+	public List<RangerTagDef> getTagDef(String name) throws Exception {
 		if (LOG.isDebugEnabled()) {
 			LOG.debug("==> TagFileStore.getTagDef(" + name + ")");
 		}
 
-		RangerTagDef ret;
+		List<RangerTagDef> ret;
 
 		if (StringUtils.isNotBlank(name)) {
 			SearchFilter filter = new SearchFilter(SearchFilter.TAG_DEF_NAME, name);
 
 			List<RangerTagDef> tagDefs = getTagDefs(filter);
 
-			ret = CollectionUtils.isEmpty(tagDefs) ? null : tagDefs.get(0);
+			ret = CollectionUtils.isEmpty(tagDefs) ? null : tagDefs;
 		} else {
 			ret = null;
 		}
@@ -725,5 +738,11 @@ public class TagFileStore extends AbstractTagStore {
 
 		return matchedTagList;
 	}
+
+	@Override
+	public void deleteTagDefById(Long id) throws Exception {
+		// TODO Auto-generated method stub
+
+	}
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
index c424425..922c86c 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
@@ -22,6 +22,7 @@ package org.apache.ranger.biz;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -42,6 +43,7 @@ import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.entity.XXTag;
 import org.apache.ranger.entity.XXTagAttribute;
+import org.apache.ranger.entity.XXTagAttributeDef;
 import org.apache.ranger.entity.XXTagResourceMap;
 import org.apache.ranger.entity.XXTaggedResource;
 import org.apache.ranger.entity.XXTaggedResourceValue;
@@ -51,6 +53,7 @@ import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.model.RangerTagDef;
 import org.apache.ranger.plugin.model.RangerTaggedResource;
+import org.apache.ranger.plugin.model.RangerTagDef.RangerTagAttributeDef;
 import org.apache.ranger.plugin.model.RangerTaggedResource.RangerResourceTag;
 import org.apache.ranger.plugin.model.RangerTaggedResourceKey;
 import org.apache.ranger.plugin.policyresourcematcher.RangerDefaultPolicyResourceMatcher;
@@ -102,44 +105,168 @@ public class TagDBStore implements TagStore {
 
 	@Override
 	public RangerTagDef createTagDef(RangerTagDef tagDef) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("==> TagDBStore.createTagDef(" + tagDef + ")");
+		}
+
+		RangerTagDef ret;
+
+		try {
+			ret = rangerTagDefService.create(tagDef);
+
+			createTagAttributeDefs(ret.getId(), tagDef.getAttributeDefs());
+
+			ret = rangerTagDefService.read(ret.getId());
+
+		} catch (Exception e) {
+			throw errorUtil.createRESTException("failed to save tag-def [" + tagDef.getName() + "]", MessageEnums.ERROR_CREATING_OBJECT);
+		}
+
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("<== TagDBStore.createTagDef(" + tagDef + ")");
+		}
+
+		return ret;
 	}
 
 	@Override
-	public RangerTagDef updateTagDef(RangerTagDef TagDef) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+	public RangerTagDef updateTagDef(RangerTagDef tagDef) throws Exception {
+
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("==> TagDBStore.updateTagDef(" + tagDef + ")");
+		}
+
+		RangerTagDef existing = rangerTagDefService.read(tagDef.getId());
+		RangerTagDef ret = null;
+		if (existing == null) {
+			throw errorUtil.createRESTException("failed to update tag-def [" + tagDef.getName() + "], Reason: No TagDef found with id: [" + tagDef.getId() + "]",
+					MessageEnums.DATA_NOT_UPDATABLE);
+		}
+
+		if (StringUtils.isEmpty(tagDef.getCreatedBy())) {
+			tagDef.setCreatedBy(existing.getCreatedBy());
+		}
+		if (tagDef.getCreateTime() == null) {
+			tagDef.setCreateTime(existing.getCreateTime());
+		}
+		if (StringUtils.isEmpty(tagDef.getGuid())) {
+			tagDef.setGuid(existing.getGuid());
+		}
+
+		ret = rangerTagDefService.update(tagDef);
+
+		deleteTagAttributeDefs(ret.getId());
+
+		createTagAttributeDefs(ret.getId(), tagDef.getAttributeDefs());
+
+		return rangerTagDefService.read(ret.getId());
+	}
+
+	private List<XXTagAttributeDef> createTagAttributeDefs(Long tagDefId, List<RangerTagAttributeDef> tagAttrDefList) {
+
+		if (tagDefId == null) {
+			throw errorUtil.createRESTException("TagDBStore.createTagAttributeDefs(): Error creating tag-attr def. tagDefId can not be null.", MessageEnums.ERROR_CREATING_OBJECT);
+		}
+
+		if (CollectionUtils.isEmpty(tagAttrDefList)) {
+			return null;
+		}
+
+		List<XXTagAttributeDef> xTagAttrDefList = new ArrayList<XXTagAttributeDef>();
+		for (RangerTagDef.RangerTagAttributeDef attrDef : tagAttrDefList) {
+			XXTagAttributeDef xAttrDef = new XXTagAttributeDef();
+
+			xAttrDef.setGuid(guidUtil.genGUID());
+			xAttrDef.setTagDefId(tagDefId);
+			xAttrDef.setName(attrDef.getName());
+			xAttrDef.setType(attrDef.getType());
+			xAttrDef = (XXTagAttributeDef) rangerAuditFields.populateAuditFieldsForCreate(xAttrDef);
+
+			xAttrDef = daoManager.getXXTagAttributeDef().create(xAttrDef);
+
+			xTagAttrDefList.add(xAttrDef);
+		}
+		return xTagAttrDefList;
+	}
+
+	private void deleteTagAttributeDefs(Long tagDefId) {
+		if (tagDefId == null) {
+			return;
+		}
+		List<XXTagAttributeDef> tagAttrDefList = daoManager.getXXTagAttributeDef().findByTagDefId(tagDefId);
+
+		if (CollectionUtils.isEmpty(tagAttrDefList)) {
+			return;
+		}
+
+		for (XXTagAttributeDef xAttrDef : tagAttrDefList) {
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Deleting tag-attribute def [" + xAttrDef.getName() + "]");
+			}
+			daoManager.getXXTagAttributeDef().remove(xAttrDef);
+		}
 	}
 
 	@Override
 	public void deleteTagDef(String name) throws Exception {
-		// TODO Auto-generated method stub
 
+		if (StringUtils.isNotBlank(name)) {
+			return;
+		}
+
+		List<RangerTagDef> ret;
+
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Deleting all tag-defs with name [" + name + "]");
+		}
+
+		SearchFilter filter = new SearchFilter(SearchFilter.TAG_DEF_NAME, name);
+		ret = getTagDefs(filter);
+
+		for (RangerTagDef tagDef : ret) {
+			LOG.info("Deleting tag-def with name [" + name + "]");
+			rangerTagDefService.delete(tagDef);
+		}
 	}
 
 	@Override
-	public RangerTagDef getTagDef(String name) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+	public void deleteTagDefById(Long id) throws Exception {
+		if (LOG.isDebugEnabled()) {
+			LOG.debug("Deleting tag-def [" + id + "]");
+		}
+
+		RangerTagDef tagDef = rangerTagDefService.read(id);
+
+		rangerTagDefService.delete(tagDef);
+	}
+
+	@Override
+	public List<RangerTagDef> getTagDef(String name) throws Exception {
+
+		List<RangerTagDef> ret;
+		if (StringUtils.isNotBlank(name)) {
+			SearchFilter filter = new SearchFilter(SearchFilter.TAG_DEF_NAME, name);
+			ret = getTagDefs(filter);
+		} else {
+			ret = null;
+		}
+		return ret;
 	}
 
 	@Override
 	public RangerTagDef getTagDefById(Long id) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+		return rangerTagDefService.read(id);
 	}
 
 	@Override
 	public List<RangerTagDef> getTagDefs(SearchFilter filter) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+		return getPaginatedTagDefs(filter).getList();
 	}
 
 	@Override
 	public PList<RangerTagDef> getPaginatedTagDefs(SearchFilter filter) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+		return rangerTagDefService.searchRangerTagDefs(filter);
 	}
 
 	@Override
@@ -319,6 +446,9 @@ public class TagDBStore implements TagStore {
 			if (resource.getCreateTime() == null) {
 				resource.setCreateTime(existing.getCreateTime());
 			}
+			if (StringUtils.isEmpty(resource.getGuid())) {
+				resource.setGuid(existing.getGuid());
+			}
 
 			ret = rangerTaggedResourceService.update(resource);
 			ret.setTags(resource.getTags());
@@ -410,20 +540,38 @@ public class TagDBStore implements TagStore {
 
 	@Override
 	public TagServiceResources getResources(String serviceName, Long lastTimestamp) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+
+		List<RangerTaggedResource> taggedResources;
+
+		SearchFilter filter = new SearchFilter();
+
+		if (StringUtils.isNotBlank(serviceName)) {
+			filter.setParam(SearchFilter.TAG_RESOURCE_SERVICE_NAME, serviceName);
+		}
+
+		if (lastTimestamp != null) {
+			filter.setParam(SearchFilter.TAG_RESOURCE_TIMESTAMP, Long.toString(lastTimestamp.longValue()));
+		}
+
+		taggedResources = getResources(filter);
+
+		TagServiceResources ret = new TagServiceResources();
+		ret.setTaggedResources(taggedResources);
+		// TBD
+		ret.setLastUpdateTime(new Date());
+		ret.setVersion(1L);
+
+		return ret;
 	}
 
 	@Override
 	public List<RangerTaggedResource> getResources(SearchFilter filter) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+		return getPaginatedResources(filter).getList();
 	}
 
 	@Override
 	public PList<RangerTaggedResource> getPaginatedResources(SearchFilter filter) throws Exception {
-		// TODO Auto-generated method stub
-		return null;
+		return rangerTaggedResourceService.searchRangerTaggedResources(filter);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/db/XXTagDefDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXTagDefDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXTagDefDao.java
index f4c00da..971b589 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXTagDefDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXTagDefDao.java
@@ -19,6 +19,12 @@
 
 package org.apache.ranger.db;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.NoResultException;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXTagDef;
 
@@ -28,4 +34,17 @@ public class XXTagDefDao extends BaseDao<XXTagDef> {
 		super(daoManager);
 	}
 
+	public List<XXTagDef> findByName(String name) {
+		if (StringUtils.isEmpty(name)) {
+			return new ArrayList<XXTagDef>();
+		}
+
+		try {
+			return getEntityManager().createNamedQuery("XXTagDef.findByName", tClass)
+					.setParameter("name", name).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXTagDef>();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
index 0837290..5af0b66 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
@@ -100,18 +100,18 @@ public class TagREST {
     }
 
     @PUT
-    @Path(TagRESTConstants.TAG_RESOURCE + "/{name}")
+    @Path(TagRESTConstants.TAG_RESOURCE + "/{id}")
     @Produces({ "application/json", "application/xml" })
     //@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
 
-    public RangerTagDef updateTagDef(@PathParam("name") String name, RangerTagDef tagDef) {
+    public RangerTagDef updateTagDef(@PathParam("id") Long id, RangerTagDef tagDef) {
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.updateTagDef(" + name + ")");
+            LOG.debug("==> TagREST.updateTagDef(" + id + ")");
         }
-        if (tagDef.getName() == null) {
-            tagDef.setName(name);
-        } else if (!tagDef.getName().equals(name)) {
+        if (tagDef.getId() == null) {
+            tagDef.setId(id);
+        } else if (!tagDef.getId().equals(id)) {
             throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST , "tag name mismatch", true);
         }
 
@@ -120,49 +120,49 @@ public class TagREST {
         try {
             ret = tagStore.updateTagDef(tagDef);
         } catch (Exception excp) {
-            LOG.error("updateTagDef(" + name + ") failed", excp);
+            LOG.error("updateTagDef(" + id + ") failed", excp);
             throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
         }
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.updateTagDef(" + name + ")");
+            LOG.debug("<== TagREST.updateTagDef(" + id + ")");
         }
 
         return ret;
     }
 
     @DELETE
-    @Path(TagRESTConstants.TAG_RESOURCE + "/{name}")
+    @Path(TagRESTConstants.TAG_RESOURCE + "/{id}")
     @Produces({ "application/json", "application/xml" })
     //@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public void deleteTagDef(@PathParam("name") String name) {
+    public void deleteTagDef(@PathParam("id") Long id) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.deleteTagDef(" + name + ")");
+            LOG.debug("==> TagREST.deleteTagDef(" + id + ")");
         }
 
         try {
             //RangerTagDefValidator validator = validatorFactory.getTagDefValidator(tagStore);
             //validator.validate(guid, Action.DELETE);
-            tagStore.deleteTagDef(name);
+            tagStore.deleteTagDefById(id);
         } catch(Exception excp) {
-            LOG.error("deleteTagDef(" + name + ") failed", excp);
+            LOG.error("deleteTagDef(" + id + ") failed", excp);
 
             throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.deleteTagDef(" + name + ")");
+            LOG.debug("<== TagREST.deleteTagDef(" + id + ")");
         }
     }
 
     @GET
     @Path(TagRESTConstants.TAG_RESOURCE+"/{name}")
     @Produces({ "application/json", "application/xml" })
-    public RangerTagDef getTagDefByName(@PathParam("name") String name) {
+    public List<RangerTagDef> getTagDefByName(@PathParam("name") String name) {
         if(LOG.isDebugEnabled()) {
             LOG.debug("==> TagREST.getTagDefByName(" + name + ")");
         }
 
-        RangerTagDef ret;
+        List<RangerTagDef> ret;
 
         try {
             ret = tagStore.getTagDef(name);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
----------------------------------------------------------------------
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 ee1b589..9ecd77e 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
@@ -44,6 +44,7 @@ import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXDBBase;
 import org.apache.ranger.entity.XXPortalUser;
 import org.apache.ranger.plugin.model.RangerBaseModelObject;
+import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -400,7 +401,36 @@ public abstract class RangerBaseModelService<T extends XXDBBase, V extends Range
 		}
 		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;
+	}
+
 	protected long getCountForSearchQuery(SearchFilter searchCriteria, List<SearchField> searchFieldList) {
 
 		String q = countQueryStr;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
index 25fc278..9ed70b3 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
@@ -19,13 +19,22 @@
 
 package org.apache.ranger.service;
 
+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.entity.XXTagDef;
 import org.apache.ranger.plugin.model.RangerTagDef;
+import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.stereotype.Service;
 
 @Service
 public class RangerTagDefService extends RangerTagDefServiceBase<XXTagDef, RangerTagDef> {
 
+	public RangerTagDefService() {
+		searchFields.add(new SearchField(SearchFilter.TAG_DEF_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+		searchFields.add(new SearchField(SearchFilter.TAG_DEF_NAME, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+	}
+	
 	@Override
 	protected void validateForCreate(RangerTagDef vObj) {
 
@@ -36,4 +45,8 @@ public class RangerTagDefService extends RangerTagDefServiceBase<XXTagDef, Range
 
 	}
 
+	public RangerTagDef getPopulatedViewObjject(XXTagDef xObj) {
+		return populateViewBean(xObj);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
index 8b2d8a9..1b4aa26 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
@@ -24,11 +24,14 @@ import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.RangerConfigUtil;
 import org.apache.ranger.entity.XXDBBase;
 import org.apache.ranger.entity.XXTagAttributeDef;
 import org.apache.ranger.entity.XXTagDef;
 import org.apache.ranger.plugin.model.RangerTagDef;
 import org.apache.ranger.plugin.model.RangerTagDef.RangerTagAttributeDef;
+import org.apache.ranger.plugin.store.PList;
+import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public abstract class RangerTagDefServiceBase<T extends XXTagDef, V extends RangerTagDef> extends
@@ -39,6 +42,9 @@ public abstract class RangerTagDefServiceBase<T extends XXTagDef, V extends Rang
 
 	@Autowired
 	RangerAuditFields<XXDBBase> rangerAuditFields;
+	
+	@Autowired
+	RangerConfigUtil configUtil;
 
 	@Override
 	@SuppressWarnings("unchecked")
@@ -112,4 +118,21 @@ public abstract class RangerTagDefServiceBase<T extends XXTagDef, V extends Rang
 		xTagAttrDef.setType(attrDef.getType());
 		return xTagAttrDef;
 	}
+
+	@SuppressWarnings("unchecked")
+	public PList<RangerTagDef> searchRangerTagDefs(SearchFilter searchFilter) {
+		PList<RangerTagDef> retList = new PList<RangerTagDef>();
+		List<RangerTagDef> tagDefList = new ArrayList<RangerTagDef>();
+
+		List<XXTagDef> xTagDefList = (List<XXTagDef>) searchRangerObjects(searchFilter, searchFields, sortFields, (PList<V>) retList);
+
+		for (XXTagDef xTagDef : xTagDefList) {
+			RangerTagDef tagDef = populateViewBean((T) xTagDef);
+			tagDefList.add(tagDef);
+		}
+
+		retList.setList(tagDefList);
+
+		return retList;
+	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java
index 67efcad..a0e7997 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceService.java
@@ -19,13 +19,21 @@
 
 package org.apache.ranger.service;
 
+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.entity.XXTaggedResource;
 import org.apache.ranger.plugin.model.RangerTaggedResource;
+import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.stereotype.Service;
 
 @Service
 public class RangerTaggedResourceService extends RangerTaggedResourceServiceBase<XXTaggedResource, RangerTaggedResource> {
 
+	public RangerTaggedResourceService() {
+		searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+	}
+
 	@Override
 	protected void validateForCreate(RangerTaggedResource vObj) {
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java
index c50c1fd..f673466 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerTaggedResourceServiceBase.java
@@ -38,6 +38,8 @@ import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerTaggedResource;
 import org.apache.ranger.plugin.model.RangerTaggedResourceKey;
 import org.apache.ranger.plugin.model.RangerTaggedResource.RangerResourceTag;
+import org.apache.ranger.plugin.store.PList;
+import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public abstract class RangerTaggedResourceServiceBase<T extends XXTaggedResource, V extends RangerTaggedResource> extends RangerBaseModelService<T, V> {
@@ -144,4 +146,19 @@ public abstract class RangerTaggedResourceServiceBase<T extends XXTaggedResource
 		return key;
 	}
 
+	@SuppressWarnings("unchecked")
+	public PList<RangerTaggedResource> searchRangerTaggedResources(SearchFilter searchFilter) {
+		PList<RangerTaggedResource> retList = new PList<RangerTaggedResource>();
+		List<RangerTaggedResource> taggedResList = new ArrayList<RangerTaggedResource>();
+
+		List<XXTaggedResource> xTaggedResList = (List<XXTaggedResource>) searchRangerObjects(searchFilter, searchFields, sortFields, (PList<V>) retList);
+
+		for (XXTaggedResource xTaggedRes : xTaggedResList) {
+			RangerTaggedResource taggedRes = populateViewBean((T) xTaggedRes);
+			taggedResList.add(taggedRes);
+		}
+		retList.setList(taggedResList);
+		return retList;
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/532e2e04/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
----------------------------------------------------------------------
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index 090b70c..555dfb0 100644
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -576,6 +576,10 @@
 	<named-query name="XXTag.findTagsByExternalId">
 		<query>select obj from XXTag obj where obj.externalId = :externalId</query>
 	</named-query>
+	
+	<named-query name="XXTagDef.findByName">
+		<query>select obj from XXTagDef obj where obj.name = :name</query>
+	</named-query>
 
 	<!-- End <== JPA Queries for Tag Based Policies  -->