Repository: incubator-ranger
Updated Branches:
  refs/heads/tag-policy f8bea62bc -> da8327114


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/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 08a632c..ca15f98 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
@@ -148,22 +148,21 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public void deleteTagDef(String name) throws Exception {
+       public void deleteTagDefByName(String name) throws Exception {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> TagDBStore.deleteTagDef(" + name + ")");
                }
 
                if (StringUtils.isNotBlank(name)) {
-                       List<RangerTagDef> tagDefs = getTagDefsByName(name);
+                       RangerTagDef tagDef = getTagDefByName(name);
 
-                       if(CollectionUtils.isNotEmpty(tagDefs)) {
-                               for (RangerTagDef tagDef : tagDefs) {
-                                       if(LOG.isDebugEnabled()) {
-                                               LOG.debug("Deleting tag-def 
[name=" + name + "; id=" + tagDef.getId() + "]");
-                                       }
-
-                                       rangerTagDefService.delete(tagDef);
+                       if(tagDef != null) {
+                               if(LOG.isDebugEnabled()) {
+                                       LOG.debug("Deleting tag-def [name=" + 
name + "; id=" + tagDef.getId() + "]");
                                }
+
+                               deleteTagAttributeDefs(tagDef.getId());
+                               rangerTagDefService.delete(tagDef);
                        }
                }
 
@@ -173,34 +172,35 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public void deleteTagDefById(Long id) throws Exception {
+       public void deleteTagDef(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.deleteTagDefById(" + id + 
")");
+                       LOG.debug("==> TagDBStore.deleteTagDef(" + id + ")");
                }
 
                if(id != null) {
                        RangerTagDef tagDef = rangerTagDefService.read(id);
 
                        if(tagDef != null) {
+                               deleteTagAttributeDefs(tagDef.getId());
                                rangerTagDefService.delete(tagDef);
                        }
                }
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.deleteTagDefById(" + id + 
")");
+                       LOG.debug("<== TagDBStore.deleteTagDef(" + id + ")");
                }
        }
 
        @Override
-       public RangerTagDef getTagDefById(Long id) throws Exception {
+       public RangerTagDef getTagDef(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.getTagDefById(" + id + ")");
+                       LOG.debug("==> TagDBStore.getTagDef(" + id + ")");
                }
 
                RangerTagDef ret = rangerTagDefService.read(id);
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.getTagDefById(" + id + "): " 
+ ret);
+                       LOG.debug("<== TagDBStore.getTagDef(" + id + "): " + 
ret);
                }
 
                return ret;
@@ -222,19 +222,19 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public List<RangerTagDef> getTagDefsByName(String name) throws 
Exception {
+       public RangerTagDef getTagDefByName(String name) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.getTagDefsByName(" + name + 
")");
+                       LOG.debug("==> TagDBStore.getTagDefByName(" + name + 
")");
                }
 
-               List<RangerTagDef> ret = null;
+               RangerTagDef ret = null;
 
                if (StringUtils.isNotBlank(name)) {
-                       ret = rangerTagDefService.getTagDefsByName(name);
+                       ret = rangerTagDefService.getTagDefByName(name);
                }
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.getTagDefsByName(" + name + 
"): count=" + (ret == null ? 0 : ret.size()));
+                       LOG.debug("<== TagDBStore.getTagDefByName(" + name + 
"): " + ret);
                }
 
                return ret;
@@ -279,7 +279,7 @@ public class TagDBStore extends AbstractTagStore {
 
                RangerTag ret = rangerTagService.create(tag);
 
-               createTagAttributes(ret.getId(), tag.getAttributeValues());
+               createTagAttributes(ret.getId(), tag.getAttributes());
 
                ret = rangerTagService.read(ret.getId());
 
@@ -299,7 +299,7 @@ public class TagDBStore extends AbstractTagStore {
                RangerTag existing = rangerTagService.read(tag.getId());
 
                if (existing == null) {
-                       throw errorUtil.createRESTException("failed to update 
tag [" + tag.getName() + "], Reason: No Tag found with id: [" + tag.getId() + 
"]", MessageEnums.DATA_NOT_UPDATABLE);
+                       throw errorUtil.createRESTException("failed to update 
tag [" + tag.getType() + "], Reason: No Tag found with id: [" + tag.getId() + 
"]", MessageEnums.DATA_NOT_UPDATABLE);
                }
 
                if (StringUtils.isEmpty(tag.getCreatedBy())) {
@@ -317,7 +317,7 @@ public class TagDBStore extends AbstractTagStore {
                RangerTag ret = rangerTagService.update(tag);
 
                deleteTagAttributes(existing.getId());
-               createTagAttributes(existing.getId(), tag.getAttributeValues());
+               createTagAttributes(existing.getId(), tag.getAttributes());
 
                ret = rangerTagService.read(ret.getId());
 
@@ -329,9 +329,9 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public void deleteTagById(Long id) throws Exception {
+       public void deleteTag(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.deleteTagById(" + id + ")");
+                       LOG.debug("==> TagDBStore.deleteTag(" + id + ")");
                }
 
                RangerTag tag = rangerTagService.read(id);
@@ -341,20 +341,20 @@ public class TagDBStore extends AbstractTagStore {
                rangerTagService.delete(tag);
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.deleteTagById(" + id + ")");
+                       LOG.debug("<== TagDBStore.deleteTag(" + id + ")");
                }
        }
 
        @Override
-       public RangerTag getTagById(Long id) throws Exception {
+       public RangerTag getTag(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.getTagById(" + id + ")");
+                       LOG.debug("==> TagDBStore.getTag(" + id + ")");
                }
 
                RangerTag ret = rangerTagService.read(id);
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.getTagById(" + id + "): " + 
ret);
+                       LOG.debug("<== TagDBStore.getTag(" + id + "): " + ret);
                }
 
                return ret;
@@ -376,19 +376,19 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public List<RangerTag> getTagsByName(String name) throws Exception {
+       public List<RangerTag> getTagsByType(String type) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.getTagsByName(" + name + ")");
+                       LOG.debug("==> TagDBStore.getTagsByType(" + type + ")");
                }
 
                List<RangerTag> ret = null;
 
-               if (StringUtils.isNotBlank(name)) {
-                       ret = rangerTagService.getTagsByName(name);
+               if (StringUtils.isNotBlank(type)) {
+                       ret = rangerTagService.getTagsByType(type);
                }
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.getTagsByName(" + name + "): 
count=" + (ret == null ? 0 : ret.size()));
+                       LOG.debug("<== TagDBStore.getTagsByType(" + type + "): 
count=" + (ret == null ? 0 : ret.size()));
                }
 
                return ret;
@@ -469,10 +469,9 @@ public class TagDBStore extends AbstractTagStore {
                        LOG.debug("==> TagDBStore.createServiceResource(" + 
resource + ")");
                }
 
-               // TODO: update resource signature
                RangerServiceResource ret = 
rangerServiceResourceService.create(resource);
 
-               createResourceSpecForResource(ret.getId(), resource);
+               createResourceForServiceResource(ret.getId(), resource);
 
                ret = rangerServiceResourceService.read(ret.getId());
 
@@ -507,10 +506,9 @@ public class TagDBStore extends AbstractTagStore {
                        resource.setGuid(existing.getGuid());
                }
 
-               // TODO: update resource signature
                rangerServiceResourceService.update(resource);
-               deleteResourceSpecForResource(existing.getId());
-               createResourceSpecForResource(existing.getId(), resource);
+               deleteResourceForServiceResource(existing.getId());
+               createResourceForServiceResource(existing.getId(), resource);
 
                RangerServiceResource ret = 
rangerServiceResourceService.read(existing.getId());
 
@@ -522,33 +520,33 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public void deleteServiceResourceById(Long id) throws Exception {
+       public void deleteServiceResource(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.deleteServiceResourceById(" + 
id + ")");
+                       LOG.debug("==> TagDBStore.deleteServiceResource(" + id 
+ ")");
                }
 
-               RangerServiceResource resource = getServiceResourceById(id);
+               RangerServiceResource resource = getServiceResource(id);
 
                if(resource != null) {
-                       deleteResourceSpecForResource(resource.getId());
+                       deleteResourceForServiceResource(resource.getId());
                        rangerServiceResourceService.delete(resource);
                }
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.deleteServiceResourceById(" + 
id + ")");
+                       LOG.debug("<== TagDBStore.deleteServiceResource(" + id 
+ ")");
                }
        }
 
        @Override
-       public RangerServiceResource getServiceResourceById(Long id) throws 
Exception {
+       public RangerServiceResource getServiceResource(Long id) throws 
Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.getServiceResourceById(" + id 
+ ")");
+                       LOG.debug("==> TagDBStore.getServiceResource(" + id + 
")");
                }
 
                RangerServiceResource ret = 
rangerServiceResourceService.read(id);
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.getServiceResourceById(" + id 
+ "): " + ret);
+                       LOG.debug("<== TagDBStore.getServiceResource(" + id + 
"): " + ret);
                }
 
                return ret;
@@ -570,9 +568,39 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public List<RangerServiceResource> 
getServiceResourcesByServiceAndResourceSpec(String serviceName, Map<String, 
RangerPolicyResource> resourceSpec) throws Exception {
-               // TODO Auto-generated method stub
-               return null;
+       public List<RangerServiceResource> getServiceResourcesByService(String 
serviceName) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getServiceResourcesByService(" + serviceName + ")");
+               }
+
+               List<RangerServiceResource> ret = null;
+
+               XXService service = 
daoManager.getXXService().findByName(serviceName);
+
+               if (service != null) {
+                       ret = 
rangerServiceResourceService.getByServiceId(service.getId());
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getServiceResourcesByService(" + serviceName + "): count=" + (ret == 
null ? 0 : ret.size()));
+               }
+
+               return ret;
+       }
+
+       @Override
+       public RangerServiceResource 
getServiceResourceByResourceSignature(String resourceSignature) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getServiceResourceByResourceSignature(" + resourceSignature + ")");
+               }
+
+               RangerServiceResource ret = 
rangerServiceResourceService.getByResourceSignature(resourceSignature);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getServiceResourceByResourceSignature(" + resourceSignature + "): " 
+ ret);
+               }
+
+               return ret;
        }
 
        @Override
