http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/db/mysql/patches/016-updated-schema-for-tag-based-policy.sql
----------------------------------------------------------------------
diff --git 
a/security-admin/db/mysql/patches/016-updated-schema-for-tag-based-policy.sql 
b/security-admin/db/mysql/patches/016-updated-schema-for-tag-based-policy.sql
index 4f6fe02..629d1c4 100644
--- 
a/security-admin/db/mysql/patches/016-updated-schema-for-tag-based-policy.sql
+++ 
b/security-admin/db/mysql/patches/016-updated-schema-for-tag-based-policy.sql
@@ -34,6 +34,7 @@ CREATE TABLE IF NOT EXISTS `x_tag_def` (
   `is_enabled` TINYINT NULL DEFAULT 1,
   PRIMARY KEY (`id`),
   UNIQUE INDEX `guid_UNIQUE` (`guid` ASC),
+  INDEX `fk_X_TAG_DEF_NAME` (`name` ASC),
   INDEX `fk_X_TAG_DEF_ADDED_BY_ID` (`added_by_id` ASC),
   INDEX `fk_X_TAG_DEF_UPD_BY_ID` (`upd_by_id` ASC),
   CONSTRAINT `fk_X_TAG_DEF_ADDED_BY_ID`
@@ -61,17 +62,14 @@ CREATE TABLE IF NOT EXISTS `x_tag` (
   `update_time` DATETIME NULL,
   `added_by_id` BIGINT(20) NULL,
   `upd_by_id` BIGINT(20) NULL,
-  `tag_def_id` BIGINT(20) NULL,
-  `external_id` VARCHAR(512) NULL,
   `name` VARCHAR(512) NOT NULL,
   PRIMARY KEY (`id`),
-  INDEX `fk_X_TAG_DEF_ID` (`tag_def_id` ASC),
+  INDEX `fk_X_TAG_NAME` (`name` ASC),
   INDEX `fk_X_TAG_ADDED_BY_ID` (`added_by_id` ASC),
   INDEX `fk_X_TAG_UPD_BY_ID` (`upd_by_id` ASC),
-  KEY `external_id` (`external_id`),
-  CONSTRAINT `fk_X_TAG_DEF_ID`
-    FOREIGN KEY (`tag_def_id`)
-    REFERENCES `x_tag_def` (`id`)
+  CONSTRAINT `fk_X_TAG_NAME`
+    FOREIGN KEY (`name`)
+    REFERENCES `x_tag_def` (`name`)
     ON DELETE NO ACTION
     ON UPDATE NO ACTION,
   CONSTRAINT `fk_X_TAG_ADDED_BY_ID`
@@ -89,11 +87,11 @@ ENGINE = InnoDB;
 
 
 -- -----------------------------------------------------
--- Table `x_tagged_resource`
+-- Table `x_service_resource`
 -- -----------------------------------------------------
-DROP TABLE IF EXISTS `x_tagged_resource` ;
+DROP TABLE IF EXISTS `x_service_resource` ;
 
-CREATE TABLE IF NOT EXISTS `x_tagged_resource` (
+CREATE TABLE IF NOT EXISTS `x_service_resource` (
   `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
   `guid` VARCHAR(512) NOT NULL,
   `create_time` DATETIME NULL,
@@ -101,24 +99,23 @@ CREATE TABLE IF NOT EXISTS `x_tagged_resource` (
   `added_by_id` BIGINT(20) NULL,
   `upd_by_id` BIGINT(20) NULL,
   `version` BIGINT(20) NULL,
-  `external_id` VARCHAR(512) NULL,
   `service_id` BIGINT(20) NOT NULL,
+  `resource_signature` varchar(128) DEFAULT NULL,
   `is_enabled` TINYINT NULL DEFAULT 1,
   PRIMARY KEY (`id`),
-  INDEX `fk_X_TAGGED_RESOURCE_ADDED_BY_ID` (`added_by_id` ASC),
-  INDEX `fk_X_TAGGED_RESOURCE_UPD_BY_ID` (`upd_by_id` ASC),
-  KEY `external_id` (`external_id`),
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_SERVICE_ID`
+  INDEX `fk_X_SERVICE_RESOURCE_ADDED_BY_ID` (`added_by_id` ASC),
+  INDEX `fk_X_SERVICE_RESOURCE_UPD_BY_ID` (`upd_by_id` ASC),
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_SERVICE_ID`
     FOREIGN KEY (`service_id`)
     REFERENCES `x_service` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_ADDED_BY_ID`
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_ADDED_BY_ID`
     FOREIGN KEY (`added_by_id`)
     REFERENCES `x_portal_user` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_UPD_BY_ID`
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_UPD_BY_ID`
     FOREIGN KEY (`upd_by_id`)
     REFERENCES `x_portal_user` (`id`)
     ON DELETE RESTRICT
@@ -127,40 +124,40 @@ ENGINE = InnoDB;
 
 
 -- -----------------------------------------------------
--- Table `x_tagged_resource_value`
+-- Table `x_service_resource_element`
 -- -----------------------------------------------------
-DROP TABLE IF EXISTS `x_tagged_resource_value` ;
+DROP TABLE IF EXISTS `x_service_resource_element` ;
 
-CREATE TABLE IF NOT EXISTS `x_tagged_resource_value` (
+CREATE TABLE IF NOT EXISTS `x_service_resource_element` (
   `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
   `guid` VARCHAR(512) NOT NULL,
   `create_time` DATETIME NULL,
   `update_time` DATETIME NULL,
   `added_by_id` BIGINT(20) NULL,
   `upd_by_id` BIGINT(20) NULL,
-  `tagged_res_id` BIGINT(20) NOT NULL,
+  `res_id` BIGINT(20) NOT NULL,
   `res_def_id` BIGINT(20) NOT NULL,
   `is_excludes` TINYINT(1) NULL DEFAULT false,
   `is_recursive` TINYINT(1) NULL DEFAULT false,
   PRIMARY KEY (`id`),
-  INDEX `fk_X_TAGGED_RESOURCE_VALUE_ADDED_BY_ID` (`added_by_id` ASC),
-  INDEX `fk_X_TAGGED_RESOURCE_VALUE_UPD_BY_ID` (`upd_by_id` ASC),
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_VALUE_res_def_id` 
+  INDEX `fk_X_SERVICE_RESOURCE_ELEMENT_ADDED_BY_ID` (`added_by_id` ASC),
+  INDEX `fk_X_SERVICE_RESOURCE_ELEMENT_UPD_BY_ID` (`upd_by_id` ASC),
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_ELEMENT_res_def_id` 
     FOREIGN KEY (`res_def_id`) 
     REFERENCES `x_resource_def` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_VALUE_tagged_res_id` 
-    FOREIGN KEY (`tagged_res_id`) 
-    REFERENCES `x_tagged_resource` (`id`)
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_ELEMENT_res_id` 
+    FOREIGN KEY (`res_id`) 
+    REFERENCES `x_service_resource` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_VALUE_ADDED_BY_ID`
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_ELEMENT_ADDED_BY_ID`
     FOREIGN KEY (`added_by_id`)
     REFERENCES `x_portal_user` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RESOURCE_VALUE_UPD_BY_ID`
+  CONSTRAINT `fk_X_SERVICE_RESOURCE_ELEMENT_UPD_BY_ID`
     FOREIGN KEY (`upd_by_id`)
     REFERENCES `x_portal_user` (`id`)
     ON DELETE RESTRICT
@@ -254,10 +251,10 @@ CREATE TABLE IF NOT EXISTS `x_tag_resource_map` (
   `added_by_id` BIGINT(20) NULL,
   `upd_by_id` BIGINT(20) NULL,
   `tag_id` BIGINT(20) NOT NULL,
-  `tagged_res_id` BIGINT(20) NOT NULL,
+  `res_id` BIGINT(20) NOT NULL,
   PRIMARY KEY (`id`),
   INDEX `fk_X_TAG_ID` (`tag_id` ASC),
-  INDEX `fk_X_TAGGED_RES_ID` (`tagged_res_id` ASC),
+  INDEX `fk_X_SERVICE_RES_ID` (`res_id` ASC),
   INDEX `fk_X_TAG_RES_MAP_ADDED_BY_ID` (`added_by_id` ASC),
   INDEX `fk_X_TAG_RES_MAP_UPD_BY_ID` (`upd_by_id` ASC),
   CONSTRAINT `fk_X_TAG_RES_MAP_TAG_ID`
@@ -265,9 +262,9 @@ CREATE TABLE IF NOT EXISTS `x_tag_resource_map` (
     REFERENCES `x_tag` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAG_RES_MAP_TAGGED_RES_ID`
-    FOREIGN KEY (`tagged_res_id`)
-    REFERENCES `x_tagged_resource` (`id`)
+  CONSTRAINT `fk_X_TAG_RES_MAP_SERVICE_RES_ID`
+    FOREIGN KEY (`res_id`)
+    REFERENCES `x_service_resource` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
   CONSTRAINT `fk_X_TAG_RES_MAP_ADDED_BY_ID`
@@ -284,35 +281,35 @@ ENGINE = InnoDB;
 
 
 -- -----------------------------------------------------
--- Table `x_tagged_resource_value_map`
+-- Table `x_service_resource_element_value`
 -- -----------------------------------------------------
-DROP TABLE IF EXISTS `x_tagged_resource_value_map` ;
+DROP TABLE IF EXISTS `x_service_resource_element_value` ;
 
-CREATE TABLE IF NOT EXISTS `x_tagged_resource_value_map` (
+CREATE TABLE IF NOT EXISTS `x_service_resource_element_value` (
   `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
   `guid` VARCHAR(512) NOT NULL,
   `create_time` DATETIME NULL,
   `update_time` DATETIME NULL,
   `added_by_id` BIGINT(20) NULL,
   `upd_by_id` BIGINT(20) NULL,
-  `res_value_id` BIGINT(20) NOT NULL,
+  `res_element_id` BIGINT(20) NOT NULL,
   `value` VARCHAR(512) NOT NULL,
   `sort_order` INT NULL,
   PRIMARY KEY (`id`),
-  INDEX `fk_X_RESOURCE_VALUE_ID` (`res_value_id` ASC),
-  INDEX `fk_X_TAGGED_RES_VAL_MAP_ADDED_BY_ID` (`added_by_id` ASC),
-  INDEX `fk_X_TAGGED_RES_VAL_MAP_UPD_BY_ID` (`upd_by_id` ASC),
-  CONSTRAINT `fk_X_RESOURCE_VALUE_ID`
-    FOREIGN KEY (`res_value_id`)
-    REFERENCES `x_tagged_resource_value` (`id`)
+  INDEX `fk_X_RESOURCE_ELEMENT_ID` (`res_element_id` ASC),
+  INDEX `fk_X_SERVICE_RES_VAL_MAP_ADDED_BY_ID` (`added_by_id` ASC),
+  INDEX `fk_X_SERVICE_RES_VAL_MAP_UPD_BY_ID` (`upd_by_id` ASC),
+  CONSTRAINT `fk_X_RESOURCE_ELEMENT_ID`
+    FOREIGN KEY (`res_element_id`)
+    REFERENCES `x_service_resource_element` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RES_VAL_MAP_ADDED_BY_ID`
+  CONSTRAINT `fk_X_SERVICE_RES_VAL_MAP_ADDED_BY_ID`
     FOREIGN KEY (`added_by_id`)
     REFERENCES `x_portal_user` (`id`)
     ON DELETE RESTRICT
     ON UPDATE RESTRICT,
-  CONSTRAINT `fk_X_TAGGED_RES_VAL_MAP_UPD_BY_ID`
+  CONSTRAINT `fk_X_SERVICE_RES_VAL_MAP_UPD_BY_ID`
     FOREIGN KEY (`upd_by_id`)
     REFERENCES `x_portal_user` (`id`)
     ON DELETE RESTRICT
@@ -324,4 +321,6 @@ ENGINE = InnoDB;
 -- ranger database add column in x_service_def and x_service table
 -- ----------------------------------------------------------------
 alter table x_service_def add column `options` VARCHAR(1024) DEFAULT NULL NULL;
-alter table x_service add column `tag_service` BIGINT DEFAULT NULL NULL;
\ No newline at end of file
+alter table x_service add column `tag_service` BIGINT DEFAULT NULL NULL,
+                      add column `tag_version` BIGINT DEFAULT 0 NOT NULL,
+                      add column `tag_update_time` DATETIME DEFAULT NULL NULL;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/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 f50687a..08a632c 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
@@ -20,16 +20,12 @@
 package org.apache.ranger.biz;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -41,33 +37,27 @@ import org.apache.ranger.entity.XXDBBase;
 import org.apache.ranger.entity.XXResourceDef;
 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;
-import org.apache.ranger.entity.XXTaggedResourceValueMap;
+import org.apache.ranger.entity.XXServiceResourceElement;
+import org.apache.ranger.entity.XXServiceResourceElementValue;
 import org.apache.ranger.plugin.model.*;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerTagDef.RangerTagAttributeDef;
-import org.apache.ranger.plugin.model.RangerTag;
-import 
org.apache.ranger.plugin.policyresourcematcher.RangerDefaultPolicyResourceMatcher;
 import org.apache.ranger.plugin.store.AbstractTagStore;
 import org.apache.ranger.plugin.store.PList;
-import org.apache.ranger.plugin.store.ServiceStore;
-import org.apache.ranger.plugin.store.TagStore;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.plugin.util.ServiceTags;
 import org.apache.ranger.service.RangerAuditFields;
 import org.apache.ranger.service.RangerTagDefService;
+import org.apache.ranger.service.RangerTagResourceMapService;
 import org.apache.ranger.service.RangerTagService;
-import org.apache.ranger.service.RangerTaggedResourceService;
+import org.apache.ranger.service.RangerServiceResourceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 @Component
-public class TagDBStore implements TagStore {
+public class TagDBStore extends AbstractTagStore {
        private static final Log LOG = LogFactory.getLog(TagDBStore.class);
 
        @Autowired
@@ -77,7 +67,10 @@ public class TagDBStore implements TagStore {
        RangerTagService rangerTagService;
 
        @Autowired
-       RangerTaggedResourceService rangerTaggedResourceService;
+       RangerServiceResourceService rangerServiceResourceService;
+
+       @Autowired
+       RangerTagResourceMapService rangerTagResourceMapService;
 
        @Autowired
        RangerDaoManager daoManager;
@@ -91,41 +84,25 @@ public class TagDBStore implements TagStore {
        @Autowired
        GUIDUtil guidUtil;
 
-       @Autowired
-       ServiceDBStore serviceDBStore;
-
        @Override
        public void init() throws Exception {
-
-       }
-
-       @Override
-       public void setServiceStore(ServiceStore svcStore) {
-
+               super.init();
        }
 
        @Override
        public RangerTagDef createTagDef(RangerTagDef tagDef) throws Exception {
-
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> TagDBStore.createTagDef(" + tagDef + 
")");
                }
 
-               RangerTagDef ret;
-
-               try {
-                       ret = rangerTagDefService.create(tagDef);
-
-                       createTagAttributeDefs(ret.getId(), 
tagDef.getAttributeDefs());
+               RangerTagDef ret = rangerTagDefService.create(tagDef);
 
-                       ret = rangerTagDefService.read(ret.getId());
+               createTagAttributeDefs(ret.getId(), tagDef.getAttributeDefs());
 
-               } catch (Exception e) {
-                       throw errorUtil.createRESTException("failed to save 
tag-def [" + tagDef.getName() + "]", MessageEnums.ERROR_CREATING_OBJECT);
-               }
+               ret = rangerTagDefService.read(ret.getId());
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.createTagDef(" + tagDef + 
")");
+                       LOG.debug("<== TagDBStore.createTagDef(" + tagDef + "): 
id=" + (ret == null ? null : ret.getId()));
                }
 
                return ret;
@@ -133,627 +110,925 @@ public class TagDBStore implements TagStore {
 
        @Override
        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);
+                       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);
+               RangerTagDef ret = rangerTagDefService.update(tagDef);
 
+               // TODO: delete attributes might fail; so instead of 
delete+create, following should be updated to deal with only attributes that 
changed
                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);
+               ret = rangerTagDefService.read(ret.getId());
 
-                       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;
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.updateTagDef(" + tagDef + "): 
" + ret);
                }
 
-               for (XXTagAttributeDef xAttrDef : tagAttrDefList) {
-                       if (LOG.isDebugEnabled()) {
-                               LOG.debug("Deleting tag-attribute def [" + 
xAttrDef.getName() + "]");
-                       }
-                       daoManager.getXXTagAttributeDef().remove(xAttrDef);
-               }
+               return ret;
        }
 
        @Override
        public void deleteTagDef(String name) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.deleteTagDef(" + name + ")");
+               }
 
                if (StringUtils.isNotBlank(name)) {
-                       return;
-               }
+                       List<RangerTagDef> tagDefs = getTagDefsByName(name);
 
-               List<RangerTagDef> ret;
+                       if(CollectionUtils.isNotEmpty(tagDefs)) {
+                               for (RangerTagDef tagDef : tagDefs) {
+                                       if(LOG.isDebugEnabled()) {
+                                               LOG.debug("Deleting tag-def 
[name=" + name + "; id=" + tagDef.getId() + "]");
+                                       }
 
-               if (LOG.isDebugEnabled()) {
-                       LOG.debug("Deleting all tag-defs with name [" + name + 
"]");
+                                       rangerTagDefService.delete(tagDef);
+                               }
+                       }
                }
 
-               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);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.deleteTagDef(" + name + ")");
                }
        }
 
        @Override
        public void deleteTagDefById(Long id) throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("Deleting tag-def [" + id + "]");
+                       LOG.debug("==> TagDBStore.deleteTagDefById(" + id + 
")");
                }
 
-               RangerTagDef tagDef = rangerTagDefService.read(id);
-
-               rangerTagDefService.delete(tagDef);
-       }
+               if(id != null) {
+                       RangerTagDef tagDef = rangerTagDefService.read(id);
 
-       @Override
-       public List<RangerTagDef> getTagDef(String name) throws Exception {
+                       if(tagDef != null) {
+                               rangerTagDefService.delete(tagDef);
+                       }
+               }
 
-               List<RangerTagDef> ret;
-               if (StringUtils.isNotBlank(name)) {
-                       SearchFilter filter = new 
SearchFilter(SearchFilter.TAG_DEF_NAME, name);
-                       ret = getTagDefs(filter);
-               } else {
-                       ret = null;
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.deleteTagDefById(" + id + 
")");
                }
-               return ret;
        }
 
        @Override
        public RangerTagDef getTagDefById(Long id) throws Exception {
-               return rangerTagDefService.read(id);
-       }
-
-       @Override
-       public List<RangerTagDef> getTagDefs(SearchFilter filter) throws 
Exception {
-               return getPaginatedTagDefs(filter).getList();
-       }
-
-       @Override
-       public PList<RangerTagDef> getPaginatedTagDefs(SearchFilter filter) 
throws Exception {
-               return rangerTagDefService.searchRangerTagDefs(filter);
-       }
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagDefById(" + id + ")");
+               }
 
-       /*
-       private XXTag createTagAttributes(RangerTag tag) {
-               XXTag xTag = new XXTag();
+               RangerTagDef ret = rangerTagDefService.read(id);
 
-               xTag.setExternalId(tag.getExternalId());
-               xTag.setName(tag.getName());
-               xTag.setGuid(guidUtil.genGUID());
-               xTag = (XXTag) 
rangerAuditFields.populateAuditFieldsForCreate(xTag);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagDefById(" + id + "): " 
+ ret);
+               }
 
-               xTag = daoManager.getXXTag().create(xTag);
+               return ret;
+       }
 
-               for (Entry<String, String> attr : 
tag.getAttributeValues().entrySet()) {
-                       XXTagAttribute xTagAttr = new XXTagAttribute();
+       @Override
+       public RangerTagDef getTagDefByGuid(String guid) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagDefByGuid(" + guid + 
")");
+               }
 
-                       xTagAttr.setTagId(xTag.getId());
-                       xTagAttr.setName(attr.getKey());
-                       xTagAttr.setValue(attr.getValue());
-                       xTagAttr.setGuid(guidUtil.genGUID());
-                       xTagAttr = (XXTagAttribute) 
rangerAuditFields.populateAuditFieldsForCreate(xTagAttr);
+               RangerTagDef ret = rangerTagDefService.getTagDefByGuid(guid);
 
-                       xTagAttr = 
daoManager.getXXTagAttribute().create(xTagAttr);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagDefByGuid(" + guid + 
"): " + ret);
                }
 
-               return xTag;
+               return ret;
        }
 
-       private void deleteTagAttributes(Long tagId) {
-               List<XXTagAttribute> tagAttrList = 
daoManager.getXXTagAttribute().findByTagId(tagId);
-               for (XXTagAttribute tagAttr : tagAttrList) {
-                       daoManager.getXXTagAttribute().remove(tagAttr);
+       @Override
+       public List<RangerTagDef> getTagDefsByName(String name) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagDefsByName(" + name + 
")");
                }
-       }
-
-       private void createResourceSpecForResource(RangerServiceResource 
resource) {
 
-               String serviceName = resource.getServiceName();
+               List<RangerTagDef> ret = null;
 
-               XXService xService = 
daoManager.getXXService().findByName(serviceName);
-               if (xService == null) {
-                       throw errorUtil.createRESTException("No Service found 
with name: " + serviceName, MessageEnums.ERROR_CREATING_OBJECT);
+               if (StringUtils.isNotBlank(name)) {
+                       ret = rangerTagDefService.getTagDefsByName(name);
                }
 
-               XXServiceDef xServiceDef = 
daoManager.getXXServiceDef().getById(xService.getType());
-               if (xServiceDef == null) {
-                       throw errorUtil.createRESTException("No Service-Def 
found with ID: " + xService.getType(), MessageEnums.ERROR_CREATING_OBJECT);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagDefsByName(" + name + 
"): count=" + (ret == null ? 0 : ret.size()));
                }
 
-               Map<String, RangerPolicy.RangerPolicyResource> resourceSpec = 
resource.getResourceSpec();
-
-               for (Entry<String, RangerPolicyResource> resSpec : 
resourceSpec.entrySet()) {
-                       XXResourceDef xResDef = 
daoManager.getXXResourceDef().findByNameAndServiceDefId(resSpec.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);
-                       }
-
-                       RangerPolicyResource policyRes = resSpec.getValue();
-
-                       XXTaggedResourceValue taggedResValue = new 
XXTaggedResourceValue();
-                       taggedResValue.setIsExcludes(policyRes.getIsExcludes());
-                       
taggedResValue.setIsRecursive(policyRes.getIsRecursive());
-                       taggedResValue.setResDefId(xResDef.getId());
-                       taggedResValue.setTaggedResourceId(resource.getId());
-                       taggedResValue.setGuid(guidUtil.genGUID());
-
-                       taggedResValue = (XXTaggedResourceValue) 
rangerAuditFields.populateAuditFieldsForCreate(taggedResValue);
-
-                       taggedResValue = 
daoManager.getXXTaggedResourceValue().create(taggedResValue);
-
-                       int sortOrder = 1;
-                       for (String resVal : policyRes.getValues()) {
-                               XXTaggedResourceValueMap taggedResValueMap = 
new XXTaggedResourceValueMap();
-                               
taggedResValueMap.setResValueId(taggedResValue.getId());
-                               taggedResValueMap.setValue(resVal);
-                               taggedResValueMap.setSortOrder(sortOrder);
-                               taggedResValueMap.setGuid(guidUtil.genGUID());
-                               taggedResValueMap = (XXTaggedResourceValueMap) 
rangerAuditFields.populateAuditFieldsForCreate(taggedResValueMap);
-
-                               taggedResValueMap = 
daoManager.getXXTaggedResourceValueMap().create(taggedResValueMap);
-                               sortOrder++;
-                       }
-               }
+               return ret;
        }
 
-       private void deleteResourceValue(Long resourceId) {
-               List<XXTaggedResourceValue> taggedResValueList = 
daoManager.getXXTaggedResourceValue().findByTaggedResId(resourceId);
-               for (XXTaggedResourceValue taggedResValue : taggedResValueList) 
{
-                       List<XXTaggedResourceValueMap> taggedResValueMapList = 
daoManager.getXXTaggedResourceValueMap().findByResValueId(taggedResValue.getId());
-                       for (XXTaggedResourceValueMap taggedResValueMap : 
taggedResValueMapList) {
-                               
daoManager.getXXTaggedResourceValueMap().remove(taggedResValueMap);
-                       }
-                       
daoManager.getXXTaggedResourceValue().remove(taggedResValue);
+       @Override
+       public List<RangerTagDef> getTagDefs(SearchFilter filter) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagDefs(" + filter + ")");
                }
-       }
 
-       private void updateResourceSpecForResource(RangerServiceResource 
updResource) {
+               List<RangerTagDef> ret = getPaginatedTagDefs(filter).getList();
 
-               if (updResource != null) {
-                       deleteResourceValue(updResource.getId());
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagDefs(" + filter + "): " 
+ ret);
                }
 
-               createResourceSpecForResource(updResource);
+               return ret;
        }
-       */
 
        @Override
-       public RangerTag createTag(RangerTag tag) throws Exception
-       {
-               throw new Exception("Not implemented");
-
-               /*
+       public PList<RangerTagDef> getPaginatedTagDefs(SearchFilter filter) 
throws Exception {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> TagDBStore.createTag(" + tag + ")");
+                       LOG.debug("==> TagDBStore.getPaginatedTagDefs(" + 
filter + ")");
                }
 
-               throw new Exception("Not implemented");
-
+               PList<RangerTagDef> ret = 
rangerTagDefService.searchRangerTagDefs(filter);
 
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getPaginatedTagDefs(" + 
filter + "): " + ret);
+               }
 
-               RangerTag ret = null;
+               return ret;
+       }
 
 
-               try {
+       @Override
+       public RangerTag createTag(RangerTag tag) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.createTag(" + tag + ")");
+               }
 
-                       ret = 
rangerTagService.getPopulatedViewObject(createTagAttributes(tag));
+               RangerTag ret = rangerTagService.create(tag);
 
-               } catch (Exception e) {
-                       throw errorUtil.createRESTException("failed to save tag 
[" + tag.getName() + "]", MessageEnums.ERROR_CREATING_OBJECT);
-               }
+               createTagAttributes(ret.getId(), tag.getAttributeValues());
 
+               ret = rangerTagService.read(ret.getId());
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.createTag(" + tag + ")");
+                       LOG.debug("<== TagDBStore.createTag(" + tag + "): " + 
ret);
                }
 
                return ret;
-               */
        }
-
+       
        @Override
-       public RangerTag updateTag(RangerTag tag) throws Exception
-       {
-
-               throw new Exception("Not implemented");
-
-               /*
+       public RangerTag updateTag(RangerTag tag) throws Exception {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> TagDBStore.updateTag(" + tag + ")");
                }
 
-               throw new Exception("Not implemented");
-
-               RangerTag ret = null;
-
-
                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.getName() + "], Reason: No Tag found with id: [" + tag.getId() + 
"]", MessageEnums.DATA_NOT_UPDATABLE);
                }
 
                if (StringUtils.isEmpty(tag.getCreatedBy())) {
                        tag.setCreatedBy(existing.getCreatedBy());
                }
+
                if (tag.getCreateTime() == null) {
                        tag.setCreateTime(existing.getCreateTime());
                }
+
                if (StringUtils.isEmpty(tag.getGuid())) {
                        tag.setGuid(existing.getGuid());
                }
 
-               deleteTagAttributes(existing.getId());
+               RangerTag ret = rangerTagService.update(tag);
 
-               createTagAttributes(tag);
-
-               ret = rangerTagService.update(tag);
+               deleteTagAttributes(existing.getId());
+               createTagAttributes(existing.getId(), tag.getAttributeValues());
 
                ret = rangerTagService.read(ret.getId());
 
-
-
                if (LOG.isDebugEnabled()) {
                        LOG.debug("<== TagDBStore.updateTag(" + tag + ") : " + 
ret);
                }
 
                return ret;
-               */
        }
 
        @Override
        public void deleteTagById(Long id) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.deleteTagById(" + id + ")");
+               }
 
