http://git-wip-us.apache.org/repos/asf/ranger/blob/c84b98fb/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java 
b/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java
index 53683ec..09494fc 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java
@@ -19,61 +19,63 @@
 
 package org.apache.ranger.biz;
 
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ranger.authorization.hadoop.config.RangerConfiguration;
 import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.*;
 import org.apache.ranger.plugin.model.*;
-import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.util.RangerPerfTracer;
+import org.apache.ranger.service.RangerServiceResourceService;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionTemplate;
 
-
 public class RangerTagDBRetriever {
        static final Log LOG = LogFactory.getLog(RangerTagDBRetriever.class);
        static final Log PERF_LOG = 
RangerPerfTracer.getPerfLogger("db.RangerTagDBRetriever");
        public static final String OPTION_RANGER_FILTER_TAGS_FOR_SERVICE_PLUGIN 
= "ranger.filter.tags.for.service.plugin";
 
+       public static final Type subsumedDataType = new 
TypeToken<List<RangerTagDef.RangerTagAttributeDef>>() {}.getType();
+
+       public static final Gson gsonBuilder = new 
GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z")
+                       .create();
+
        private final RangerDaoManager daoMgr;
-       private final XXService xService;
        private final LookupCache lookupCache;
 
-       private final PlatformTransactionManager  txManager;
-       private final TransactionTemplate         txTemplate;
-
        private List<RangerServiceResource> serviceResources;
        private Map<Long, RangerTagDef> tagDefs;
-       private Map<Long, RangerTag> tags;
-       private List<RangerTagResourceMap> tagResourceMaps;
 
-       private boolean filterForServicePlugin;
+       RangerTagDBRetriever(final RangerDaoManager daoMgr, final 
PlatformTransactionManager txManager, final XXService xService) {
 
-       public RangerTagDBRetriever(final RangerDaoManager daoMgr, final 
PlatformTransactionManager txManager, final XXService xService) {
                this.daoMgr = daoMgr;
-               this.txManager = txManager;
-               if (this.txManager != null) {
-                       this.txTemplate = new 
TransactionTemplate(this.txManager);
-                       this.txTemplate.setReadOnly(true);
+
+               final TransactionTemplate txTemplate;
+
+               if (txManager != null) {
+                       txTemplate = new TransactionTemplate(txManager);
+                       txTemplate.setReadOnly(true);
                } else {
-                       this.txTemplate = null;
+                       txTemplate = null;
                }
-               this.xService = xService;
                this.lookupCache = new LookupCache();
 
 
-               if (this.daoMgr != null && this.xService != null) {
+               if (this.daoMgr != null && xService != null) {
 
                        RangerPerfTracer perf = null;
 
@@ -81,13 +83,11 @@ public class RangerTagDBRetriever {
                                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"RangerTagDBReceiver.getTags(serviceName=" + xService.getName());
                        }
 
-                       filterForServicePlugin = 
RangerConfiguration.getInstance().getBoolean(OPTION_RANGER_FILTER_TAGS_FOR_SERVICE_PLUGIN,
 false);
-
-                       if (this.txTemplate == null) {
+                       if (txTemplate == null) {
                                if (LOG.isDebugEnabled()) {
                                        LOG.debug("Load Tags in the same thread 
and using an existing transaction");
                                }
-                               if (initializeTagCache(xService) == false) {
+                               if (!initializeTagCache(xService)) {
                                        LOG.error("Failed to get tags for 
service:[" + xService.getName() + "] in the same thread and using an existing 
transaction");
                                }
                        } else {
@@ -110,20 +110,48 @@ public class RangerTagDBRetriever {
                }
        }
 
-       public List<RangerTagResourceMap> getTagResourceMaps() {
-               return tagResourceMaps;
-       }
-
-       public List<RangerServiceResource> getServiceResources() {
+       List<RangerServiceResource> getServiceResources() {
                return serviceResources;
        }
 
-       public Map<Long, RangerTagDef> getTagDefs() {
+       Map<Long, RangerTagDef> getTagDefs() {
                return tagDefs;
        }
 
-       public Map<Long, RangerTag> getTags() {
-               return tags;
+       Map<Long, RangerTag> getTags() {
+
+               Map<Long, RangerTag> ret = new HashMap<>();
+
+               if (CollectionUtils.isNotEmpty(serviceResources)) {
+                       for (RangerServiceResource serviceResource : 
serviceResources) {
+                               List<RangerTag> tags = 
lookupCache.serviceResourceToTags.get(serviceResource.getId());
+                               if (CollectionUtils.isNotEmpty(tags)) {
+                                       for (RangerTag tag : tags) {
+                                               ret.put(tag.getId(), tag);
+                                       }
+                               }
+                       }
+               }
+
+               return ret;
+       }
+
+       Map<Long, List<Long>> getResourceToTagIds() {
+               Map<Long, List<Long>> ret = new HashMap<>();
+
+               if (CollectionUtils.isNotEmpty(serviceResources)) {
+                       for (RangerServiceResource serviceResource : 
serviceResources) {
+                               List<RangerTag> tags = 
lookupCache.serviceResourceToTags.get(serviceResource.getId());
+                               if (CollectionUtils.isNotEmpty(tags)) {
+                                       List<Long> tagIds = new ArrayList<>();
+                                       ret.put(serviceResource.getId(), 
tagIds);
+                                       for (RangerTag tag : tags) {
+                                               tagIds.add(tag.getId());
+                                       }
+                               }
+                       }
+               }
+               return ret;
        }
 
        private boolean initializeTagCache(XXService xService) {
@@ -131,69 +159,23 @@ public class RangerTagDBRetriever {
                try {
                        TagRetrieverServiceResourceContext  
serviceResourceContext  = new TagRetrieverServiceResourceContext(xService);
                        TagRetrieverTagDefContext           tagDefContext       
    = new TagRetrieverTagDefContext(xService);
-                       TagRetrieverTagContext              tagContext          
    = new TagRetrieverTagContext(xService);
 
                        serviceResources    = 
serviceResourceContext.getAllServiceResources();
                        tagDefs             = tagDefContext.getAllTagDefs();
-                       tags                = tagContext.getAllTags();
-
-                       tagResourceMaps     = getAllTagResourceMaps();
 
                        ret = true;
                } catch (Exception ex) {
-                       LOG.error("Failed to get tags for service:[" + 
xService.getName() + "]");
+                       LOG.error("Failed to get tags for service:[" + 
xService.getName() + "]", ex);
                        serviceResources    = null;
                        tagDefs             = null;
-                       tags                = null;
-                       tagResourceMaps     = null;
                        ret = false;
                }
                return ret;
        }
-       private List<RangerTagResourceMap> getAllTagResourceMaps() {
-
-               List<XXTagResourceMap> xTagResourceMaps = 
filterForServicePlugin ? 
daoMgr.getXXTagResourceMap().findForServicePlugin(xService.getId()) : 
daoMgr.getXXTagResourceMap().findByServiceId(xService.getId());
-
-               ListIterator<XXTagResourceMap> iterTagResourceMap = 
xTagResourceMaps.listIterator();
-
-               List<RangerTagResourceMap> ret = new 
ArrayList<RangerTagResourceMap>();
-
-               while (iterTagResourceMap.hasNext()) {
-
-                       XXTagResourceMap xTagResourceMap = 
iterTagResourceMap.next();
-
-                       if (xTagResourceMap != null) {
-
-                               RangerTagResourceMap tagResourceMap = new 
RangerTagResourceMap();
-
-                               tagResourceMap.setId(xTagResourceMap.getId());
-                               
tagResourceMap.setGuid(xTagResourceMap.getGuid());
-                               
tagResourceMap.setCreatedBy(lookupCache.getUserScreenName(xTagResourceMap.getAddedByUserId()));
-                               
tagResourceMap.setUpdatedBy(lookupCache.getUserScreenName(xTagResourceMap.getUpdatedByUserId()));
-                               
tagResourceMap.setCreateTime(xTagResourceMap.getCreateTime());
-                               
tagResourceMap.setUpdateTime(xTagResourceMap.getUpdateTime());
-                               
tagResourceMap.setResourceId(xTagResourceMap.getResourceId());
-                               
tagResourceMap.setTagId(xTagResourceMap.getTagId());
-
-                               ret.add(tagResourceMap);
-                       }
-               }
-               return ret;
-       }
-
-       static <T> List<T> asList(T obj) {
-               List<T> ret = new ArrayList<T>();
-
-               if (obj != null) {
-                       ret.add(obj);
-               }
-
-               return ret;
-       }
 
        private class LookupCache {
-               final Map<Long, String> userScreenNames = new HashMap<Long, 
String>();
-               final Map<Long, String> resourceDefs = new HashMap<Long, 
String>();
+               final Map<Long, String> userScreenNames = new HashMap<>();
+               final Map<Long, List<RangerTag>> serviceResourceToTags = new 
HashMap<>();
 
                String getUserScreenName(Long userId) {
                        String ret = null;
@@ -229,25 +211,6 @@ public class RangerTagDBRetriever {
                        return ret;
                }
 
-               String getResourceName(Long resourceDefId) {
-                       String ret = null;
-
-                       if (resourceDefId != null) {
-                               ret = resourceDefs.get(resourceDefId);
-
-                               if (ret == null) {
-                                       XXResourceDef xResourceDef = 
daoMgr.getXXResourceDef().getById(resourceDefId);
-
-                                       if (xResourceDef != null) {
-                                               ret = xResourceDef.getName();
-
-                                               resourceDefs.put(resourceDefId, 
ret);
-                                       }
-                               }
-                       }
-
-                       return ret;
-               }
        }
 
        private class TagLoaderThread extends Thread {
@@ -287,39 +250,19 @@ public class RangerTagDBRetriever {
 
                final XXService service;
                final ListIterator<XXServiceResource> iterServiceResource;
-               final ListIterator<XXServiceResourceElement> 
iterServiceResourceElement;
-               final ListIterator<XXServiceResourceElementValue> 
iterServiceResourceElementValue;
 
                TagRetrieverServiceResourceContext(XXService xService) {
                        Long serviceId = xService == null ? null : 
xService.getId();
-
-                       List<XXServiceResource> xServiceResources = 
filterForServicePlugin ? 
daoMgr.getXXServiceResource().findForServicePlugin(serviceId) : 
daoMgr.getXXServiceResource().findTaggedResourcesInServiceId(serviceId);
-                       List<XXServiceResourceElement> xServiceResourceElements 
= filterForServicePlugin ? 
daoMgr.getXXServiceResourceElement().findForServicePlugin(serviceId) : 
daoMgr.getXXServiceResourceElement().findTaggedResourcesInServiceId(serviceId);
-                       List<XXServiceResourceElementValue> 
xServiceResourceElementValues = filterForServicePlugin ? 
daoMgr.getXXServiceResourceElementValue().findForServicePlugin(serviceId) : 
daoMgr.getXXServiceResourceElementValue().findTaggedResourcesInServiceId(serviceId);
-
                        this.service = xService;
-                       this.iterServiceResource = 
xServiceResources.listIterator();
-                       this.iterServiceResourceElement = 
xServiceResourceElements.listIterator();
-                       this.iterServiceResourceElementValue = 
xServiceResourceElementValues.listIterator();
-
-               }
 
-               TagRetrieverServiceResourceContext(XXServiceResource 
xServiceResource, XXService xService) {
-                       Long resourceId = xServiceResource == null ? null : 
xServiceResource.getId();
+                       List<XXServiceResource> xServiceResources = 
daoMgr.getXXServiceResource().findTaggedResourcesInServiceId(serviceId);
 
-                       List<XXServiceResource> xServiceResources = 
asList(xServiceResource);
-                       List<XXServiceResourceElement> xServiceResourceElements 
= daoMgr.getXXServiceResourceElement().findByResourceId(resourceId);
-                       List<XXServiceResourceElementValue> 
xServiceResourceElementValues = 
daoMgr.getXXServiceResourceElementValue().findByResourceId(resourceId);
-
-                       this.service = xService;
                        this.iterServiceResource = 
xServiceResources.listIterator();
-                       this.iterServiceResourceElement = 
xServiceResourceElements.listIterator();
-                       this.iterServiceResourceElementValue = 
xServiceResourceElementValues.listIterator();
 
                }
 
                List<RangerServiceResource> getAllServiceResources() {
-                       List<RangerServiceResource> ret = new 
ArrayList<RangerServiceResource>();
+                       List<RangerServiceResource> ret = new ArrayList<>();
 
                        while (iterServiceResource.hasNext()) {
                                RangerServiceResource serviceResource = 
getNextServiceResource();
@@ -329,12 +272,6 @@ public class RangerTagDBRetriever {
                                }
                        }
 
-                       if (!hasProcessedAll()) {
-                               LOG.warn("getAllServiceResources(): perhaps one 
or more serviceResources got updated during retrieval. Using fallback ... ");
-
-                               ret = getServiceResourcesBySecondary();
-                       }
-
                        return ret;
                }
 
@@ -344,7 +281,7 @@ public class RangerTagDBRetriever {
                        if (iterServiceResource.hasNext()) {
                                XXServiceResource xServiceResource = 
iterServiceResource.next();
 
-                               if (xServiceResource != null) {
+                               if (xServiceResource != null && 
StringUtils.isNotEmpty(xServiceResource.getTags())) {
                                        ret = new RangerServiceResource();
 
                                        ret.setId(xServiceResource.getId());
@@ -357,108 +294,35 @@ public class RangerTagDBRetriever {
                                        
ret.setVersion(xServiceResource.getVersion());
                                        
ret.setResourceSignature(xServiceResource.getResourceSignature());
 
-                                       getServiceResourceElements(ret);
-                               }
-                       }
-
-                       return ret;
-               }
-
-               void getServiceResourceElements(RangerServiceResource 
serviceResource) {
-                       while (iterServiceResourceElement.hasNext()) {
-                               XXServiceResourceElement 
xServiceResourceElement = iterServiceResourceElement.next();
-
-                               if 
(xServiceResourceElement.getResourceId().equals(serviceResource.getId())) {
-                                       RangerPolicyResource resource = new 
RangerPolicyResource();
-
-                                       
resource.setIsExcludes(xServiceResourceElement.getIsExcludes());
-                                       
resource.setIsRecursive(xServiceResourceElement.getIsRecursive());
-
-                                       while 
(iterServiceResourceElementValue.hasNext()) {
-                                               XXServiceResourceElementValue 
xServiceResourceElementValue = iterServiceResourceElementValue.next();
+                                       Map<String, 
RangerPolicy.RangerPolicyResource> serviceResourceElements = 
gsonBuilder.fromJson(xServiceResource.getServiceResourceElements(), 
RangerServiceResourceService.subsumedDataType);
+                                       
ret.setResourceElements(serviceResourceElements);
 
-                                               if 
(xServiceResourceElementValue.getResElementId().equals(xServiceResourceElement.getId()))
 {
-                                                       
resource.getValues().add(xServiceResourceElementValue.getValue());
-                                               } else {
-                                                       if 
(iterServiceResourceElementValue.hasPrevious()) {
-                                                               
iterServiceResourceElementValue.previous();
-                                                       }
-                                                       break;
-                                               }
-                                       }
-
-                                       
serviceResource.getResourceElements().put(lookupCache.getResourceName(xServiceResourceElement.getResDefId()),
 resource);
-                               } else if 
(xServiceResourceElement.getResourceId().compareTo(serviceResource.getId()) > 
0) {
-                                       if 
(iterServiceResourceElement.hasPrevious()) {
-                                               
iterServiceResourceElement.previous();
-                                       }
-                                       break;
+                                       List<RangerTag> tags = 
gsonBuilder.fromJson(xServiceResource.getTags(), 
RangerServiceResourceService.duplicatedDataType);
+                                       
lookupCache.serviceResourceToTags.put(xServiceResource.getId(), tags);
                                }
                        }
-               }
 
-               boolean hasProcessedAll() {
-                       boolean moreToProcess = iterServiceResource.hasNext()
-                                       || iterServiceResourceElement.hasNext()
-                                       || 
iterServiceResourceElementValue.hasNext();
-                       return !moreToProcess;
-               }
-
-               List<RangerServiceResource> getServiceResourcesBySecondary() {
-                       List<RangerServiceResource> ret = null;
-
-                       if (service != null) {
-                               List<XXServiceResource> xServiceResources = 
filterForServicePlugin ? 
daoMgr.getXXServiceResource().findForServicePlugin(service.getId()) : 
daoMgr.getXXServiceResource().findTaggedResourcesInServiceId(service.getId());
-
-                               if 
(CollectionUtils.isNotEmpty(xServiceResources)) {
-                                       ret = new 
ArrayList<RangerServiceResource>(xServiceResources.size());
-
-                                       for (XXServiceResource xServiceResource 
: xServiceResources) {
-                                               
TagRetrieverServiceResourceContext ctx = new 
TagRetrieverServiceResourceContext(xServiceResource, service);
-
-                                               RangerServiceResource 
serviceResource = ctx.getNextServiceResource();
-
-                                               if (serviceResource != null) {
-                                                       
ret.add(serviceResource);
-                                               }
-                                       }
-                               }
-                       }
                        return ret;
                }
+
        }
 
        private class TagRetrieverTagDefContext {
 
                final XXService service;
                final ListIterator<XXTagDef> iterTagDef;
-               final ListIterator<XXTagAttributeDef> iterTagAttributeDef;
-
 
                TagRetrieverTagDefContext(XXService xService) {
                        Long serviceId = xService == null ? null : 
xService.getId();
 
-                       List<XXTagDef> xTagDefs = filterForServicePlugin ? 
daoMgr.getXXTagDef().findForServicePlugin(serviceId) : 
daoMgr.getXXTagDef().findByServiceId(serviceId);
-                       List<XXTagAttributeDef> xTagAttributeDefs = 
filterForServicePlugin ? 
daoMgr.getXXTagAttributeDef().findForServicePlugin(serviceId) : 
daoMgr.getXXTagAttributeDef().findByServiceId(serviceId);
-
-                       this.service = xService;
-                       this.iterTagDef = xTagDefs.listIterator();
-                       this.iterTagAttributeDef = 
xTagAttributeDefs.listIterator();
-               }
-
-               TagRetrieverTagDefContext(XXTagDef xTagDef, XXService xService) 
{
-                       Long tagDefId = xTagDef == null ? null : 
xTagDef.getId();
-
-                       List<XXTagDef> xTagDefs = asList(xTagDef);
-                       List<XXTagAttributeDef> xTagAttributeDefs = 
daoMgr.getXXTagAttributeDef().findByTagDefId(tagDefId);
+                       List<XXTagDef> xTagDefs = 
daoMgr.getXXTagDef().findByServiceId(serviceId);
 
                        this.service = xService;
                        this.iterTagDef = xTagDefs.listIterator();
-                       this.iterTagAttributeDef = 
xTagAttributeDefs.listIterator();
                }
 
                Map<Long, RangerTagDef> getAllTagDefs() {
-                       Map<Long, RangerTagDef> ret = new HashMap<Long, 
RangerTagDef>();
+                       Map<Long, RangerTagDef> ret = new HashMap<>();
 
                        while (iterTagDef.hasNext()) {
                                RangerTagDef tagDef = getNextTagDef();
@@ -468,13 +332,6 @@ public class RangerTagDBRetriever {
                                }
                        }
 
-                       if (!hasProcessedAllTagDefs()) {
-                               LOG.warn("getAllTagDefs(): perhaps one or more 
tag-definitions got updated during retrieval.  Using fallback ... ");
-
-                               ret = getTagDefsBySecondary();
-
-                       }
-
                        return ret;
                }
 
@@ -497,192 +354,15 @@ public class RangerTagDBRetriever {
                                        ret.setVersion(xTagDef.getVersion());
                                        ret.setName(xTagDef.getName());
                                        ret.setSource(xTagDef.getSource());
-
-                                       getTagAttributeDefs(ret);
+                                       
List<RangerTagDef.RangerTagAttributeDef> attributeDefs = 
gsonBuilder.fromJson(xTagDef.getTagAttrDefs(), 
RangerTagDBRetriever.subsumedDataType);
+                                       ret.setAttributeDefs(attributeDefs);
                                }
                        }
 
                        return ret;
                }
 
-               void getTagAttributeDefs(RangerTagDef tagDef) {
-                       while (iterTagAttributeDef.hasNext()) {
-                               XXTagAttributeDef xTagAttributeDef = 
iterTagAttributeDef.next();
-
-                               if 
(xTagAttributeDef.getTagDefId().equals(tagDef.getId())) {
-                                       RangerTagDef.RangerTagAttributeDef 
tagAttributeDef = new RangerTagDef.RangerTagAttributeDef();
-
-                                       
tagAttributeDef.setName(xTagAttributeDef.getName());
-                                       
tagAttributeDef.setType(xTagAttributeDef.getType());
-
-                                       
tagDef.getAttributeDefs().add(tagAttributeDef);
-                               } else if 
(xTagAttributeDef.getTagDefId().compareTo(tagDef.getId()) > 0) {
-                                       if (iterTagAttributeDef.hasPrevious()) {
-                                               iterTagAttributeDef.previous();
-                                       }
-                                       break;
-                               }
-                       }
-               }
-
-               boolean hasProcessedAllTagDefs() {
-                       boolean moreToProcess = iterTagAttributeDef.hasNext();
-                       return !moreToProcess;
-               }
-
-               Map<Long, RangerTagDef> getTagDefsBySecondary() {
-                       Map<Long, RangerTagDef> ret = null;
-
-                       if (service != null) {
-                               List<XXTagDef> xTagDefs = 
daoMgr.getXXTagDef().findByServiceId(service.getId());
-
-                               if (CollectionUtils.isNotEmpty(xTagDefs)) {
-                                       ret = new HashMap<Long, 
RangerTagDef>(xTagDefs.size());
-
-                                       for (XXTagDef xTagDef : xTagDefs) {
-                                               TagRetrieverTagDefContext ctx = 
new TagRetrieverTagDefContext(xTagDef, service);
-
-                                               RangerTagDef tagDef = 
ctx.getNextTagDef();
-
-                                               if (tagDef != null) {
-                                                       ret.put(tagDef.getId(), 
tagDef);
-                                               }
-                                       }
-                               }
-                       }
-                       return ret;
-               }
        }
 
-       private class TagRetrieverTagContext {
-
-               final XXService service;
-               final ListIterator<XXTag> iterTag;
-               final ListIterator<XXTagAttribute> iterTagAttribute;
-
-               TagRetrieverTagContext(XXService xService) {
-                       Long serviceId = xService == null ? null : 
xService.getId();
-
-                       List<XXTag> xTags = filterForServicePlugin ? 
daoMgr.getXXTag().findForServicePlugin(serviceId) : 
daoMgr.getXXTag().findByServiceId(serviceId);
-                       List<XXTagAttribute> xTagAttributes = 
filterForServicePlugin ? 
daoMgr.getXXTagAttribute().findForServicePlugin(serviceId) : 
daoMgr.getXXTagAttribute().findByServiceId(serviceId);
-
-                       this.service = xService;
-                       this.iterTag = xTags.listIterator();
-                       this.iterTagAttribute = xTagAttributes.listIterator();
-
-               }
-
-               TagRetrieverTagContext(XXTag xTag, XXService xService) {
-                       Long tagId = xTag == null ? null : xTag.getId();
-
-                       List<XXTag> xTags = asList(xTag);
-                       List<XXTagAttribute> xTagAttributes = 
daoMgr.getXXTagAttribute().findByTagId(tagId);
-
-                       this.service = xService;
-                       this.iterTag = xTags.listIterator();
-                       this.iterTagAttribute = xTagAttributes.listIterator();
-               }
-
-
-               Map<Long, RangerTag> getAllTags() {
-                       Map<Long, RangerTag> ret = new HashMap<Long, 
RangerTag>();
-
-                       while (iterTag.hasNext()) {
-                               RangerTag tag = getNextTag();
-
-                               if (tag != null) {
-                                       ret.put(tag.getId(), tag);
-                               }
-                       }
-
-                       if (!hasProcessedAllTags()) {
-                               LOG.warn("getAllTags(): perhaps one or more 
tags got updated during retrieval. Using fallback ... ");
-
-                               ret = getTagsBySecondary();
-                       }
-
-                       return ret;
-               }
-
-               RangerTag getNextTag() {
-                       RangerTag ret = null;
-
-                       if (iterTag.hasNext()) {
-                               XXTag xTag = iterTag.next();
-
-                               if (xTag != null) {
-                                       ret = new RangerTag();
-
-                                       ret.setId(xTag.getId());
-                                       ret.setGuid(xTag.getGuid());
-                                       ret.setOwner(xTag.getOwner());
-                                       
ret.setCreatedBy(lookupCache.getUserScreenName(xTag.getAddedByUserId()));
-                                       
ret.setUpdatedBy(lookupCache.getUserScreenName(xTag.getUpdatedByUserId()));
-                                       ret.setCreateTime(xTag.getCreateTime());
-                                       ret.setUpdateTime(xTag.getUpdateTime());
-                                       ret.setVersion(xTag.getVersion());
-
-                                       Map<Long, RangerTagDef> tagDefs = 
getTagDefs();
-                                       if (tagDefs != null) {
-                                               RangerTagDef tagDef = 
tagDefs.get(xTag.getType());
-                                               if (tagDef != null) {
-                                                       
ret.setType(tagDef.getName());
-                                               }
-                                       }
-
-                                       getTagAttributes(ret);
-                               }
-                       }
-
-                       return ret;
-               }
-
-               void getTagAttributes(RangerTag tag) {
-                       while (iterTagAttribute.hasNext()) {
-                               XXTagAttribute xTagAttribute = 
iterTagAttribute.next();
-
-                               if 
(xTagAttribute.getTagId().equals(tag.getId())) {
-                                       String attributeName = 
xTagAttribute.getName();
-                                       String attributeValue = 
xTagAttribute.getValue();
-
-
-                                       tag.getAttributes().put(attributeName, 
attributeValue);
-                               } else if 
(xTagAttribute.getTagId().compareTo(tag.getId()) > 0) {
-                                       if (iterTagAttribute.hasPrevious()) {
-                                               iterTagAttribute.previous();
-                                       }
-                                       break;
-                               }
-                       }
-               }
-
-               boolean hasProcessedAllTags() {
-                       boolean moreToProcess = iterTagAttribute.hasNext();
-                       return !moreToProcess;
-               }
-
-               Map<Long, RangerTag> getTagsBySecondary() {
-                       Map<Long, RangerTag> ret = null;
-
-                       if (service != null) {
-                               List<XXTag> xTags = 
daoMgr.getXXTag().findByServiceId(service.getId());
-
-                               if (CollectionUtils.isNotEmpty(xTags)) {
-                                       ret = new HashMap<Long, 
RangerTag>(xTags.size());
-
-                                       for (XXTag xTag : xTags) {
-                                               TagRetrieverTagContext ctx = 
new TagRetrieverTagContext(xTag, service);
-
-                                               RangerTag tag = 
ctx.getNextTag();
-
-                                               if (tag != null) {
-                                                       ret.put(tag.getId(), 
tag);
-                                               }
-                                       }
-                               }
-                       }
-                       return ret;
-               }
-       }
 }
 

Reply via email to