@@ -622,9 +650,9 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public void deleteTagResourceMapById(Long id) throws Exception {
+       public void deleteTagResourceMap(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.deleteTagResourceMapById(" + 
id + ")");
+                       LOG.debug("==> TagDBStore.deleteTagResourceMap(" + id + 
")");
                }
 
                RangerTagResourceMap tagResourceMap = 
rangerTagResourceMapService.read(id);
@@ -632,20 +660,35 @@ public class TagDBStore extends AbstractTagStore {
                rangerTagResourceMapService.delete(tagResourceMap);
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.deleteTagResourceMapById(" + 
id + ")");
+                       LOG.debug("<== TagDBStore.deleteTagResourceMap(" + id + 
")");
                }
        }
 
        @Override
-       public RangerTagResourceMap getTagResourceMapById(Long id) throws 
Exception {
+       public RangerTagResourceMap getTagResourceMap(Long id) throws Exception 
{
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.getTagResourceMapById(" + id 
+ ")");
+                       LOG.debug("==> TagDBStore.getTagResourceMap(" + id + 
")");
                }
 
                RangerTagResourceMap ret = rangerTagResourceMapService.read(id);
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.getTagResourceMapById(" + id 
+ ")");
+                       LOG.debug("<== TagDBStore.getTagResourceMap(" + id + 
")");
+               }
+
+               return ret;
+       }
+
+       @Override
+       public RangerTagResourceMap getTagResourceMapByGuid(String guid) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagResourceMapByGuid(" + 
guid + ")");
+               }
+
+               RangerTagResourceMap ret = 
rangerTagResourceMapService.getByGuid(guid);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagResourceMapByGuid(" + 
guid + ")");
                }
 
                return ret;
@@ -855,12 +898,12 @@ public class TagDBStore extends AbstractTagStore {
        }
 
        @Override