-               throw new Exception("Not implemented");
-
-               /*
                RangerTag tag = rangerTagService.read(id);
+
                deleteTagAttributes(id);
+
                rangerTagService.delete(tag);
-               */
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.deleteTagById(" + id + ")");
+               }
        }
 
        @Override
        public RangerTag getTagById(Long id) throws Exception {
-               throw new Exception("Not implemented");
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagById(" + id + ")");
+               }
 
-               /*
-               RangerTag ret = null;
+               RangerTag ret = rangerTagService.read(id);
 
-               ret = rangerTagService.read(id);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagById(" + id + "): " + 
ret);
+               }
+
+               return ret;
+       }
+
+       @Override
+       public RangerTag getTagByGuid(String guid) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagByGuid(" + guid + ")");
+               }
+
+               RangerTag ret = rangerTagService.getTagByGuid(guid);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagByGuid(" + guid + "): " 
+ ret);
+               }
 
                return ret;
-               */
        }
 
        @Override
        public List<RangerTag> getTagsByName(String name) throws Exception {
-               throw new Exception("Not implemented");
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagsByName(" + name + ")");
+               }
 
-               /*
                List<RangerTag> ret = null;
 
                if (StringUtils.isNotBlank(name)) {
-                       SearchFilter filter = new 
SearchFilter(SearchFilter.TAG_DEF_NAME, name);
-                       ret = getTags(filter);
-               } else {
-                       ret = null;
+                       ret = rangerTagService.getTagsByName(name);
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagsByName(" + name + "): 
count=" + (ret == null ? 0 : ret.size()));
                }
 
                return ret;
-               */
        }
 
        @Override
