killbill-aplcache

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
index 840f483..5ad1b4c 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
@@ -58,6 +58,8 @@ import com.ning.billing.util.callcontext.TenantContext;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
+import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.TagDefinition;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
@@ -234,11 +236,21 @@ public class DefaultAnalyticsUserApi implements AnalyticsUserApi {
 
     private void updateTags(final Account account, final InternalCallContext internalCallContext) {
         // Find the current state of tags from util
-        final Collection<String> utilTags = Collections2.transform(tagInternalApi.getTags(account.getId(), ObjectType.ACCOUNT, internalCallContext).keySet(),
-                                                                   new Function<String, String>() {
+        final List<TagDefinition> tagDefinitions = tagInternalApi.getTagDefinitions(internalCallContext);
+        final Collection<String> utilTags = Collections2.transform(tagInternalApi.getTags(account.getId(), ObjectType.ACCOUNT, internalCallContext).values(),
+                                                                   new Function<Tag, String>() {
                                                                        @Override
-                                                                       public String apply(@Nullable final String input) {
-                                                                           return input;
+                                                                       public String apply(@Nullable final Tag input) {
+                                                                           if (input == null) {
+                                                                               return "";
+                                                                           }
+
+                                                                           for (final TagDefinition tagDefinition : tagDefinitions) {
+                                                                               if (tagDefinition.getId().equals(input.getTagDefinitionId())) {
+                                                                                   return tagDefinition.getName();
+                                                                               }
+                                                                           }
+                                                                           return "";
                                                                        }
                                                                    });
 
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
index 78e2d55..8be18d4 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
@@ -137,6 +137,21 @@ public class TestAnalytics extends TestIntegrationBase {
     }
 
     @Test(groups = "slow")
+    public void testVerifyRefresh() throws Exception {
+        // Create a tag
+        final TagDefinition tagDefinition = tagUserApi.create(UUID.randomUUID().toString().substring(0, 10), UUID.randomUUID().toString(), callContext);
+        tagUserApi.addTag(account.getId(), ObjectType.ACCOUNT, tagDefinition.getId(), callContext);
+
+        // Refresh
+        analyticsUserApi.rebuildAnalyticsForAccount(account, callContext);
+
+        // Check the tag
+        final List<BusinessAccountTag> tagsForAccount = analyticsUserApi.getTagsForAccount(account.getExternalKey(), callContext);
+        Assert.assertEquals(tagsForAccount.size(), 1);
+        Assert.assertEquals(tagsForAccount.get(0).getName(), tagDefinition.getName());
+    }
+
+    @Test(groups = "slow")
     public void testCreateAndCancelSubscription() throws Exception {
 
         // Create a bundle
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
index 5a8eae8..cf7b190 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
@@ -15,6 +15,7 @@
  */
 package com.ning.billing.util.svcapi.tag;
 
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -25,15 +26,25 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.TagDefinition;
 import com.ning.billing.util.tag.dao.TagDao;
+import com.ning.billing.util.tag.dao.TagDefinitionDao;
 
 public class DefaultTagInternalApi implements TagInternalApi {
 
     private final TagDao tagDao;
+    private final TagDefinitionDao tagDefinitionDao;
 
     @Inject
-    public DefaultTagInternalApi(final TagDao tagDao) {
+    public DefaultTagInternalApi(final TagDao tagDao,
+                                 final TagDefinitionDao tagDefinitionDao) {
         this.tagDao = tagDao;
+        this.tagDefinitionDao = tagDefinitionDao;
+    }
+
+    @Override
+    public List<TagDefinition> getTagDefinitions(final InternalTenantContext context) {
+        return tagDefinitionDao.getTagDefinitions(context);
     }
 
     @Override
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
index 83160df..6f1b670 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
@@ -13,8 +13,10 @@
  * License for the specific language governing permissions and limitations
  * under the License.
  */
+
 package com.ning.billing.util.svcapi.tag;
 
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -23,9 +25,20 @@ import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.TagDefinition;
 
 public interface TagInternalApi {
 
+    public List<TagDefinition> getTagDefinitions(InternalTenantContext context);
+
+    /**
+     * Return tags for a given object
+     *
+     * @param objectId   the object id
+     * @param objectType the object type
+     * @param context    call context
+     * @return mapping tag id -> tag
+     */
     public Map<String, Tag> getTags(UUID objectId, ObjectType objectType, InternalTenantContext context);
 
     public void addTag(UUID objectId, ObjectType objectType, UUID tagDefinitionId, InternalCallContext context) throws TagApiException;