killbill-uncached

Allow to retrun in priority active bundle when there are multiple

9/10/2013 10:42:46 PM

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java
index 34740e1..5bcc4c4 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java
@@ -17,12 +17,10 @@
 package com.ning.billing.entitlement.api;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
 
-import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import org.joda.time.DateTimeZone;
@@ -43,12 +41,10 @@ import com.ning.billing.util.svcapi.subscription.SubscriptionBaseInternalApi;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
 
-public class DefaultSubscriptionApi implements SubscriptionApi  {
+public class DefaultSubscriptionApi implements SubscriptionApi {
 
     private final SubscriptionBaseInternalApi subscriptionInternalApi;
     private final EntitlementApi entitlementApi;
@@ -66,7 +62,8 @@ public class DefaultSubscriptionApi implements SubscriptionApi  {
         this.accountApi = accountApi;
         this.checker = checker;
         this.blockingStateDao = blockingStateDao;
-        this.dateHelper = new EntitlementDateHelper(accountApi, clock);;
+        this.dateHelper = new EntitlementDateHelper(accountApi, clock);
+        ;
         this.clock = clock;
         this.internalCallContextFactory = internalCallContextFactory;
     }
@@ -102,11 +99,20 @@ public class DefaultSubscriptionApi implements SubscriptionApi  {
     }
 
 
-
     @Override
     public SubscriptionBundle getSubscriptionBundleForAccountIdAndExternalKey(final UUID accountId, final String externalKey, final TenantContext context) throws SubscriptionApiException {
 
         try {
+            // If active bundle exists on this account, this is what we are looking for.
+            try {
+                final SubscriptionBundle activeBundleForkey = getActiveSubscriptionBundleForExternalKey(externalKey, context);
+                if (activeBundleForkey.getAccountId().equals(accountId)) {
+                    return activeBundleForkey;
+                }
+            } catch (SubscriptionApiException ignore) {
+            }
+
+            // If not return first cancelled bundle if this is exists
             final List<Entitlement> entitlements = entitlementApi.getAllEntitlementsForAccountIdAndExternalKey(accountId, externalKey, context);
             if (entitlements.isEmpty()) {
                 throw new SubscriptionApiException(ErrorCode.SUB_GET_INVALID_BUNDLE_KEY, externalKey);
@@ -122,7 +128,8 @@ public class DefaultSubscriptionApi implements SubscriptionApi  {
     }
 
     @Override
-    public SubscriptionBundle getActiveSubscriptionBundleForExternalKey(final String externalKey, final TenantContext context) throws SubscriptionApiException {
+    public SubscriptionBundle getActiveSubscriptionBundleForExternalKey(final String externalKey,
+                                                                        final TenantContext context) throws SubscriptionApiException {
 
         final InternalTenantContext internalContext = internalCallContextFactory.createInternalTenantContext(context);
         try {
@@ -140,7 +147,8 @@ public class DefaultSubscriptionApi implements SubscriptionApi  {
     }
 
     @Override
-    public List<SubscriptionBundle> getSubscriptionBundlesForAccountId(final UUID accountId, final TenantContext context) throws SubscriptionApiException {
+    public List<SubscriptionBundle> getSubscriptionBundlesForAccountId(final UUID accountId,
+                                                                       final TenantContext context) throws SubscriptionApiException {
         try {
 
             final List<Entitlement> entitlements = entitlementApi.getAllEntitlementsForAccountId(accountId, context);
@@ -153,7 +161,7 @@ public class DefaultSubscriptionApi implements SubscriptionApi  {
                 perBundleEntitlements.put(cur.getBundleId(), cur);
             }
 
-            final List<SubscriptionBundle> result  = new ArrayList<SubscriptionBundle>(perBundleEntitlements.keySet().size());
+            final List<SubscriptionBundle> result = new ArrayList<SubscriptionBundle>(perBundleEntitlements.keySet().size());
             for (UUID bundleId : perBundleEntitlements.keySet()) {
                 final List<Entitlement> e = perBundleEntitlements.get(bundleId);
                 final SubscriptionBundle b = getSubscriptionBundleFromEntitlements(bundleId, e, context);