-       public List<RangerTag> getTagsByExternalId(String externalId) throws 
Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTag> getTagsForResourceId(Long resourceId) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagsForResourceId(" + 
resourceId + ")");
+               }
 
-               /*
                List<RangerTag> ret = null;
 
-               if (StringUtils.isNotBlank(externalId)) {
-                       SearchFilter filter = new 
SearchFilter(SearchFilter.TAG_EXTERNAL_ID, externalId);
-                       ret = getTags(filter);
-               } else {
-                       ret = null;
+               if (resourceId != null) {
+                       ret = rangerTagService.getTagsForResourceId(resourceId);
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagsForResourceId(" + 
resourceId + "): count=" + (ret == null ? 0 : ret.size()));
                }
 
                return ret;
-               */
        }
 
        @Override
-       public List<RangerTag> getTags(SearchFilter filter) throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTag> getTagsForResourceGuid(String resourceGuid) 
throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagsForResourceGuid(" + 
resourceGuid + ")");
+               }
 
-               /*
                List<RangerTag> ret = null;
 
-               ret = rangerTagService.searchRangerTags(filter).getList();
+               if (resourceGuid != null) {
+                       ret = 
rangerTagService.getTagsForResourceGuid(resourceGuid);
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagsForResourceGuid(" + 
resourceGuid + "): count=" + (ret == null ? 0 : ret.size()));
+               }
 
                return ret;
-               */
        }
 