-       public List<String> getTags(String serviceName) throws Exception {
+       public List<String> getTagTypes(String serviceName) throws Exception {
                throw new Exception("Not implemented");
        }
 
        @Override
-       public List<String> lookupTags(String serviceName, String 
tagNamePattern) throws Exception {
+       public List<String> lookupTagTypes(String serviceName, String pattern) 
throws Exception {
                throw new Exception("Not implemented");
        }
 
@@ -921,11 +964,11 @@ public class TagDBStore extends AbstractTagStore {
                }
        }
 
-       private List<XXTagAttribute> createTagAttributes(Long tagId, 
Map<String, String> attributeValues) {
+       private List<XXTagAttribute> createTagAttributes(Long tagId, 
Map<String, String> attributes) {
                List<XXTagAttribute> ret = new ArrayList<XXTagAttribute>();
 
-               if(MapUtils.isNotEmpty(attributeValues)) {
-                       for (Map.Entry<String, String> attr : 
attributeValues.entrySet()) {
+               if(MapUtils.isNotEmpty(attributes)) {
+                       for (Map.Entry<String, String> attr : 
attributes.entrySet()) {
                                XXTagAttribute xTagAttr = new XXTagAttribute();
 
                                xTagAttr.setTagId(tagId);
@@ -950,7 +993,7 @@ public class TagDBStore extends AbstractTagStore {
                }
        }
 
-       private void deleteResourceSpecForResource(Long resourceId) {
+       private void deleteResourceForServiceResource(Long resourceId) {
                List<XXServiceResourceElement> resElements = 
daoManager.getXXServiceResourceElement().findByResourceId(resourceId);
                
                if(CollectionUtils.isNotEmpty(resElements)) {
@@ -968,8 +1011,8 @@ public class TagDBStore extends AbstractTagStore {
                }
        }
 
-       private void createResourceSpecForResource(Long resourceId, 
RangerServiceResource resource) {
-               String serviceName = resource.getServiceName();
+       private void createResourceForServiceResource(Long resourceId, 
RangerServiceResource serviceResource) {
+               String serviceName = serviceResource.getServiceName();
 
                XXService xService = 
daoManager.getXXService().findByName(serviceName);
 
@@ -983,17 +1026,17 @@ public class TagDBStore extends AbstractTagStore {
                        throw errorUtil.createRESTException("No Service-Def 
found with ID: " + xService.getType(), MessageEnums.ERROR_CREATING_OBJECT);
                }
 
-               Map<String, RangerPolicy.RangerPolicyResource> resourceSpec = 
resource.getResourceSpec();
+               Map<String, RangerPolicy.RangerPolicyResource> resElements = 
serviceResource.getResourceElements();
 
-               for (Map.Entry<String, RangerPolicyResource> resSpec : 
resourceSpec.entrySet()) {
-                       XXResourceDef xResDef = 
daoManager.getXXResourceDef().findByNameAndServiceDefId(resSpec.getKey(), 
xServiceDef.getId());
+               for (Map.Entry<String, RangerPolicyResource> resElement : 
resElements.entrySet()) {
+                       XXResourceDef xResDef = 
daoManager.getXXResourceDef().findByNameAndServiceDefId(resElement.getKey(), 
xServiceDef.getId());
 
                        if (xResDef == null) {
-                               LOG.error("TagDBStore.createResource: 
ResourceType is not valid [" + resSpec.getKey() + "]");
-                               throw errorUtil.createRESTException("Resource 
Type is not valid [" + resSpec.getKey() + "]", MessageEnums.DATA_NOT_FOUND);
+                               LOG.error("TagDBStore.createResource: 
ResourceType is not valid [" + resElement.getKey() + "]");
+                               throw errorUtil.createRESTException("Resource 
Type is not valid [" + resElement.getKey() + "]", MessageEnums.DATA_NOT_FOUND);
                        }
 
-                       RangerPolicyResource policyRes = resSpec.getValue();
+                       RangerPolicyResource policyRes = resElement.getValue();
 
                        XXServiceResourceElement resourceElement = new 
XXServiceResourceElement();
                        
resourceElement.setIsExcludes(policyRes.getIsExcludes());

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java
index 7e29e36..8e6bb02 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java
@@ -25,6 +25,7 @@ import java.util.List;
 
 import javax.persistence.NoResultException;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXServiceResource;
@@ -59,13 +60,12 @@ public class XXServiceResourceDao extends 
BaseDao<XXServiceResource> {
                }
        }
 
-       public XXServiceResource findByServiceIdAndResourceSignature(Long 
serviceId, String resourceSignature) {
-               if (serviceId == null || StringUtil.isEmpty(resourceSignature)) 
{
+       public XXServiceResource findByResourceSignature(String 
resourceSignature) {
+               if (StringUtils.isBlank(resourceSignature)) {
                        return null;
                }
                try {
-                       return 
getEntityManager().createNamedQuery("XXServiceResource.findByServiceIdAndResourceSignature",
 tClass)
-                                       .setParameter("serviceId", serviceId)
+                       return 
getEntityManager().createNamedQuery("XXServiceResource.findByResourceSignature",
 tClass)
                                        .setParameter("resourceSignature", 
resourceSignature).getSingleResult();
                } catch (NoResultException e) {
                        return null;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java
index e5b5bb2..38cfc94 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java
@@ -49,12 +49,12 @@ public class XXTagDao extends BaseDao<XXTag> {
        }
 
        @SuppressWarnings("unchecked")
-       public List<String> findTagNamesByServiceId(Long serviceId) {
+       public List<String> findTagTypesByServiceId(Long serviceId) {
                if (serviceId == null) {
                        return new ArrayList<String>();
                }
                try {
-                       return 
getEntityManager().createNamedQuery("XXTag.findTagNamesByServiceId")
+                       return 
getEntityManager().createNamedQuery("XXTag.findTagTypesByServiceId")
                                        .setParameter("serviceId", 
serviceId).getResultList();
                } catch (NoResultException e) {
                        return new ArrayList<String>();

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/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 f18fea8..97b53fd 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
@@ -48,16 +48,16 @@ public class XXTagDefDao extends BaseDao<XXTagDef> {
                }
        }
 
-       public List<XXTagDef> findByName(String name) {
+       public XXTagDef findByName(String name) {
                if (StringUtils.isEmpty(name)) {
-                       return new ArrayList<XXTagDef>();
+                       return null;
                }
 
                try {
                        return 
getEntityManager().createNamedQuery("XXTagDef.findByName", tClass)
-                                       .setParameter("name", 
name).getResultList();
+                                       .setParameter("name", 
name).getSingleResult();
                } catch (NoResultException e) {
-                       return new ArrayList<XXTagDef>();
+                       return null;
                }
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/db/XXTagResourceMapDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXTagResourceMapDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXTagResourceMapDao.java
index 75d04ae..0cac1ef 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXTagResourceMapDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXTagResourceMapDao.java
@@ -34,6 +34,18 @@ public class XXTagResourceMapDao extends 
BaseDao<XXTagResourceMap> {
                super(daoManager);
        }
 
+       public XXTagResourceMap findByGuid(String resourceGuid) {
+               if (StringUtil.isEmpty(resourceGuid)) {
+                       return null;
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByGuid", tClass)
+                                       .setParameter("guid", 
resourceGuid).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
        public List<XXTagResourceMap> findByResourceId(Long resourceId) {
                if (resourceId == null) {
                        return new ArrayList<XXTagResourceMap>();

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java 
b/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java
index 1d8493a..dd154b9 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java
@@ -49,8 +49,8 @@ public class XXTag extends XXDBBase implements Serializable {
        @Column(name = "guid", unique = true, nullable = false, length = 512)
        protected String guid;
 
-       @Column(name = "name")
-       protected String name;
+       @Column(name = "type")
+       protected Long type;
 
        @Override
        public void setId(Long id) {
@@ -78,18 +78,18 @@ public class XXTag extends XXDBBase implements Serializable 
{
        }
 
        /**
-        * @return the name
+        * @return the type
         */
-       public String getName() {
-               return name;
+       public Long getType() {
+               return type;
        }
 
        /**
-        * @param name
-        *            the name to set
+        * @param type
+        *            the type to set
         */
-       public void setName(String name) {
-               this.name = name;
+       public void setType(Long type) {
+               this.type = type;
        }
 
        @Override
@@ -108,7 +108,7 @@ public class XXTag extends XXDBBase implements Serializable 
{
                int result = 1;
                result = prime * result + ((guid == null) ? 0 : 
guid.hashCode());
                result = prime * result + ((id == null) ? 0 : id.hashCode());
-               result = prime * result + ((name == null) ? 0 : 
name.hashCode());
+               result = prime * result + ((type == null) ? 0 : 
type.hashCode());
                return result;
        }
 
@@ -136,10 +136,10 @@ public class XXTag extends XXDBBase implements 
Serializable {
                                return false;
                } else if (!id.equals(other.id))
                        return false;
-               if (name == null) {
-                       if (other.name != null)
+               if (type == null) {
+                       if (other.type != null)
                                return false;
-               } else if (!name.equals(other.name))
+               } else if (!type.equals(other.type))
                        return false;
                return true;
        }
@@ -161,7 +161,7 @@ public class XXTag extends XXDBBase implements Serializable 
{
                sb.append(super.toString() + "} ");
                sb.append("id={").append(id).append("} ");
                sb.append("guid={").append(guid).append("} ");
-               sb.append("name={").append(name).append("} ");
+               sb.append("type={").append(type).append("} ");
                sb.append(" }");
 
                return sb;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/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 b06f5cc..c0241b2 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
@@ -102,7 +102,7 @@ public class TagREST {
     }
 
     @PUT
-    @Path(TagRESTConstants.TAGDEF_RESOURCE + "/{id}")
+    @Path(TagRESTConstants.TAGDEF_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
     public RangerTagDef updateTagDef(@PathParam("id") Long id, RangerTagDef 
tagDef) {
@@ -132,7 +132,7 @@ public class TagREST {
     }
 
     @DELETE
-    @Path(TagRESTConstants.TAGDEF_RESOURCE + "/{id}")
+    @Path(TagRESTConstants.TAGDEF_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
     public void deleteTagDef(@PathParam("id") Long id) {
@@ -141,7 +141,7 @@ public class TagREST {
         }
 
         try {
-            tagStore.deleteTagDefById(id);
+            tagStore.deleteTagDef(id);
         } catch(Exception excp) {
             LOG.error("deleteTagDef(" + id + ") failed", excp);
 
@@ -153,19 +153,102 @@ public class TagREST {
         }
     }
 
+    @DELETE
+    @Path(TagRESTConstants.TAGDEF_RESOURCE + "guid/{guid}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public void deleteTagDefByGuid(@PathParam("guid") String guid) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.deleteTagDefByGuid(" + guid + ")");
+        }
+
+        try {
+            RangerTagDef exist = tagStore.getTagDefByGuid(guid);
+            tagStore.deleteTagDef(exist.getId());
+        } catch(Exception excp) {
+            LOG.error("deleteTagDef(" + guid + ") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.deleteTagDefByGuid(" + guid + ")");
+        }
+    }
+
+    @GET
+    @Path(TagRESTConstants.TAGDEF_RESOURCE + "{id}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public RangerTagDef getTagDef(@PathParam("id") Long id) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagDef(" + id + ")");
+        }
+
+        RangerTagDef ret;
+
+        try {
+            ret = tagStore.getTagDef(id);
+        } catch(Exception excp) {
+            LOG.error("getTagDef(" + id + ") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(ret == null) {
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not 
found", true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getTagDef(" + id + "): " + ret);
+        }
+
+        return ret;
+    }
+
+    @GET
+    @Path(TagRESTConstants.TAGDEF_RESOURCE + "guid/{guid}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public RangerTagDef getTagDefByGuid(@PathParam("guid") String guid) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagDefByGuid(" + guid + ")");
+        }
+
+        RangerTagDef ret;
+
+        try {
+            ret = tagStore.getTagDefByGuid(guid);
+        } catch(Exception excp) {
+            LOG.error("getTagDefByGuid(" + guid + ") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(ret == null) {
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not 
found", true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getTagDefByGuid(" + guid + "): " + ret);
+        }
+
+        return ret;
+    }
+
     @GET
-    @Path(TagRESTConstants.TAGDEF_RESOURCE+"/{name}")
+    @Path(TagRESTConstants.TAGDEF_RESOURCE + "name/{name}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public List<RangerTagDef> getTagDefByName(@PathParam("name") String name) {
+    public RangerTagDef getTagDefByName(@PathParam("name") String name) {
         if(LOG.isDebugEnabled()) {
             LOG.debug("==> TagREST.getTagDefByName(" + name + ")");
         }
 
-        List<RangerTagDef> ret;
+        RangerTagDef ret;
 
         try {
-            ret = tagStore.getTagDefsByName(name);
+            ret = tagStore.getTagDefByName(name);
         } catch(Exception excp) {
             LOG.error("getTagDefByName(" + name + ") failed", excp);
 
@@ -187,9 +270,9 @@ public class TagREST {
     @Path(TagRESTConstants.TAGDEFS_RESOURCE)
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public List<RangerTagDef> getTagDefs() {
+    public List<RangerTagDef> getAllTagDefs() {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.getTagDefs()");
+            LOG.debug("==> TagREST.getAllTagDefs()");
         }
 
         List<RangerTagDef> ret;
@@ -197,7 +280,7 @@ public class TagREST {
         try {
             ret = tagStore.getTagDefs(new SearchFilter());
         } catch(Exception excp) {
-            LOG.error("getTagDefByName() failed", excp);
+            LOG.error("getAllTagDefs() failed", excp);
 
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
@@ -207,7 +290,7 @@ public class TagREST {
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.getTagDefs()");
+            LOG.debug("<== TagREST.getAllTagDefs()");
         }
 
         return ret;
@@ -244,19 +327,19 @@ public class TagREST {
     @Path(TagRESTConstants.TAG_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public RangerTag updateTagById(@PathParam("id") Long id, RangerTag tag) {
+    public RangerTag updateTag(@PathParam("id") Long id, RangerTag tag) {
 
         RangerTag ret;
 
         try {
-            validator.preUpdateTagById(id, tag);
+            validator.preUpdateTag(id, tag);
             ret = tagStore.updateTag(tag);
         } catch (Exception excp) {
-            LOG.error("updateTag() failed", excp);
+            LOG.error("updateTag(" + id + ") failed", excp);
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.updateTag(): " + ret);
+            LOG.debug("<== TagREST.updateTag(" + id + "): " + ret);
         }
 
         return ret;
@@ -288,51 +371,25 @@ public class TagREST {
         return ret;
     }
 
-    @PUT
-    @Path(TagRESTConstants.TAG_RESOURCE + "name/{name}")
-    @Produces({ "application/json", "application/xml" })
-    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public RangerTag updateTagByName(@PathParam("name") String name, RangerTag 
tag) {
-
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.updateTagByName(" + name + ")");
-        }
-
-        RangerTag ret;
-
-        try {
-            validator.preUpdateTagByName(name, tag);
-            ret = tagStore.updateTag(tag);
-        } catch (Exception excp) {
-            LOG.error("updateTagByName(" + name + ") failed", excp);
-            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
-        }
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.updateTagByName(" + name + "): " + ret);
-        }
-
-        return ret;
-    }
-
     @DELETE
     @Path(TagRESTConstants.TAG_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public void deleteTagById(@PathParam("id") Long id) {
+    public void deleteTag(@PathParam("id") Long id) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.deleteTagById(" + id +")");
+            LOG.debug("==> TagREST.deleteTag(" + id +")");
         }
 
         try {
-            validator.preDeleteTagById(id);
-            tagStore.deleteTagById(id);
+            validator.preDeleteTag(id);
+            tagStore.deleteTag(id);
         } catch(Exception excp) {
-            LOG.error("deleteTag() failed", excp);
+            LOG.error("deleteTag(" + id + ") failed", excp);
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.deleteTag()");
+            LOG.debug("<== TagREST.deleteTag(" + id + ")");
         }
     }
 
@@ -347,7 +404,7 @@ public class TagREST {
 
         try {
             RangerTag exist = validator.preDeleteTagByGuid(guid);
-            tagStore.deleteTagById(exist.getId());
+            tagStore.deleteTag(exist.getId());
         } catch(Exception excp) {
             LOG.error("deleteTagByGuid(" + guid + ") failed", excp);
 
@@ -359,56 +416,33 @@ public class TagREST {
         }
     }
 
-    @DELETE
-    @Path(TagRESTConstants.TAG_RESOURCE + "name/{name}")
-    @Produces({ "application/json", "application/xml" })
-    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public void deleteTagByName(@PathParam("name") String name) {
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.deleteTagByName(" + name + ")");
-        }
-
-        try {
-            RangerTag exist = validator.preDeleteTagByName(name);
-            tagStore.deleteTagById(exist.getId());
-        } catch(Exception excp) {
-            LOG.error("deleteTagByName(" + name + ") failed", excp);
-
-            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
-        }
-
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.deleteTagByName(" + name + ")");
-        }
-    }
-
     @GET
-    @Path(TagRESTConstants.TAGS_RESOURCE + "{id}")
+    @Path(TagRESTConstants.TAG_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public RangerTag getTagById(@PathParam("id") Long id) {
+    public RangerTag getTag(@PathParam("id") Long id) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.getTagById(" + id + ")");
+            LOG.debug("==> TagREST.getTag(" + id + ")");
         }
         RangerTag ret;
 
         try {
-            ret = tagStore.getTagById(id);
+            ret = tagStore.getTag(id);
         } catch(Exception excp) {
-            LOG.error("getTagById(" + id + ") failed", excp);
+            LOG.error("getTag(" + id + ") failed", excp);
 
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.getTagById(" + id + "): " + ret);
+            LOG.debug("<== TagREST.getTag(" + id + "): " + ret);
         }
 
         return ret;
     }
 
     @GET
-    @Path(TagRESTConstants.TAGS_RESOURCE + "guid/{guid}")
+    @Path(TagRESTConstants.TAG_RESOURCE + "guid/{guid}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
     public RangerTag getTagByGuid(@PathParam("guid") String guid) {
@@ -433,25 +467,25 @@ public class TagREST {
     }
 
     @GET
-    @Path(TagRESTConstants.TAGS_RESOURCE + "name/{name}")
+    @Path(TagRESTConstants.TAGS_RESOURCE + "type/{type}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public List<RangerTag> getTagsByName(@PathParam("name") String name) {
+    public List<RangerTag> getTagsByType(@PathParam("type") String type) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.getTagsByName(" + name + ")");
+            LOG.debug("==> TagREST.getTagsByType(" + type + ")");
         }
         List<RangerTag> ret;
 
         try {
-            ret = tagStore.getTagsByName(name);
+            ret = tagStore.getTagsByType(type);
         } catch(Exception excp) {
-            LOG.error("getTagsByName(" + name + ") failed", excp);
+            LOG.error("getTagsByType(" + type + ") failed", excp);
 
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.getTagsByName(" + name + "): " + ret);
+            LOG.debug("<== TagREST.getTagsByType(" + type + "): " + ret);
         }
 
         return ret;
@@ -519,23 +553,23 @@ public class TagREST {
     @Path(TagRESTConstants.RESOURCE_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public RangerServiceResource updateServiceResourceById(@PathParam("id") 
Long id, RangerServiceResource resource) {
+    public RangerServiceResource updateServiceResource(@PathParam("id") Long 
id, RangerServiceResource resource) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.updateServiceResourceById(" + id + ")");
+            LOG.debug("==> TagREST.updateServiceResource(" + id + ")");
         }
         RangerServiceResource ret;
 
         try {
-            validator.preUpdateServiceResourceById(id, resource);
+            validator.preUpdateServiceResource(id, resource);
             ret = tagStore.updateServiceResource(resource);
         } catch(Exception excp) {
-            LOG.error("updateServiceResourceById(" + resource + ") failed", 
excp);
+            LOG.error("updateServiceResource(" + resource + ") failed", excp);
 
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.updateServiceResourceById(" + id + "): " + 
ret);
+            LOG.debug("<== TagREST.updateServiceResource(" + id + "): " + ret);
         }
         return ret;
     }
@@ -567,21 +601,21 @@ public class TagREST {
     @Path(TagRESTConstants.RESOURCE_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public void deleteServiceResourceById(@PathParam("id") Long id) {
+    public void deleteServiceResource(@PathParam("id") Long id) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.deleteServiceResourceById(" + id + ")");
+            LOG.debug("==> TagREST.deleteServiceResource(" + id + ")");
         }
         try {
-            validator.preDeleteServiceResourceById(id);
-            tagStore.deleteServiceResourceById(id);
+            validator.preDeleteServiceResource(id);
+            tagStore.deleteServiceResource(id);
         } catch (Exception excp) {
-            LOG.error("deleteServiceResourceById() failed", excp);
+            LOG.error("deleteServiceResource() failed", excp);
 
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.deleteServiceResourceById(" + id + ")");
+            LOG.debug("<== TagREST.deleteServiceResource(" + id + ")");
         }
     }
 
@@ -596,7 +630,7 @@ public class TagREST {
 
         try {
             RangerServiceResource exist = 
validator.preDeleteServiceResourceByGuid(guid);
-            tagStore.deleteServiceResourceById(exist.getId());
+            tagStore.deleteServiceResource(exist.getId());
         } catch(Exception excp) {
             LOG.error("deleteServiceResourceByGuid(" + guid + ") failed", 
excp);
 
@@ -609,29 +643,29 @@ public class TagREST {
     }
 
     @GET
-    @Path(TagRESTConstants.RESOURCES_RESOURCE + "{id}")
+    @Path(TagRESTConstants.RESOURCE_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public RangerServiceResource getServiceResourceById(@PathParam("id") Long 
id) {
+    public RangerServiceResource getServiceResource(@PathParam("id") Long id) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.getServiceResourceById(" + id + ")");
+            LOG.debug("==> TagREST.getServiceResource(" + id + ")");
         }
         RangerServiceResource ret;
         try {
-            ret = tagStore.getServiceResourceById(id);
+            ret = tagStore.getServiceResource(id);
         } catch(Exception excp) {
-            LOG.error("getServiceResourceById(" + id + ") failed", excp);
+            LOG.error("getServiceResource(" + id + ") failed", excp);
 
             throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.getServiceResourceById(" + id + "): " + 
ret);
+            LOG.debug("<== TagREST.getServiceResource(" + id + "): " + ret);
         }
         return ret;
     }
 
     @GET
-    @Path(TagRESTConstants.RESOURCES_RESOURCE + "guid/{guid}")
+    @Path(TagRESTConstants.RESOURCE_RESOURCE + "guid/{guid}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
     public RangerServiceResource getServiceResourceByGuid(@PathParam("guid") 
String guid) {
@@ -652,11 +686,94 @@ public class TagREST {
         return ret;
     }
 
+    @GET
+    @Path(TagRESTConstants.RESOURCES_RESOURCE + "service/{serviceName}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public List<RangerServiceResource> 
getServiceResourcesByService(@PathParam("serviceName") String serviceName) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getServiceResourcesByService(" + 
serviceName + ")");
+        }
+
+        List<RangerServiceResource> ret = null;
+
+        try {
+            ret = tagStore.getServiceResourcesByService(serviceName);
+        } catch(Exception excp) {
+            LOG.error("getServiceResourcesByService(" + serviceName + ") 
failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if (CollectionUtils.isEmpty(ret)) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("getServiceResourcesByService(" + serviceName + ") - 
No service-resources found");
+            }
+        }
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getServiceResourcesByService(" + 
serviceName + "): count=" + (ret == null ? 0 : ret.size()));
+        }
+
+        return ret;
+    }
+
+    @GET
+    @Path(TagRESTConstants.RESOURCE_RESOURCE + "signature/{resourceSignature}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public RangerServiceResource 
getServiceResourceByResourceSignature(@PathParam("resourceSignature") String 
resourceSignature) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getServiceResourceByResourceSignature(" + 
resourceSignature + ")");
+        }
+
+        RangerServiceResource ret = null;
+
+        try {
+            ret = 
tagStore.getServiceResourceByResourceSignature(resourceSignature);
+        } catch(Exception excp) {
+            LOG.error("getServiceResourceByResourceSignature(" + 
resourceSignature + ") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getServiceResourceByResourceSignature(" + 
resourceSignature + "): " + ret);
+        }
+
+        return ret;
+    }
+
+    @GET
+    @Path(TagRESTConstants.RESOURCES_RESOURCE)
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public List<RangerServiceResource> getAllServiceResources() {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getAllServiceResources()");
+        }
+
+        List<RangerServiceResource> ret;
+
+        try {
+            ret = tagStore.getServiceResources(new SearchFilter());
+        } catch(Exception excp) {
+            LOG.error("getAllServiceResources() failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getAllServiceResources(): count=" + (ret == 
null ? 0 : ret.size()));
+        }
+
+        return ret;
+    }
+
     @POST
     @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE)
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public RangerTagResourceMap createTagResourceMap(@QueryParam("tagGuid") 
String tagGuid, @QueryParam("resourceGuid") String resourceGuid) {
+    public RangerTagResourceMap createTagResourceMap(@QueryParam("tag-guid") 
String tagGuid, @QueryParam("resource-guid") String resourceGuid) {
         if(LOG.isDebugEnabled()) {
             LOG.debug("==> TagREST.createTagResourceMap(" + tagGuid + ", " +  
resourceGuid + ")");
         }
@@ -680,17 +797,62 @@ public class TagREST {
     }
 
     @DELETE
+    @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "{id}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public void deleteTagResourceMap(@PathParam("id") Long id) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.deleteTagResourceMap(" + id + ")");
+        }
+        try {
+            validator.preDeleteTagResourceMap(id);
+            tagStore.deleteTagResourceMap(id);
+        } catch (Exception excp) {
+            LOG.error("deleteTagResourceMap() failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.deleteTagResourceMap(" + id + ")");
+        }
+    }
+
+    @DELETE
+    @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "guid/{guid}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public void deleteTagResourceMapByGuid(@PathParam("guid") String guid) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.deleteTagResourceMapByGuid(" + guid + ")");
+        }
+
+        try {
+            RangerTagResourceMap exist = 
validator.preDeleteTagResourceMapByGuid(guid);
+            tagStore.deleteServiceResource(exist.getId());
+        } catch(Exception excp) {
+            LOG.error("deleteTagResourceMapByGuid(" + guid + ") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.deleteTagResourceMapByGuid(" + guid + ")");
+        }
+    }
+
+    @DELETE
     @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE)
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public void deleteTagResourceMap(@QueryParam("tagGuid") String tagGuid, 
@QueryParam("resourceGuid") String resourceGuid) {
+    public void deleteTagResourceMap(@QueryParam("tag-guid") String tagGuid, 
@QueryParam("resource-guid") String resourceGuid) {
         if(LOG.isDebugEnabled()) {
             LOG.debug("==> TagREST.deleteTagResourceMap(" + tagGuid + ", " + 
resourceGuid + ")");
         }
 
         try {
             RangerTagResourceMap exist = 
validator.preDeleteTagResourceMap(tagGuid, resourceGuid);
-            tagStore.deleteTagResourceMapById(exist.getId());
+            tagStore.deleteTagResourceMap(exist.getId());
         } catch(Exception excp) {
             LOG.error("deleteTagResourceMap(" + tagGuid + ", " +  resourceGuid 
+ ") failed", excp);
 
@@ -702,34 +864,115 @@ public class TagREST {
         }
     }
 
-    /*
-        This leads to a WARNING in catalina.out -
-        WARNING: The following warnings have been detected with resource 
and/or provider classes:
-        WARNING: A HTTP GET method, public java.util.List 
org.apache.ranger.rest.TagREST.getServiceResources(org.apache.ranger.plugin.model.RangerServiceResource)
 throws java.lang.Exception, should not consume any entity.
-        Hence commented out..
-     */
-    /*
     @GET
-    @Path(TagRESTConstants.RESOURCES_RESOURCE)
+    @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "{id}")
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public List<RangerServiceResource> 
getServiceResources(RangerServiceResource resource) throws Exception {
+    public RangerTagResourceMap getTagResourceMap(@PathParam("id") Long id) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagResourceMap(" + id + ")");
+        }
+        RangerTagResourceMap ret;
 
-        List<RangerServiceResource> ret = null;
+        try {
+            ret = tagStore.getTagResourceMap(id);
+        } catch(Exception excp) {
+            LOG.error("getTagResourceMap(" + id + ") failed", excp);
 
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.getServiceResources(" + resource + ")");
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
         }
-        ret = 
tagStore.getServiceResourcesByServiceAndResourceSpec(resource.getServiceName(), 
resource.getResourceSpec());
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.getServiceResources(" + resource + ")");
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getTagResourceMap(" + id + "): " + ret);
         }
+
         return ret;
     }
-    */
 
-    // This API is typically used by plug-in to get selected tagged resources 
from RangerAdmin
+    @GET
+    @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "guid/{guid}")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public RangerTagResourceMap getTagResourceMapByGuid(@PathParam("guid") 
String guid) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagResourceMapByGuid(" + guid + ")");
+        }
+        RangerTagResourceMap ret;
+
+        try {
+            ret = tagStore.getTagResourceMapByGuid(guid);
+        } catch(Exception excp) {
+            LOG.error("getTagResourceMapByGuid(" + guid + ") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getTagResourceMapByGuid(" + guid + "): " + 
ret);
+        }
+
+        return ret;
+    }
+
+    @GET
+    @Path(TagRESTConstants.TAGRESOURCEMAP_RESOURCE + "tag-resource-guid")
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public RangerTagResourceMap getTagResourceMap(@QueryParam("tagGuid") 
String tagGuid, @QueryParam("resourceGuid") String resourceGuid) {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagResourceMap(" + tagGuid + ", " + 
resourceGuid + ")");
+        }
+        
+        RangerTagResourceMap ret = null;
+
+        try {
+            ret = tagStore.getTagResourceMapForTagAndResourceGuid(tagGuid, 
resourceGuid);
+        } catch(Exception excp) {
+            LOG.error("getTagResourceMap(" + tagGuid + ", " +  resourceGuid + 
") failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagResourceMap(" + tagGuid + ", " + 
resourceGuid + ")");
+        }
+
+        return ret;
+    }
+
+    @GET
+    @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE)
+    @Produces({ "application/json", "application/xml" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public List<RangerTagResourceMap> getAllTagResourceMaps() {
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getAllTagResourceMaps()");
+        }
+
+        List<RangerTagResourceMap> ret;
+
+        try {
+            ret = tagStore.getTagResourceMaps(new SearchFilter());
+        } catch(Exception excp) {
+            LOG.error("getAllTagResourceMaps() failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
 
+        if (CollectionUtils.isEmpty(ret)) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("getAllTagResourceMaps() - No tag-resource-maps 
found");
+            }
+        }
+        if(LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getAllTagResourceMaps(): " + ret);
+        }
+
+        return ret;
+    }
+
+
+    // This API is typically used by plug-in to get selected tagged resources 
from RangerAdmin
     @GET
     @Path(TagRESTConstants.TAGS_DOWNLOAD + "{serviceName}")
     @Produces({ "application/json", "application/xml" })
@@ -759,18 +1002,18 @@ public class TagREST {
     // This API is typically used by GUI to get all available tags from 
RangerAdmin
 
     @GET
-    @Path(TagRESTConstants.TAGNAMES_RESOURCE)
+    @Path(TagRESTConstants.TAGTYPES_RESOURCE)
     @Produces({ "application/json", "application/xml" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-    public List<String> 
getTagNames(@QueryParam(TagRESTConstants.SERVICE_NAME_PARAM) String 
serviceName) {
+    public List<String> 
getTagTypes(@QueryParam(TagRESTConstants.SERVICE_NAME_PARAM) String 
serviceName) {
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.getTagNames(" + serviceName + ")");
+            LOG.debug("==> TagREST.getTagTypes(" + serviceName + ")");
         }
-        List<String> tagNames = null;
+        List<String> tagTypes = null;
 
         try {
-            tagNames = tagStore.getTags(serviceName);
+            tagTypes = tagStore.getTagTypes(serviceName);
         } catch(Exception excp) {
             LOG.error("getTags(" + serviceName + ") failed", excp);
 
@@ -778,26 +1021,26 @@ public class TagREST {
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.getTagNames(" + serviceName + ")");
+            LOG.debug("<== TagREST.getTagTypes(" + serviceName + ")");
         }
-        return tagNames;
+        return tagTypes;
     }
 
     // This API is typically used by GUI to help lookup available tags from 
RangerAdmin to help tag-policy writer. It
     // may also be used to validate configuration parameters of a tag-service
 
     @GET
-    @Path(TagRESTConstants.LOOKUP_TAGS_RESOURCE)
+    @Path(TagRESTConstants.TAGTYPES_LOOKUP_RESOURCE)
     @Produces({ "application/json", "application/xml" })
-    public List<String> 
lookupTags(@QueryParam(TagRESTConstants.SERVICE_NAME_PARAM) String serviceName,
-                                    @DefaultValue(".*") 
@QueryParam(TagRESTConstants.PATTERN_PARAM) String tagNamePattern) {
+    public List<String> 
lookupTagTypes(@QueryParam(TagRESTConstants.SERVICE_NAME_PARAM) String 
serviceName,
+                                       @DefaultValue(".*") 
@QueryParam(TagRESTConstants.PATTERN_PARAM) String pattern) {
         if(LOG.isDebugEnabled()) {
-            LOG.debug("==> TagREST.lookupTags(" + serviceName  + ", " + 
tagNamePattern + ")");
+            LOG.debug("==> TagREST.lookupTagTypes(" + serviceName  + ", " + 
pattern + ")");
         }
-        List<String> matchingTagNames = null;
+        List<String> matchingTagTypes = null;
 
         try {
-            matchingTagNames = tagStore.lookupTags(serviceName, 
tagNamePattern);
+            matchingTagTypes = tagStore.lookupTagTypes(serviceName, pattern);
         } catch(Exception excp) {
             LOG.error("lookupTags(" + serviceName + ") failed", excp);
 
@@ -805,9 +1048,9 @@ public class TagREST {
         }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("<== TagREST.lookupTags(" + serviceName + ")");
+            LOG.debug("<== TagREST.lookupTagTypes(" + serviceName + ")");
         }
-        return matchingTagNames;
+        return matchingTagTypes;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java 
b/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
index 91525df..977e487 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
@@ -29,8 +29,9 @@ public class TagRESTConstants {
        static final String RESOURCES_RESOURCE       = "/resources/";
        static final String RESOURCE_RESOURCE        = "/resource/";
        static final String TAGRESOURCEMAPS_RESOURCE = "/tagresourcemaps/";
-       static final String TAGNAMES_RESOURCE        = "/names/";
-       static final String LOOKUP_TAGS_RESOURCE     = "/lookup/";
+       static final String TAGRESOURCEMAP_RESOURCE  = "/tagresourcemap/";
+       static final String TAGTYPES_RESOURCE        = "/types/";
+       static final String TAGTYPES_LOOKUP_RESOURCE = "/types/lookup/";
        static final String TAGS_DOWNLOAD            = "/download/";
 
        public static final String SERVICE_NAME_PARAM           = "serviceName";

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
----------------------------------------------------------------------
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 a81b981..ffbae18 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
@@ -75,10 +75,26 @@ public class RangerServiceResourceService extends 
RangerServiceResourceServiceBa
                return ret;
        }
 
-       public RangerServiceResource 
getServiceResourceByServiceIdAndResourceSignature(Long serviceId, String 
resourceSignature) {
+       public List<RangerServiceResource> getByServiceId(Long serviceId) {
+               List<RangerServiceResource> ret = new 
ArrayList<RangerServiceResource>();
+
+               List<XXServiceResource> xxServiceResources = 
daoMgr.getXXServiceResource().findByServiceId(serviceId);
+
+               if(CollectionUtils.isNotEmpty(xxServiceResources)) {
+                       for(XXServiceResource xxServiceResource : 
xxServiceResources) {
+                               RangerServiceResource serviceResource = 
populateViewBean(xxServiceResource);
+
+                               ret.add(serviceResource);
+                       }
+               }
+
+               return ret;
+       }
+
+       public RangerServiceResource getByResourceSignature(String 
resourceSignature) {
                RangerServiceResource ret = null;
 
-               XXServiceResource xxServiceResource = 
daoMgr.getXXServiceResource().findByServiceIdAndResourceSignature(serviceId, 
resourceSignature);
+               XXServiceResource xxServiceResource = 
daoMgr.getXXServiceResource().findByResourceSignature(resourceSignature);
                
                if(xxServiceResource != null) {
                        ret = populateViewBean(xxServiceResource);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
----------------------------------------------------------------------
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 1510ffa..c421be0 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
@@ -76,7 +76,7 @@ public abstract class RangerServiceResourceServiceBase<T 
extends XXServiceResour
                vObj.setServiceName(xService.getName());
 
                List<XXServiceResourceElement> resElementList = 
daoMgr.getXXServiceResourceElement().findByResourceId(xObj.getId());
-               Map<String, RangerPolicy.RangerPolicyResource> resourceSpec = 
new HashMap<String, RangerPolicy.RangerPolicyResource>();
+               Map<String, RangerPolicy.RangerPolicyResource> resourceElements 
= new HashMap<String, RangerPolicy.RangerPolicyResource>();
 
                for (XXServiceResourceElement resElement : resElementList) {
                        List<String> resValueMapList = 
daoMgr.getXXServiceResourceElementValue().findValuesByResElementId(resElement.getId());
@@ -88,10 +88,10 @@ public abstract class RangerServiceResourceServiceBase<T 
extends XXServiceResour
                        policyRes.setIsRecursive(resElement.getIsRecursive());
                        policyRes.setValues(resValueMapList);
 
-                       resourceSpec.put(xResDef.getName(), policyRes);
+                       resourceElements.put(xResDef.getName(), policyRes);
                }
 
-               vObj.setResourceSpec(resourceSpec);
+               vObj.setResourceElements(resourceElements);
 
                return vObj;
        }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/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 462b781..b049f71 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
@@ -27,9 +27,7 @@ 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.entity.XXTagResourceMap;
 import org.apache.ranger.plugin.model.RangerTagDef;
-import org.apache.ranger.plugin.model.RangerTagResourceMap;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.stereotype.Service;
 
@@ -39,7 +37,7 @@ public class RangerTagDefService extends 
RangerTagDefServiceBase<XXTagDef, Range
        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_GUID, 
"obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.TAG_DEF_NAME, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.TAG_TYPE, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
        }
        
        @Override
@@ -77,17 +75,13 @@ public class RangerTagDefService extends 
RangerTagDefServiceBase<XXTagDef, Range
                return ret;
        }
 
-       public List<RangerTagDef> getTagDefsByName(String name) {
-               List<RangerTagDef> ret = new ArrayList<RangerTagDef>();
+       public RangerTagDef getTagDefByName(String name) {
+               RangerTagDef ret = null;
 
-               List<XXTagDef> xxTagDefs = 
daoMgr.getXXTagDef().findByName(name);
+               XXTagDef xxTagDef = daoMgr.getXXTagDef().findByName(name);
                
-               if(CollectionUtils.isNotEmpty(xxTagDefs)) {
-                       for(XXTagDef xxTagDef : xxTagDefs) {
-                               RangerTagDef tagDef = 
populateViewBean(xxTagDef);
-                               
-                               ret.add(tagDef);
-                       }
+               if(xxTagDef != null) {
+                       ret = populateViewBean(xxTagDef);
                }
 
                return ret;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/service/RangerTagResourceMapService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagResourceMapService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagResourceMapService.java
index 6894e4e..d50a937 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagResourceMapService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagResourceMapService.java
@@ -148,6 +148,18 @@ public class RangerTagResourceMapService extends 
RangerTagResourceMapServiceBase
                return ret;
        }
        
+       public RangerTagResourceMap getByGuid(String guid) {
+               RangerTagResourceMap ret = null;
+
+               XXTagResourceMap xxTagResourceMap = 
daoMgr.getXXTagResourceMap().findByGuid(guid);
+
+               if(xxTagResourceMap != null) {
+                       ret = populateViewBean(xxTagResourceMap);
+               }
+
+               return ret;
+       }
+       
        public RangerTagResourceMap getByTagAndResourceId(Long tagId, Long 
resourceId) {
                RangerTagResourceMap ret = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
index 3d7ea24..cab6a4a 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
@@ -5,10 +5,10 @@ import java.util.List;
 
 import org.apache.commons.collections.CollectionUtils;
 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.XXTag;
-import org.apache.ranger.entity.XXTagDef;
 import org.apache.ranger.plugin.model.RangerTag;
-import org.apache.ranger.plugin.model.RangerTagDef;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.springframework.stereotype.Service;
 
@@ -18,7 +18,8 @@ public class RangerTagService extends 
RangerTagServiceBase<XXTag, RangerTag> {
 
        public RangerTagService() {
                searchFields.add(new SearchField(SearchFilter.TAG_ID, "obj.id", 
SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
-               searchFields.add(new SearchField(SearchFilter.TAG_NAME, 
"obj.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.TAG_DEF_ID, 
"obj.type", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.TAG_TYPE, 
"tagDef.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXTagDef tagDef", "obj.type 
= tagDef.id"));
        }
 
        @Override
@@ -56,7 +57,7 @@ public class RangerTagService extends 
RangerTagServiceBase<XXTag, RangerTag> {
                return ret;
        }
 
-       public List<RangerTag> getTagsByName(String name) {
+       public List<RangerTag> getTagsByType(String name) {
                List<RangerTag> ret = new ArrayList<RangerTag>();
 
                List<XXTag> xxTags = daoMgr.getXXTag().findByName(name);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
index 359e7ae..25c4853 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
@@ -27,10 +27,12 @@ import java.util.Map;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.common.GUIDUtil;
+import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.RangerConfigUtil;
 import org.apache.ranger.entity.XXDBBase;
 import org.apache.ranger.entity.XXTagAttribute;
 import org.apache.ranger.entity.XXTag;
+import org.apache.ranger.entity.XXTagDef;
 import org.apache.ranger.plugin.model.RangerTag;
 import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.util.SearchFilter;
@@ -53,25 +55,38 @@ public abstract class RangerTagServiceBase<T extends XXTag, 
V extends RangerTag>
        protected XXTag mapViewToEntityBean(RangerTag vObj, XXTag xObj, int 
OPERATION_CONTEXT) {
                String guid = (StringUtils.isEmpty(vObj.getGuid())) ? 
guidUtil.genGUID() : vObj.getGuid();
 
+               XXTagDef xTagDef = 
daoMgr.getXXTagDef().findByName(vObj.getType());
+               if(xTagDef == null) {
+                       throw restErrorUtil.createRESTException(
+                                       "No TagDefinition found with name :" + 
vObj.getType(),
+                                       MessageEnums.INVALID_INPUT_DATA);
+               }
+
                xObj.setGuid(guid);
-               xObj.setName(vObj.getName());
+               xObj.setType(xTagDef.getId());
                return xObj;
        }
 
        @Override
        @SuppressWarnings("unchecked")
        protected RangerTag mapEntityToViewBean(RangerTag vObj, XXTag xObj) {
+               XXTagDef xTagDef = daoMgr.getXXTagDef().getById(xObj.getType());
+               if(xTagDef == null) {
+                       throw restErrorUtil.createRESTException(
+                                       "No TagDefinition found with name :" + 
xObj.getType(),
+                                       MessageEnums.INVALID_INPUT_DATA);
+               }
 
                vObj.setGuid(xObj.getGuid());
-               vObj.setName(xObj.getName());
+               vObj.setType(xTagDef.getName());
 
-               Map<String, String> attributeValues = 
getAttributeValuesForTag(xObj);
-               vObj.setAttributeValues(attributeValues);
+               Map<String, String> attributes = getAttributesForTag(xObj);
+               vObj.setAttributes(attributes);
 
                return vObj;
        }
 
-       public Map<String, String> getAttributeValuesForTag(XXTag xtag) {
+       public Map<String, String> getAttributesForTag(XXTag xtag) {
                List<XXTagAttribute> tagAttrList = 
daoMgr.getXXTagAttribute().findByTagId(xtag.getId());
                Map<String, String>  ret         = new HashMap<String, 
String>();
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/da832711/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 a05e0bd..f3fe4c4 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
@@ -547,6 +547,10 @@
                <query>select obj.value from XXServiceResourceElementValue obj 
where obj.resElementId = :resElementId</query>
        </named-query>
 
+       <named-query name="XXTagResourceMap.findByGuid">
+               <query>select obj from XXTagResourceMap obj where obj.guid = 
:guid</query>
+       </named-query>
+
        <named-query name="XXTagResourceMap.findByResourceId">
                <query>select obj from XXTagResourceMap obj where 
obj.resourceId = :resourceId</query>
        </named-query>
@@ -586,14 +590,14 @@
        </named-query>
        
        <named-query name="XXTagDef.findByServiceId">
-               <query>select obj from XXTagDef obj where obj.name in
-                               (select tag.name from XXTag tag, 
XXTagResourceMap tagRes, XXServiceResource resource where tag.id = tagRes.tagId 
and tagRes.resourceId = resource.id and resource.serviceId = :serviceId)</query>
+               <query>select obj from XXTagDef obj where obj.id in
+                               (select tag.type from XXTag tag, 
XXTagResourceMap tagRes, XXServiceResource resource where tag.id = tagRes.tagId 
and tagRes.resourceId = resource.id and resource.serviceId = :serviceId)</query>
        </named-query>
 
        <named-query name="XXTagDef.updateTagVersionInService">
                <query>update XXService obj set obj.tagVersion = obj.tagVersion 
+ 1, obj.tagUpdateTime = :tagUpdateTime
-                               where obj.id in (select res.serviceId from 
XXServiceResource res, XXTagResourceMap tagRes, XXTag tag, XXTagDef tagDef
-                                                                 where res.id 
= tagRes.resourceId and tagRes.tagId = tag.id and tag.name = tagDef.name and 
tagDef.id = :tagDefId)</query>
+                               where obj.id in (select res.serviceId from 
XXServiceResource res, XXTagResourceMap tagRes, XXTag tag
+                                                                 where res.id 
= tagRes.resourceId and tagRes.tagId = tag.id and tag.type = :tagDefId)</query>
        </named-query>  
 
        <named-query name="XXTagAttributeDef.findByTagDefId">
@@ -606,7 +610,7 @@
        </named-query>
        
        <named-query name="XXTag.findByName">
-               <query>select obj from XXTag obj where obj.name = :name</query>
+               <query>select obj from XXTag obj, XXTagDef tagDef where 
obj.type = tagDef.id and tagDef.name = :name</query>
        </named-query>
 
        <named-query name="XXTag.findByResourceId">
@@ -617,9 +621,9 @@
                <query>select obj from XXTag obj, XXTagResourceMap tagRes, 
XXServiceResource res where res.guid = :resourceGuid and res.id = 
tagRes.resourceId and tagRes.tagId = obj.id</query>
        </named-query>
 
-       <named-query name="XXTag.findTagNamesByServiceId">
-               <query>select obj.name from XXTag obj, XXServiceResource tRes, 
XXTagResourceMap tResMap where 
-               tRes.serviceId = :serviceId and obj.id = tResMap.tagId and 
tRes.id = tResMap.resourceId </query>
+       <named-query name="XXTag.findTagTypesByServiceId">
+               <query>select obj.name from XXTagDef obj, XXTag tag, 
XXServiceResource resource, XXTagResourceMap tagRes
+                           where obj.id = tag.type and tag.id = tagRes.tagId 
and tagRes.resourceId = resource.id and resource.serviceId = :serviceId</query>
        </named-query>  
        
        <named-query name="XXTag.findByServiceId">
@@ -651,8 +655,8 @@
                                        (select tagResMap.resourceId from 
XXTagResourceMap tagResMap)</query>
        </named-query>
 
-       <named-query 
name="XXServiceResource.findByServiceIdAndResourceSignature">
-               <query>select obj from XXServiceResource obj where 
obj.serviceId = :serviceId and obj.resourceSignature = 
:resourceSignature</query>
+       <named-query name="XXServiceResource.findByResourceSignature">
+               <query>select obj from XXServiceResource obj where 
obj.resourceSignature = :resourceSignature</query>
        </named-query>
 
        <named-query name="XXServiceResource.updateTagVersionInService">

Reply via email to