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 <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/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 <[email protected]>
Authored: Fri Aug 14 17:30:03 2015 +0530
Committer: Madhan Neethiraj <[email protected]>
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  -->
        

Reply via email to