-
        @Override
-       public RangerServiceResource 
createServiceResource(RangerServiceResource resource) throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTag> getTags(SearchFilter filter) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTags(" + filter + ")");
+               }
+
+               List<RangerTag> ret = 
rangerTagService.searchRangerTags(filter).getList();
 
-               /*
                if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTags(" + filter + "): 
count=" + (ret == null ? 0 : ret.size()));
+               }
+
+               return ret;
+       }
 
-                       LOG.debug("==> TagDBStore.createResource(" + resource + 
")");
+       @Override
+       public PList<RangerTag> getPaginatedTags(SearchFilter filter) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getPaginatedTags(" + filter + 
")");
                }
-               throw new Exception("Not implemented");
 
-               RangerServiceResource ret = null;
+               PList<RangerTag> ret = 
rangerTagService.searchRangerTags(filter);
 
-               try {
-                       ret = rangerTaggedResourceService.create(resource);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getPaginatedTags(" + filter + 
"): count=" + (ret == null ? 0 : ret.getPageSize()));
+               }
 
-                       ret = rangerTaggedResourceService.read(ret.getId());
+               return ret;
+       }
 
-                       createResourceSpecForResource(ret);
 
-               } catch (Exception e) {
-                       throw errorUtil.createRESTException("failed to save 
resource [" + resource.getId() + "]", MessageEnums.ERROR_CREATING_OBJECT);
+       @Override
+       public RangerServiceResource 
createServiceResource(RangerServiceResource resource) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.createServiceResource(" + 
resource + ")");
                }
 
+               // TODO: update resource signature
+               RangerServiceResource ret = 
rangerServiceResourceService.create(resource);
+
+               createResourceSpecForResource(ret.getId(), resource);
+
+               ret = rangerServiceResourceService.read(ret.getId());
 
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("<== TagDBStore.createResource(" + resource + 
")");
+                       LOG.debug("<== TagDBStore.createServiceResource(" + 
resource + ")");
                }
 
                return ret;
-               */
        }
 
        @Override
        public RangerServiceResource 
updateServiceResource(RangerServiceResource resource) throws Exception {
-               throw new Exception("Not implemented");
-
-               /*
-
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> TagDBStore.updateResource(" + resource + 
")");
                }
 
-               throw new Exception("Not implemented");
-
-               RangerServiceResource ret = null;
-
-               RangerServiceResource existing = 
rangerTaggedResourceService.read(resource.getId());
-
+               RangerServiceResource existing = 
rangerServiceResourceService.read(resource.getId());
 
                if (existing == null) {
-                       throw errorUtil.createRESTException("failed to update 
tag [" + resource.getId() + "], Reason: No resource found with id: [" + 
resource.getId() + "]",
-                                       MessageEnums.DATA_NOT_UPDATABLE);
+                       throw errorUtil.createRESTException("failed to update 
tag [" + resource.getId() + "], Reason: No resource found with id: [" + 
resource.getId() + "]", MessageEnums.DATA_NOT_UPDATABLE);
                }
 
                if (StringUtils.isEmpty(resource.getCreatedBy())) {
                        resource.setCreatedBy(existing.getCreatedBy());
                }
+
                if (resource.getCreateTime() == null) {
                        resource.setCreateTime(existing.getCreateTime());
                }
+
                if (StringUtils.isEmpty(resource.getGuid())) {
                        resource.setGuid(existing.getGuid());
                }
 
-               ret = rangerTaggedResourceService.update(resource);
-
-               ret = rangerTaggedResourceService.read(ret.getId());
-
-               updateResourceSpecForResource(ret);
+               // TODO: update resource signature
+               rangerServiceResourceService.update(resource);
+               deleteResourceSpecForResource(existing.getId());
+               createResourceSpecForResource(existing.getId(), resource);
 
+               RangerServiceResource ret = 
rangerServiceResourceService.read(existing.getId());
 
                if (LOG.isDebugEnabled()) {
                        LOG.debug("<== TagDBStore.updateResource(" + resource + 
") : " + ret);
                }
 
                return ret;
-               */
        }
 
        @Override
        public void deleteServiceResourceById(Long id) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.deleteServiceResourceById(" + 
id + ")");
+               }
 
-               throw new Exception("Not implemented");
+               RangerServiceResource resource = getServiceResourceById(id);
 
-               /*
-               XXTaggedResource taggedRes = 
daoManager.getXXTaggedResource().getById(id);
-               if (taggedRes == null) {
-                       throw errorUtil.createRESTException("No Resource exists 
with Id: " + id, MessageEnums.DATA_NOT_FOUND);
+               if(resource != null) {
+                       deleteResourceSpecForResource(resource.getId());
+                       rangerServiceResourceService.delete(resource);
                }
 
-               // Remove taggedResourceValue
-               deleteResourceValue(id);
-
-               // Remove taggedResource
-               daoManager.getXXTaggedResource().remove(id);
-               */
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.deleteServiceResourceById(" + 
id + ")");
+               }
        }
 
        @Override
-       public List<RangerServiceResource> 
getServiceResourcesByExternalId(String externalId) throws Exception {
-
-               throw new Exception("Not implemented");
-
-               /*
-               List<RangerServiceResource> ret = null;
+       public RangerServiceResource getServiceResourceById(Long id) throws 
Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getServiceResourceById(" + id 
+ ")");
+               }
 
+               RangerServiceResource ret = 
rangerServiceResourceService.read(id);
 
-               if (StringUtils.isNotBlank(externalId)) {
-                       SearchFilter filter = new 
SearchFilter(SearchFilter.TAG_EXTERNAL_ID, externalId);
-                       ret = getServiceResources(filter);
-               } else {
-                       ret = null;
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getServiceResourceById(" + id 
+ "): " + ret);
                }
 
                return ret;
-               */
        }
 
        @Override
-       public RangerServiceResource getServiceResourceById(Long id) throws 
Exception {
+       public RangerServiceResource getServiceResourceByGuid(String guid) 
throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getServiceResourceByGuid(" + 
guid + ")");
+               }
 
-               throw new Exception("Not implemented");
+               RangerServiceResource ret = 
rangerServiceResourceService.getServiceResourceByGuid(guid);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getServiceResourceByGuid(" + 
guid + "): " + ret);
+               }
 
-               /*
-               RangerServiceResource ret = null;
-               ret = rangerTaggedResourceService.read(id);
                return ret;
-               */
        }
 
+       @Override
+       public List<RangerServiceResource> 
getServiceResourcesByServiceAndResourceSpec(String serviceName, Map<String, 
RangerPolicyResource> resourceSpec) throws Exception {
+               // TODO Auto-generated method stub
+               return null;
+       }
 
        @Override
-       public List<RangerServiceResource> 
getServiceResourcesByServiceAndResourceSpec(String serviceName, Map<String, 
RangerPolicy.RangerPolicyResource> resourceSpec) throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerServiceResource> getServiceResources(SearchFilter 
filter) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getServiceResources(" + 
filter + ")");
+               }
+
+               List<RangerServiceResource> ret = 
rangerServiceResourceService.searchServiceResources(filter).getList();
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getServiceResources(" + 
filter + "): count=" + (ret == null ? 0 : ret.size()));
+               }
+
+               return ret;
        }
 
        @Override
-       public List<RangerServiceResource> getServiceResources(SearchFilter 
filter) throws Exception{
+       public PList<RangerServiceResource> 
getPaginatedServiceResources(SearchFilter filter) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getPaginatedServiceResources(" + filter + ")");
+               }
 
-               throw new Exception("Not implemented");
+               PList<RangerServiceResource> ret = 
rangerServiceResourceService.searchServiceResources(filter);
 
-               /*
-               List<RangerServiceResource> ret = null;
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getPaginatedServiceResources(" + filter + "): count=" + (ret == null 
? 0 : ret.getPageSize()));
+               }
 
-               ret = 
rangerTaggedResourceService.searchRangerTaggedResources(filter).getList();
                return ret;
-               */
        }
 
+
        @Override
        public RangerTagResourceMap createTagResourceMap(RangerTagResourceMap 
tagResourceMap) throws Exception {
-               throw new Exception("Not implemented");
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.createTagResourceMap(" + 
tagResourceMap + ")");
+               }
+
+               RangerTagResourceMap ret = 
rangerTagResourceMapService.create(tagResourceMap);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.createTagResourceMap(" + 
tagResourceMap + "): " + ret);
+               }
+
+               return ret;
        }
 
        @Override
        public void deleteTagResourceMapById(Long id) throws Exception {
-               throw new Exception("Not implemented");
-       }
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.deleteTagResourceMapById(" + 
id + ")");
+               }
 
-       @Override
-       public List<RangerTagResourceMap> getTagResourceMap(String 
externalResourceId, String externalTagId) throws Exception {
-               throw new Exception("Not implemented");
+               RangerTagResourceMap tagResourceMap = 
rangerTagResourceMapService.read(id);
+
+               rangerTagResourceMapService.delete(tagResourceMap);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.deleteTagResourceMapById(" + 
id + ")");
+               }
        }
 
        @Override
        public RangerTagResourceMap getTagResourceMapById(Long id) throws 
Exception {
-               throw new Exception("Not implemented");
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagResourceMapById(" + id 
+ ")");
+               }
+
+               RangerTagResourceMap ret = rangerTagResourceMapService.read(id);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagResourceMapById(" + id 
+ ")");
+               }
+
+               return ret;
        }
 
+       @Override
+       public List<RangerTagResourceMap> getTagResourceMapsForTagId(Long 
tagId) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagResourceMapsForTagId(" 
+ tagId + ")");
+               }
+
+               List<RangerTagResourceMap> ret = 
rangerTagResourceMapService.getByTagId(tagId);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagResourceMapsForTagId(" 
+ tagId + "): count=" + (ret == null ? 0 : ret.size()));
+               }
+
+               return ret;
+       }
 
        @Override
-       public List<RangerTagResourceMap> getTagResourceMaps(SearchFilter 
filter) throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTagResourceMap> getTagResourceMapsForTagGuid(String 
tagGuid) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getTagResourceMapsForTagGuid(" + tagGuid + ")");
+               }
+
+               List<RangerTagResourceMap> ret = 
rangerTagResourceMapService.getByTagGuid(tagGuid);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getTagResourceMapsForTagGuid(" + tagGuid + "): count=" + (ret == 
null ? 0 : ret.size()));
+               }
+
+               return ret;
        }
 
        @Override
-       public ServiceTags getServiceTagsIfUpdated(String serviceName, Long 
lastKnownVersion) throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTagResourceMap> getTagResourceMapsForResourceId(Long 
resourceId) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getTagResourceMapsForResourceId(" + resourceId + ")");
+               }
+
+               List<RangerTagResourceMap> ret = 
rangerTagResourceMapService.getByResourceId(resourceId);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getTagResourceMapsForResourceId(" + resourceId + "): count=" + (ret 
== null ? 0 : ret.size()));
+               }
+
+               return ret;
        }
 
        @Override
-       public PList<RangerTagResourceMap> 
getPaginatedTagResourceMaps(SearchFilter filter) throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTagResourceMap> 
getTagResourceMapsForResourceGuid(String resourceGuid) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getTagResourceMapsForResourceGuid(" + resourceGuid + ")");
+               }
+
+               List<RangerTagResourceMap> ret = 
rangerTagResourceMapService.getByResourceGuid(resourceGuid);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getTagResourceMapsForResourceGuid(" + resourceGuid + "): count=" + 
(ret == null ? 0 : ret.size()));
+               }
+
+               return ret;
        }
 
        @Override
-       public List<String> getTags(String serviceName) throws Exception {
-               throw new Exception("Not implemented");
+       public RangerTagResourceMap getTagResourceMapForTagAndResourceId(Long 
tagId, Long resourceId) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getTagResourceMapsForTagAndResourceId(" + tagId + ", " + resourceId 
+ ")");
+               }
+
+               RangerTagResourceMap ret = 
rangerTagResourceMapService.getByTagAndResourceId(tagId, resourceId);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getTagResourceMapsForTagAndResourceId(" + tagId + ", " + resourceId 
+ "): " + ret);
+               }
+
+               return ret;
        }
 
        @Override
-       public List<String> lookupTags(String serviceName, String 
tagNamePattern) throws Exception {
-               throw new Exception("Not implemented");
+       public RangerTagResourceMap 
getTagResourceMapForTagAndResourceGuid(String tagGuid, String resourceGuid) 
throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> 
TagDBStore.getTagResourceMapForTagAndResourceGuid(" + tagGuid + ", " + 
resourceGuid + ")");
+               }
+
+               RangerTagResourceMap ret = 
rangerTagResourceMapService.getByTagAndResourceGuid(tagGuid, resourceGuid);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== 
TagDBStore.getTagResourceMapForTagAndResourceGuid(" + tagGuid + ", " + 
resourceGuid + "): " + ret);
+               }
+
+               return ret;
        }
 
+
        @Override
-       public List<RangerTag> getTagsForServiceResource(Long resourceId) 
throws Exception {
-               throw new Exception("Not implemented");
+       public List<RangerTagResourceMap> getTagResourceMaps(SearchFilter 
filter) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getTagResourceMaps(" + 
filter+ ")");
+               }
+
+               List<RangerTagResourceMap> ret = 
rangerTagResourceMapService.searchRangerTaggedResources(filter).getList();
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getTagResourceMaps(" + filter 
+ "): count=" + (ret == null ? 0 : ret.size()));
+               }
+
+               return ret;
        }
 
        @Override
-       public List<RangerTag> getTagsForServiceResourceByExtId(String 
resourceExtId) throws Exception {
-               throw new Exception("Not implemented");
+       public PList<RangerTagResourceMap> 
getPaginatedTagResourceMaps(SearchFilter filter) throws Exception {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getPaginatedTagResourceMaps(" 
+ filter+ ")");
+               }
+
+               PList<RangerTagResourceMap> ret = 
rangerTagResourceMapService.searchRangerTaggedResources(filter);
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getPaginatedTagResourceMaps(" 
+ filter + "): count=" + (ret == null ? 0 : ret.getPageSize()));
+               }
+
+               return ret;
        }
 
+
        @Override
-       public List<RangerTagDef> getTagDefsByExternalId(String extId) throws 
Exception {
-               throw new Exception("Not implemented");
+       public ServiceTags getServiceTagsIfUpdated(String serviceName, Long 
lastKnownVersion) throws Exception {
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.getServiceTagsIfUpdated(" + 
serviceName + ", " + lastKnownVersion + ")");
+               }
+
+               ServiceTags ret = null;
+
+               XXService xxService = 
daoManager.getXXService().findByName(serviceName);
+
+               if(xxService == null) {
+                       throw new Exception("service does not exist. name=" + 
serviceName);
+               }
+
+               if(lastKnownVersion == null || xxService.getTagVersion() == 
null || !lastKnownVersion.equals(xxService.getTagVersion())) {
+                       RangerServiceDef serviceDef = 
svcStore.getServiceDef(xxService.getType());
+
+                       if(serviceDef == null) {
+                               throw new Exception("service-def does not 
exist. id=" + xxService.getType());
+                       }
+
+                       List<RangerTagDef>          tagDefs         = 
rangerTagDefService.getTagDefsByServiceId(xxService.getId());
+                       List<RangerTag>             tags            = 
rangerTagService.getTagsByServiceId(xxService.getId());
+                       List<RangerServiceResource> resources       = 
rangerServiceResourceService.getTaggedResourcesInServiceId(xxService.getId());
+                       List<RangerTagResourceMap>  tagResourceMaps = 
rangerTagResourceMapService.getTagResourceMapsByServiceId(xxService.getId());
+
+                       Map<Long, RangerTagDef> tagDefMap        = new 
HashMap<Long, RangerTagDef>();
+                       Map<Long, RangerTag>    tagMap           = new 
HashMap<Long, RangerTag>();
+                       Map<Long, List<Long>>   resourceToTagIds = new 
HashMap<Long, List<Long>>();
+                       
+                       if(CollectionUtils.isNotEmpty(tagDefs)) {
+                               for(RangerTagDef tagDef : tagDefs) {
+                                       tagDefMap.put(tagDef.getId(), tagDef);
+                               }
+                       }
+
+                       if(CollectionUtils.isNotEmpty(tags)) {
+                               for(RangerTag tag : tags) {
+                                       tagMap.put(tag.getId(), tag);
+                               }
+                       }
+
+                       if(CollectionUtils.isNotEmpty(tagResourceMaps)) {
+                               Long       resourceId = null;
+                               List<Long> tagIds     = null;
+
+                               for(RangerTagResourceMap tagResourceMap : 
tagResourceMaps) {
+                                       if(! 
tagResourceMap.getResourceId().equals(resourceId)) {
+                                               if(resourceId != null) {
+                                                       
resourceToTagIds.put(resourceId, tagIds);
+                                               }
+
+                                               resourceId = 
tagResourceMap.getResourceId();
+                                               tagIds     = new 
ArrayList<Long>();
+                                       }
+
+                                       tagIds.add(tagResourceMap.getTagId());
+                               }
+                               
+                               if(resourceId != null) {
+                                       resourceToTagIds.put(resourceId, 
tagIds);
+                               }
+                       }
+
+                       ret = new ServiceTags();
+                       ret.setServiceName(xxService.getName());
+                       ret.setTagVersion(xxService.getTagVersion());
+                       ret.setTagUpdateTime(xxService.getTagUpdateTime());
+                       ret.setTagDefinitions(tagDefMap);
+                       ret.setTags(tagMap);
+                       ret.setServiceResources(resources);
+                       ret.setResourceToTagIds(resourceToTagIds);
+               }
+
+               if(LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.getServiceTagsIfUpdated(" + 
serviceName + ", " + lastKnownVersion + ")");
+               }
+
+               return ret;
        }
 
        @Override
-       public List<RangerTagResourceMap> getTagResourceMapsByTagId(Long tagId) 
throws Exception {
+       public List<String> getTags(String serviceName) throws Exception {
                throw new Exception("Not implemented");
        }
 
        @Override
-       public List<RangerTagResourceMap> getTagResourceMapsByResourceId(Long 
resourceId) throws Exception {
+       public List<String> lookupTags(String serviceName, String 
tagNamePattern) throws Exception {
                throw new Exception("Not implemented");
        }
+
+       private List<XXTagAttributeDef> createTagAttributeDefs(Long tagDefId, 
List<RangerTagAttributeDef> tagAttrDefList) {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.createTagAttributeDefs(" + 
tagDefId + ", attributeDefCount=" + (tagAttrDefList == null ? 0 : 
tagAttrDefList.size()) + ")");
+               }
+
+               if (tagDefId == null) {
+                       throw 
errorUtil.createRESTException("TagDBStore.createTagAttributeDefs(): Error 
creating tag-attr def. tagDefId can not be null.", 
MessageEnums.ERROR_CREATING_OBJECT);
+               }
+
+               List<XXTagAttributeDef> ret = new 
ArrayList<XXTagAttributeDef>();
+
+               if (CollectionUtils.isNotEmpty(tagAttrDefList)) {
+                       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);
+
+                               ret.add(xAttrDef);
+                       }
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.createTagAttributeDefs(" + 
tagDefId + ", attributeDefCount=" + (tagAttrDefList == null ? 0 : 
tagAttrDefList.size()) + "): retCount=" + ret.size());
+               }
+
+               return ret;
+       }
+
+       private void deleteTagAttributeDefs(Long tagDefId) {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> TagDBStore.deleteTagAttributeDefs(" + 
tagDefId + ")");
+               }
+
+               if (tagDefId != null) {
+                       List<XXTagAttributeDef> tagAttrDefList = 
daoManager.getXXTagAttributeDef().findByTagDefId(tagDefId);
+
+                       if (CollectionUtils.isNotEmpty(tagAttrDefList)) {
+                               for (XXTagAttributeDef xAttrDef : 
tagAttrDefList) {
+                                       if (LOG.isDebugEnabled()) {
+                                               LOG.debug("Deleting 
tag-attribute def [name=" + xAttrDef.getName() + "; id=" + xAttrDef.getId() + 
"]");
+                                       }
+                                       
daoManager.getXXTagAttributeDef().remove(xAttrDef);
+                               }
+                       }
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== TagDBStore.deleteTagAttributeDefs(" + 
tagDefId + ")");
+               }
+       }
+
+       private List<XXTagAttribute> createTagAttributes(Long tagId, 
Map<String, String> attributeValues) {
+               List<XXTagAttribute> ret = new ArrayList<XXTagAttribute>();
+
+               if(MapUtils.isNotEmpty(attributeValues)) {
+                       for (Map.Entry<String, String> attr : 
attributeValues.entrySet()) {
+                               XXTagAttribute xTagAttr = new XXTagAttribute();
+
+                               xTagAttr.setTagId(tagId);
+                               xTagAttr.setName(attr.getKey());
+                               xTagAttr.setValue(attr.getValue());
+                               xTagAttr.setGuid(guidUtil.genGUID());
+                               xTagAttr = (XXTagAttribute) 
rangerAuditFields.populateAuditFieldsForCreate(xTagAttr);
+
+                               xTagAttr = 
daoManager.getXXTagAttribute().create(xTagAttr);
+
+                               ret.add(xTagAttr);
+                       }
+               }
+
+               return ret;
+       }
+
+       private void deleteTagAttributes(Long tagId) {
+               List<XXTagAttribute> tagAttrList = 
daoManager.getXXTagAttribute().findByTagId(tagId);
+               for (XXTagAttribute tagAttr : tagAttrList) {
+                       daoManager.getXXTagAttribute().remove(tagAttr);
+               }
+       }
+
+       private void deleteResourceSpecForResource(Long resourceId) {
+               List<XXServiceResourceElement> resElements = 
daoManager.getXXServiceResourceElement().findByResourceId(resourceId);
+               
+               if(CollectionUtils.isNotEmpty(resElements)) {
+                       for(XXServiceResourceElement resElement : resElements) {
+                               List<XXServiceResourceElementValue> 
elementValues = 
daoManager.getXXServiceResourceElementValue().findByResValueId(resElement.getId());
+                               
+                               if(CollectionUtils.isNotEmpty(elementValues)) {
+                                       for(XXServiceResourceElementValue 
elementValue : elementValues) {
+                                               
daoManager.getXXServiceResourceElementValue().remove(elementValue.getId());
+                                       }
+                               }
+                               
+                               
daoManager.getXXServiceResourceElement().remove(resElement.getId());
+                       }
+               }
+       }
+
+       private void createResourceSpecForResource(Long resourceId, 
RangerServiceResource resource) {
+               String serviceName = resource.getServiceName();
+
+               XXService xService = 
daoManager.getXXService().findByName(serviceName);
+
+               if (xService == null) {
+                       throw errorUtil.createRESTException("No Service found 
with name: " + serviceName, MessageEnums.ERROR_CREATING_OBJECT);
+               }
+
+               XXServiceDef xServiceDef = 
daoManager.getXXServiceDef().getById(xService.getType());
+
+               if (xServiceDef == null) {
+                       throw errorUtil.createRESTException("No Service-Def 
found with ID: " + xService.getType(), MessageEnums.ERROR_CREATING_OBJECT);
+               }
+
+               Map<String, RangerPolicy.RangerPolicyResource> resourceSpec = 
resource.getResourceSpec();
+
+               for (Map.Entry<String, RangerPolicyResource> resSpec : 
resourceSpec.entrySet()) {
+                       XXResourceDef xResDef = 
daoManager.getXXResourceDef().findByNameAndServiceDefId(resSpec.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);
+                       }
+
+                       RangerPolicyResource policyRes = resSpec.getValue();
+
+                       XXServiceResourceElement resourceElement = new 
XXServiceResourceElement();
+                       
resourceElement.setIsExcludes(policyRes.getIsExcludes());
+                       
resourceElement.setIsRecursive(policyRes.getIsRecursive());
+                       resourceElement.setResDefId(xResDef.getId());
+                       resourceElement.setResourceId(resourceId);
+                       resourceElement.setGuid(guidUtil.genGUID());
+
+                       resourceElement = (XXServiceResourceElement) 
rangerAuditFields.populateAuditFieldsForCreate(resourceElement);
+
+                       resourceElement = 
daoManager.getXXServiceResourceElement().create(resourceElement);
+
+                       int sortOrder = 1;
+                       for (String resVal : policyRes.getValues()) {
+                               XXServiceResourceElementValue 
resourceElementValue = new XXServiceResourceElementValue();
+                               
resourceElementValue.setResElementId(resourceElement.getId());
+                               resourceElementValue.setValue(resVal);
+                               resourceElementValue.setSortOrder(sortOrder);
+                               
resourceElementValue.setGuid(guidUtil.genGUID());
+                               resourceElementValue = 
(XXServiceResourceElementValue) 
rangerAuditFields.populateAuditFieldsForCreate(resourceElementValue);
+
+                               resourceElementValue = 
daoManager.getXXServiceResourceElementValue().create(resourceElementValue);
+                               sortOrder++;
+                       }
+               }
+       }
+
+       private void deleteResourceValue(Long resourceId) {
+               List<XXServiceResourceElement> taggedResValueList = 
daoManager.getXXServiceResourceElement().findByResourceId(resourceId);
+               for (XXServiceResourceElement taggedResValue : 
taggedResValueList) {
+                       List<XXServiceResourceElementValue> 
taggedResValueMapList = 
daoManager.getXXServiceResourceElementValue().findByResValueId(taggedResValue.getId());
+                       for (XXServiceResourceElementValue taggedResValueMap : 
taggedResValueMapList) {
+                               
daoManager.getXXServiceResourceElementValue().remove(taggedResValueMap);
+                       }
+                       
daoManager.getXXServiceResourceElement().remove(taggedResValue);
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java 
b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
index 21facb0..488ba8f 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
@@ -552,17 +552,17 @@ public class AppConstants extends RangerCommonEnums {
         */
        public static final int CLASS_TYPE_XA_TAG_ATTR_DEF = 1042;
        /**
-        * Class type of XXTaggedResource
+        * Class type of XXServiceResource
         */
-       public static final int CLASS_TYPE_XA_TAGGED_RESOURCE = 1043;
+       public static final int CLASS_TYPE_XA_SERVICE_RESOURCE = 1043;
        /**
-        * Class type of XXTaggedResourceValue
+        * Class type of XXServiceResourceElement
         */
-       public static final int CLASS_TYPE_XA_TAGGED_RESOURCE_VALUE = 1044;
+       public static final int CLASS_TYPE_XA_SERVICE_RESOURCE_ELEMENT = 1044;
        /**
-        * Class type of XXTaggedResourceValueMap
+        * Class type of XXServiceResourceElementValue
         */
-       public static final int CLASS_TYPE_XA_TAGGED_RESOURCE_VALUE_MAP = 1045;
+       public static final int CLASS_TYPE_XA_SERVICE_RESOURCE_ELEMENT_VALUE = 
1045;
        /**
         * Class type of XXTag
         */

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java 
b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
index da01853..d9cf87a 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/RangerDaoManagerBase.java
@@ -29,8 +29,6 @@ import org.apache.log4j.Logger;
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.RESTErrorUtil;
 import org.apache.ranger.common.db.BaseDao;
-import org.apache.ranger.entity.XXTagDef;
-import org.apache.ranger.entity.XXTaggedResource;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
@@ -170,14 +168,14 @@ public abstract class RangerDaoManagerBase {
                if (classType == AppConstants.CLASS_TYPE_XA_TAG_ATTR_DEF) {
                        return getXXTagAttributeDef();
                }
-               if (classType == AppConstants.CLASS_TYPE_XA_TAGGED_RESOURCE) {
-                       return getXXTaggedResource();
+               if (classType == AppConstants.CLASS_TYPE_XA_SERVICE_RESOURCE) {
+                       return getXXServiceResource();
                }
-               if (classType == 
AppConstants.CLASS_TYPE_XA_TAGGED_RESOURCE_VALUE) {
-                       return getXXTaggedResourceValue();
+               if (classType == 
AppConstants.CLASS_TYPE_XA_SERVICE_RESOURCE_ELEMENT) {
+                       return getXXServiceResourceElement();
                }
-               if (classType == 
AppConstants.CLASS_TYPE_XA_TAGGED_RESOURCE_VALUE_MAP) {
-                       return getXXTaggedResourceValueMap();
+               if (classType == 
AppConstants.CLASS_TYPE_XA_SERVICE_RESOURCE_ELEMENT_VALUE) {
+                       return getXXServiceResourceElementValue();
                }
                if (classType == AppConstants.CLASS_TYPE_XA_TAG) {
                        return getXXTag();
@@ -324,14 +322,14 @@ public abstract class RangerDaoManagerBase {
                if (className.equals("XXTagAttributeDef")) {
                        return getXXTagAttributeDef();
                }
-               if (className.equals("XXTaggedResource")) {
-                       return getXXTaggedResource();
+               if (className.equals("XXServiceResource")) {
+                       return getXXServiceResource();
                }
-               if (className.equals("XXTaggedResourceValue")) {
-                       return getXXTaggedResourceValue();
+               if (className.equals("XXServiceResourceElement")) {
+                       return getXXServiceResourceElement();
                }
-               if (className.equals("XXTaggedResourceValueMap")) {
-                       return getXXTaggedResourceValueMap();
+               if (className.equals("XXServiceResourceElementValue")) {
+                       return getXXServiceResourceElementValue();
                }
                if (className.equals("XXTag")) {
                        return getXXTag();
@@ -526,16 +524,16 @@ public abstract class RangerDaoManagerBase {
                return new XXTagAttributeDefDao(this);
        }
 
-       public XXTaggedResourceDao getXXTaggedResource() {
-               return new XXTaggedResourceDao(this);
+       public XXServiceResourceDao getXXServiceResource() {
+               return new XXServiceResourceDao(this);
        }
 
-       public XXTaggedResourceValueDao getXXTaggedResourceValue() {
-               return new XXTaggedResourceValueDao(this);
+       public XXServiceResourceElementDao getXXServiceResourceElement() {
+               return new XXServiceResourceElementDao(this);
        }
 
-       public XXTaggedResourceValueMapDao getXXTaggedResourceValueMap() {
-               return new XXTaggedResourceValueMapDao(this);
+       public XXServiceResourceElementValueDao 
getXXServiceResourceElementValue() {
+               return new XXServiceResourceElementValueDao(this);
        }
 
        public XXTagDao getXXTag() {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/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
new file mode 100644
index 0000000..63cdc6e
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ranger.db;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.NoResultException;
+
+import org.apache.ranger.authorization.utils.StringUtil;
+import org.apache.ranger.common.db.BaseDao;
+import org.apache.ranger.entity.XXServiceResource;
+
+public class XXServiceResourceDao extends BaseDao<XXServiceResource> {
+
+       public XXServiceResourceDao(RangerDaoManagerBase daoManager) {
+               super(daoManager);
+       }
+
+       public XXServiceResource findByGuid(String guid) {
+               if (StringUtil.isEmpty(guid)) {
+                       return null;
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResource.findByGuid", tClass)
+                                       .setParameter("guid", 
guid).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
+       public List<XXServiceResource> findByServiceId(Long serviceId) {
+               if (serviceId == null) {
+                       return new ArrayList<XXServiceResource>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResource.findByServiceId", tClass)
+                                       .setParameter("serviceId", 
serviceId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXServiceResource>();
+               }
+       }
+
+       public XXServiceResource findByServiceIdAndResourceSignature(Long 
serviceId, String resourceSignature) {
+               if (serviceId == null || StringUtil.isEmpty(resourceSignature)) 
{
+                       return null;
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResource.findByServiceIdAndResourceSignature",
 tClass)
+                                       .setParameter("serviceId", serviceId)
+                                       .setParameter("resourceSignature", 
resourceSignature).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
+       public List<XXServiceResource> findTaggedResourcesInServiceId(Long 
serviceId) {
+               if (serviceId == null) {
+                       return new ArrayList<XXServiceResource>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResource.findTaggedResourcesInServiceId",
 tClass)
+                                       .setParameter("serviceId", 
serviceId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXServiceResource>();
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementDao.java
new file mode 100644
index 0000000..8e2baab
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementDao.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ranger.db;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.NoResultException;
+
+import org.apache.ranger.common.db.BaseDao;
+import org.apache.ranger.entity.XXServiceResourceElement;
+
+public class XXServiceResourceElementDao extends 
BaseDao<XXServiceResourceElement> {
+
+       public XXServiceResourceElementDao(RangerDaoManagerBase daoManager) {
+               super(daoManager);
+       }
+
+       public List<XXServiceResourceElement> findByResourceId(Long resourceId) 
{
+               if (resourceId == null) {
+                       return new ArrayList<XXServiceResourceElement>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResourceElement.findByResourceId",
 tClass)
+                                       .setParameter("resourceId", resourceId)
+                                       .getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXServiceResourceElement>();
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementValueDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementValueDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementValueDao.java
new file mode 100644
index 0000000..04942a7
--- /dev/null
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceElementValueDao.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ranger.db;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.NoResultException;
+
+import org.apache.ranger.common.db.BaseDao;
+import org.apache.ranger.entity.XXServiceResourceElementValue;
+
+public class XXServiceResourceElementValueDao extends 
BaseDao<XXServiceResourceElementValue> {
+
+       public XXServiceResourceElementValueDao(RangerDaoManagerBase 
daoManager) {
+               super(daoManager);
+       }
+
+       public List<XXServiceResourceElementValue> findByResValueId(Long 
resElementId) {
+               if (resElementId == null) {
+                       return new ArrayList<XXServiceResourceElementValue>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResourceElementValue.findByResElementId",
 tClass)
+                                       .setParameter("resElementId", 
resElementId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXServiceResourceElementValue>();
+               }
+       }
+       
+       @SuppressWarnings("unchecked")
+       public List<String> findValuesByResElementId(Long resElementId) {
+               if (resElementId == null) {
+                       return new ArrayList<String>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXServiceResourceElementValue.findValuesByResElementId")
+                                       .setParameter("resElementId", 
resElementId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<String>();
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/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 d8562d2..667238f 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
@@ -20,10 +20,13 @@
 package org.apache.ranger.db;
 
 import java.util.ArrayList;
+import java.util.Date;
 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.XXTag;
 
@@ -33,13 +36,13 @@ public class XXTagDao extends BaseDao<XXTag> {
                super(daoManager);
        }
 
-       public List<XXTag> findByTaggedResource(Long taggedResId) {
-               if (taggedResId == null) {
+       public List<XXTag> findByResourceId(Long resourceId) {
+               if (resourceId == null) {
                        return new ArrayList<XXTag>();
                }
                try {
-                       return 
getEntityManager().createNamedQuery("XXTag.findByTaggedResource", tClass)
-                                       .setParameter("taggedResId", 
taggedResId).getResultList();
+                       return 
getEntityManager().createNamedQuery("XXTag.findByResourceId", tClass)
+                                       .setParameter("resourceId", 
resourceId).getResultList();
                } catch (NoResultException e) {
                        return new ArrayList<XXTag>();
                }
@@ -58,16 +61,67 @@ public class XXTagDao extends BaseDao<XXTag> {
                }
        }
 
-       public List<XXTag> findTagsByExternalId(String externalId) {
-               if (externalId == null) {
+       public XXTag findByGuid(String guid) {
+               if (StringUtil.isEmpty(guid)) {
+                       return null;
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTag.findByGuid", tClass)
+                                       .setParameter("guid", 
guid).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
+       public List<XXTag> findByName(String name) {
+               if (StringUtils.isEmpty(name)) {
+                       return new ArrayList<XXTag>();
+               }
+
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTag.findByName", tClass)
+                                       .setParameter("name", 
name).getResultList();
+               } catch (NoResultException e) {
                        return new ArrayList<XXTag>();
                }
+       }
+
+       public List<XXTag> findForResourceId(Long resourceId) {
+               if (resourceId == null) {
+                       return new ArrayList<XXTag>();
+               }
+
                try {
-                       return 
getEntityManager().createNamedQuery("XXTag.findTagsByExternalId", tClass)
-                                       .setParameter("externalId", 
externalId).getResultList();
+                       return 
getEntityManager().createNamedQuery("XXTag.findByResourceId", tClass)
+                                       .setParameter("resourceId", 
resourceId).getResultList();
                } catch (NoResultException e) {
                        return new ArrayList<XXTag>();
                }
        }
 
+       public List<XXTag> findForResourceGuid(String resourceGuid) {
+               if (StringUtils.isEmpty(resourceGuid)) {
+                       return new ArrayList<XXTag>();
+               }
+
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTag.findByResourceGuid", tClass)
+                                       .setParameter("resourceGuid", 
resourceGuid).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTag>();
+               }
+       }
+
+       public List<XXTag> findByServiceId(Long serviceId) {
+               if (serviceId == null) {
+                       return new ArrayList<XXTag>();
+               }
+
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTag.findByServiceId", tClass)
+                                       .setParameter("serviceId", 
serviceId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTag>();
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/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 971b589..f18fea8 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
@@ -20,6 +20,7 @@
 package org.apache.ranger.db;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import javax.persistence.NoResultException;
@@ -34,6 +35,19 @@ public class XXTagDefDao extends BaseDao<XXTagDef> {
                super(daoManager);
        }
 
+       public XXTagDef findByGuid(String guid) {
+               if (StringUtils.isEmpty(guid)) {
+                       return null;
+               }
+
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagDef.findByGuid", tClass)
+                                       .setParameter("guid", 
guid).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
        public List<XXTagDef> findByName(String name) {
                if (StringUtils.isEmpty(name)) {
                        return new ArrayList<XXTagDef>();
@@ -47,4 +61,35 @@ public class XXTagDefDao extends BaseDao<XXTagDef> {
                }
        }
 
+       public List<XXTagDef> findByServiceId(Long serviceId) {
+               if (serviceId == null) {
+                       return new ArrayList<XXTagDef>();
+               }
+
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagDef.findByServiceId", tClass)
+                                       .setParameter("serviceId", 
serviceId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTagDef>();
+               }
+       }
+
+       public void updateServiceForTagDefUpdate(Long tagDefId, Date 
updateTime) {
+               if (tagDefId == null) {
+                       return;
+               }
+
+               if(updateTime == null) {
+                       updateTime = new Date();
+               }
+
+               try {
+                       
getEntityManager().createNamedQuery("XXTagDef.updateTagVersionInService", 
tClass)
+                                       .setParameter("tagDefId", tagDefId)
+                                       .setParameter("tagUpdateTime", 
updateTime)
+                                       .executeUpdate();
+               } catch (NoResultException e) {
+                       return;
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/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 57ac5e8..1db0cef 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
@@ -20,10 +20,12 @@
 package org.apache.ranger.db;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import javax.persistence.NoResultException;
 
+import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXTagResourceMap;
 
@@ -33,16 +35,108 @@ public class XXTagResourceMapDao extends 
BaseDao<XXTagResourceMap> {
                super(daoManager);
        }
 
-       public List<XXTagResourceMap> findByTaggedResourceId(Long taggedResId) {
-               if (taggedResId == null) {
+       public List<XXTagResourceMap> findByResourceId(Long resourceId) {
+               if (resourceId == null) {
                        return new ArrayList<XXTagResourceMap>();
                }
                try {
-                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByTaggedResourceId", 
tClass)
-                                       .setParameter("taggedResId", 
taggedResId).getResultList();
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByResourceId", tClass)
+                                       .setParameter("resourceId", 
resourceId).getResultList();
                } catch (NoResultException e) {
                        return new ArrayList<XXTagResourceMap>();
                }
        }
 
+       public List<XXTagResourceMap> findByResourceGuid(String resourceGuid) {
+               if (StringUtil.isEmpty(resourceGuid)) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByResourceGuid", 
tClass)
+                                       .setParameter("resourceGuid", 
resourceGuid).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+       }
+
+       public List<XXTagResourceMap> findByTagId(Long tagId) {
+               if (tagId == null) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByTagId", tClass)
+                                       .setParameter("tagId", 
tagId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+       }
+
+       public List<XXTagResourceMap> findByTagGuid(String tagGuid) {
+               if (StringUtil.isEmpty(tagGuid)) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByTagGuid", tClass)
+                                       .setParameter("tagGuid", 
tagGuid).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+       }
+
+       public XXTagResourceMap findByTagAndResourceId(Long tagId, Long 
resourceId) {
+               if (tagId == null || resourceId == null) {
+                       return null;
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByTagAndResourceId", 
tClass)
+                                       .setParameter("tagId", tagId)
+                                       .setParameter("resourceId", 
resourceId).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
+       public XXTagResourceMap findByTagAndResourceGuid(String tagGuid, String 
resourceGuid) {
+               if (tagGuid == null || resourceGuid == null) {
+                       return null;
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByTagAndResourceGuid",
 tClass)
+                                       .setParameter("tagGuid", tagGuid)
+                                       .setParameter("resourceGuid", 
resourceGuid).getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
+       public List<XXTagResourceMap> findByServiceId(Long serviceId) {
+               if (serviceId == null) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXTagResourceMap.findByServiceId", tClass)
+                                       .setParameter("serviceId", 
serviceId).getResultList();
+               } catch (NoResultException e) {
+                       return new ArrayList<XXTagResourceMap>();
+               }
+       }
+
+       public void updateServiceForTagUpdate(Long tagId, Date updateTime) {
+               if (tagId == null) {
+                       return;
+               }
+
+               if(updateTime == null) {
+                       updateTime = new Date();
+               }
+
+               try {
+                       
getEntityManager().createNamedQuery("XXTagResourceMap.updateTagVersionInService",
 tClass)
+                                       .setParameter("tagId", tagId)
+                                       .setParameter("tagUpdateTime", 
updateTime)
+                                       .executeUpdate();
+               } catch (NoResultException e) {
+                       return;
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceDao.java
deleted file mode 100644
index b7c2b3e..0000000
--- a/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceDao.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.db;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.NoResultException;
-
-import org.apache.ranger.common.db.BaseDao;
-import org.apache.ranger.entity.XXTaggedResource;
-
-public class XXTaggedResourceDao extends BaseDao<XXTaggedResource> {
-
-       public XXTaggedResourceDao(RangerDaoManagerBase daoManager) {
-               super(daoManager);
-       }
-
-       public List<XXTaggedResource> findByServiceId(Long serviceId) {
-               if (serviceId == null) {
-                       return new ArrayList<XXTaggedResource>();
-               }
-               try {
-                       return 
getEntityManager().createNamedQuery("XXTaggedResource.findByServiceId", tClass)
-                                       .setParameter("serviceId", 
serviceId).getResultList();
-               } catch (NoResultException e) {
-                       return new ArrayList<XXTaggedResource>();
-               }
-
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueDao.java
deleted file mode 100644
index 6f72a3c..0000000
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueDao.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.db;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.NoResultException;
-
-import org.apache.ranger.common.db.BaseDao;
-import org.apache.ranger.entity.XXTaggedResourceValue;
-
-public class XXTaggedResourceValueDao extends BaseDao<XXTaggedResourceValue> {
-
-       public XXTaggedResourceValueDao(RangerDaoManagerBase daoManager) {
-               super(daoManager);
-       }
-
-       public List<XXTaggedResourceValue> findByTaggedResId(Long taggedResId) {
-               if (taggedResId == null) {
-                       return new ArrayList<XXTaggedResourceValue>();
-               }
-               try {
-                       return 
getEntityManager().createNamedQuery("XXTaggedResourceValue.findByTaggedResId", 
tClass)
-                                       .setParameter("taggedResId", 
taggedResId)
-                                       .getResultList();
-               } catch (NoResultException e) {
-                       return new ArrayList<XXTaggedResourceValue>();
-               }
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/303f7b70/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueMapDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueMapDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueMapDao.java
deleted file mode 100644
index 016766f..0000000
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXTaggedResourceValueMapDao.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.db;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.NoResultException;
-
-import org.apache.ranger.common.db.BaseDao;
-import org.apache.ranger.entity.XXTaggedResourceValue;
-import org.apache.ranger.entity.XXTaggedResourceValueMap;
-
-public class XXTaggedResourceValueMapDao extends 
BaseDao<XXTaggedResourceValueMap> {
-
-       public XXTaggedResourceValueMapDao(RangerDaoManagerBase daoManager) {
-               super(daoManager);
-       }
-
-       public List<XXTaggedResourceValueMap> findByResValueId(Long resValueId) 
{
-               if (resValueId == null) {
-                       return new ArrayList<XXTaggedResourceValueMap>();
-               }
-               try {
-                       return 
getEntityManager().createNamedQuery("XXTaggedResourceValueMap.findByResValueId",
 tClass)
-                                       .setParameter("resValueId", 
resValueId).getResultList();
-               } catch (NoResultException e) {
-                       return new ArrayList<XXTaggedResourceValueMap>();
-               }
-       }
-       
-       @SuppressWarnings("unchecked")
-       public List<String> findValuesByResValueId(Long resValueId) {
-               if (resValueId == null) {
-                       return new ArrayList<String>();
-               }
-               try {
-                       return 
getEntityManager().createNamedQuery("XXTaggedResourceValueMap.findValuesByResValueId")
-                                       .setParameter("resValueId", 
resValueId).getResultList();
-               } catch (NoResultException e) {
-                       return new ArrayList<String>();
-               }
-       }
-
-}

Reply via email to