killbill-aplcache

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java b/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
index b487ba5..2a78f6c 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
@@ -29,28 +29,30 @@ import com.ning.billing.util.callcontext.CallContext;
 
 public interface EntitlementUserApi {
 
-    public SubscriptionBundle getBundleFromId(UUID id) throws EntitlementUserApiException;
+    public SubscriptionBundle getBundleFromId(final UUID id) throws EntitlementUserApiException;
 
-    public Subscription getSubscriptionFromId(UUID id) throws EntitlementUserApiException;
+    public Subscription getSubscriptionFromId(final UUID id) throws EntitlementUserApiException;
 
-    public SubscriptionBundle getBundleForAccountAndKey(UUID accountId, String bundleKey) throws EntitlementUserApiException;
+    public List<SubscriptionBundle> getBundlesForKey(final String bundleKey) throws EntitlementUserApiException;
 
-    public List<SubscriptionBundle> getBundlesForAccount(UUID accountId);
+    public SubscriptionBundle getBundleForAccountAndKey(final UUID accountId, final String bundleKey) throws EntitlementUserApiException;
 
-    public List<Subscription> getSubscriptionsForBundle(UUID bundleId);
+    public List<SubscriptionBundle> getBundlesForAccount(final UUID accountId);
 
-    public List<Subscription> getSubscriptionsForAccountAndKey(UUID accountId, String bundleKey);
+    public List<Subscription> getSubscriptionsForBundle(final UUID bundleId);
 
-    public Subscription getBaseSubscription(UUID bundleId) throws EntitlementUserApiException;
+    public List<Subscription> getSubscriptionsForAccountAndKey(final UUID accountId, final String bundleKey);
 
-    public SubscriptionBundle createBundleForAccount(UUID accountId, String bundleKey, CallContext context)
+    public Subscription getBaseSubscription(final UUID bundleId) throws EntitlementUserApiException;
+
+    public SubscriptionBundle createBundleForAccount(final UUID accountId, final String bundleKey, final CallContext context)
             throws EntitlementUserApiException;
 
-    public Subscription createSubscription(UUID bundleId, PlanPhaseSpecifier spec, DateTime requestedDate, CallContext context)
+    public Subscription createSubscription(final UUID bundleId, final PlanPhaseSpecifier spec, final DateTime requestedDate, final CallContext context)
             throws EntitlementUserApiException;
 
-    public List<SubscriptionStatusDryRun> getDryRunChangePlanStatus(UUID subscriptionId, @Nullable String productName, DateTime requestedDate)
+    public List<SubscriptionStatusDryRun> getDryRunChangePlanStatus(final UUID subscriptionId, @Nullable final String productName, final DateTime requestedDate)
             throws EntitlementUserApiException;
 
-    public DateTime getNextBillingDate(UUID account);
+    public DateTime getNextBillingDate(final UUID account);
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
index 1e61a99..4eaadff 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
@@ -34,6 +34,17 @@ import com.ning.billing.util.entity.Entity;
 
 public interface Subscription extends Entity, Blockable {
 
+    public enum SubscriptionState {
+        ACTIVE,
+        CANCELLED
+    }
+
+    public enum SubscriptionSourceType {
+        NATIVE,
+        MIGRATED,
+        TRANSFERED
+    }
+
     public boolean cancel(DateTime requestedDate, boolean eot, CallContext context)
             throws EntitlementUserApiException;
 
@@ -50,15 +61,12 @@ public interface Subscription extends Entity, Blockable {
     public boolean recreate(PlanPhaseSpecifier spec, DateTime requestedDate, CallContext context)
             throws EntitlementUserApiException;
 
-    public enum SubscriptionState {
-        ACTIVE,
-        CANCELLED
-    }
-
     public UUID getBundleId();
 
     public SubscriptionState getState();
 
+    public SubscriptionSourceType getSourceType();
+
     public DateTime getStartDate();
 
     public DateTime getEndDate();
@@ -84,4 +92,5 @@ public interface Subscription extends Entity, Blockable {
     public List<EffectiveSubscriptionEvent> getBillingTransitions();
 
     public List<EffectiveSubscriptionEvent> getAllTransitions();
+
 }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
index c7e27f1..e8ea3f7 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
@@ -92,6 +92,12 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
     }
 
     @Override
+    public List<SubscriptionBundle> getBundlesForKey(final String bundleKey)
+    throws EntitlementUserApiException {
+        return dao.getSubscriptionBundlesForKey(bundleKey);
+    }
+
+    @Override
     public List<SubscriptionBundle> getBundlesForAccount(final UUID accountId) {
         return dao.getSubscriptionBundleForAccount(accountId);
     }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index c54c947..7c10fba 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -118,6 +118,23 @@ public class SubscriptionData extends EntityBase implements Subscription {
     }
 
     @Override
+    public SubscriptionSourceType getSourceType() {
+        if (transitions == null) {
+            return null;
+        }
+        final SubscriptionTransitionData initialTransition = transitions.get(0);
+        switch (initialTransition.getApiEventType()) {
+        case MIGRATE_BILLING:
+        case MIGRATE_ENTITLEMENT:
+            return SubscriptionSourceType.MIGRATED;
+        case TRANSFER:
+            return SubscriptionSourceType.TRANSFERED;
+        default:
+            return SubscriptionSourceType.NATIVE;
+        }
+    }
+
+    @Override
     public PlanPhase getCurrentPhase() {
         return (getPreviousTransitionData() == null) ? null
                 : getPreviousTransitionData().getNextPhase();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
index ff37c70..03ebd04 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
@@ -90,7 +90,6 @@ public class AuditedEntitlementDao implements EntitlementDao {
     private final NotificationQueueService notificationQueueService;
     private final AddonUtils addonUtils;
     private final Bus eventBus;
-    private final CatalogService catalogService;
 
     @Inject
     public AuditedEntitlementDao(final IDBI dbi, final Clock clock, final AddonUtils addonUtils,
@@ -102,7 +101,6 @@ public class AuditedEntitlementDao implements EntitlementDao {
         this.notificationQueueService = notificationQueueService;
         this.addonUtils = addonUtils;
         this.eventBus = eventBus;
-        this.catalogService = catalogService;
     }
 
     @Override
@@ -121,6 +119,12 @@ public class AuditedEntitlementDao implements EntitlementDao {
     }
 
     @Override
+    public List<SubscriptionBundle> getSubscriptionBundlesForKey(final String bundleKey) {
+        return bundlesDao.getBundlesForKey(bundleKey);
+    }
+
+
+    @Override
     public SubscriptionBundle createSubscriptionBundle(final SubscriptionBundleData bundle, final CallContext context) {
         return bundlesDao.inTransaction(new Transaction<SubscriptionBundle, BundleSqlDao>() {
             @Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
index 2fde696..c48a5f2 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
@@ -65,6 +65,9 @@ public interface BundleSqlDao extends Transactional<BundleSqlDao>, EntitySqlDao<
     @SqlQuery
     public List<SubscriptionBundle> getBundleFromAccount(@Bind("accountId") String accountId);
 
+    @SqlQuery
+    public List<SubscriptionBundle> getBundlesForKey(@Bind("externalKey") String externalKey);
+
     public static class SubscriptionBundleBinder extends BinderBase implements Binder<Bind, SubscriptionBundleData> {
         @Override
         public void bind(@SuppressWarnings("rawtypes") final SQLStatement stmt, final Bind bind, final SubscriptionBundleData bundle) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
index 491d66e..0544d1f 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
@@ -36,6 +36,8 @@ public interface EntitlementDao {
     // Bundle apis
     public List<SubscriptionBundle> getSubscriptionBundleForAccount(final UUID accountId);
 
+    public List<SubscriptionBundle> getSubscriptionBundlesForKey(final String bundleKey);
+
     public SubscriptionBundle getSubscriptionBundleFromAccountAndKey(final UUID accountId, final String bundleKey);
 
     public SubscriptionBundle getSubscriptionBundleFromId(final UUID bundleId);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java
index 8654445..ad82bd5 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/RepairEntitlementDao.java
@@ -304,4 +304,10 @@ public class RepairEntitlementDao implements EntitlementDao, RepairEntitlementLi
             List<TransferCancelData> transferCancelData, CallContext context) {
         throw new EntitlementError(NOT_IMPLEMENTED);
     }
+
+    @Override
+    public List<SubscriptionBundle> getSubscriptionBundlesForKey(
+            String bundleKey) {
+        throw new EntitlementError(NOT_IMPLEMENTED);
+    }
 }
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg
index 91c6276..e4d5a68 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg
@@ -28,6 +28,14 @@ getBundleFromId() ::= <<
     ;
 >>
 
+getBundlesForKey() ::= <<
+    select <fields()>
+    from bundles
+    where
+      external_key = :externalKey
+    ;
+>>
+
 getBundleFromAccountAndKey() ::= <<
     select <fields()>
     from bundles
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
index 7ee174f..8463775 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
@@ -101,6 +101,18 @@ public class MockEntitlementDaoMemory implements EntitlementDao {
     }
 
     @Override
+    public List<SubscriptionBundle> getSubscriptionBundlesForKey(final String bundleKey) {
+        final List<SubscriptionBundle> results = new ArrayList<SubscriptionBundle>();
+        for (final SubscriptionBundle cur : bundles) {
+            if (cur.getKey().equals(bundleKey)) {
+                results.add(cur);
+            }
+        }
+        return results;
+    }
+
+
+    @Override
     public SubscriptionBundle getSubscriptionBundleFromId(final UUID bundleId) {
         for (final SubscriptionBundle cur : bundles) {
             if (cur.getId().equals(bundleId)) {
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingEntitlementUserApi.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingEntitlementUserApi.java
index ea12cba..d89c64d 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingEntitlementUserApi.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingEntitlementUserApi.java
@@ -80,6 +80,18 @@ public class BlockingEntitlementUserApi implements EntitlementUserApi {
     }
 
     @Override
+    public List<SubscriptionBundle> getBundlesForKey(String bundleKey)
+            throws EntitlementUserApiException {
+        final List<SubscriptionBundle> result = new ArrayList<SubscriptionBundle>();
+        final List<SubscriptionBundle> bundles = entitlementUserApi.getBundlesForKey(bundleKey);
+        for (final SubscriptionBundle bundle : bundles) {
+            result.add(new BlockingSubscriptionBundle(bundle, blockingApi));
+        }
+        return result;
+    }
+
+
+    @Override
     public List<Subscription> getSubscriptionsForBundle(final UUID bundleId) {
         final List<Subscription> result = new ArrayList<Subscription>();
         final List<Subscription> subscriptions = entitlementUserApi.getSubscriptionsForBundle(bundleId);
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
index 3a7f932..41a9015 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
@@ -67,7 +67,7 @@ public class BlockingSubscription implements Subscription {
 
     @Override
     public boolean changePlan(final String productName, final BillingPeriod term, final String priceList, final DateTime requestedDate,
-                              final CallContext context) throws EntitlementUserApiException {
+            final CallContext context) throws EntitlementUserApiException {
         try {
             checker.checkBlockedChange(this);
         } catch (BlockingApiException e) {
@@ -78,7 +78,7 @@ public class BlockingSubscription implements Subscription {
 
     @Override
     public boolean changePlanWithPolicy(final String productName, final BillingPeriod term, final String priceList,
-                                        final DateTime requestedDate, final ActionPolicy policy, final CallContext context) throws EntitlementUserApiException {
+            final DateTime requestedDate, final ActionPolicy policy, final CallContext context) throws EntitlementUserApiException {
         try {
             checker.checkBlockedChange(this);
         } catch (BlockingApiException e) {
@@ -89,7 +89,7 @@ public class BlockingSubscription implements Subscription {
 
     @Override
     public boolean recreate(final PlanPhaseSpecifier spec, final DateTime requestedDate, final CallContext context)
-            throws EntitlementUserApiException {
+    throws EntitlementUserApiException {
         return subscription.recreate(spec, requestedDate, context);
     }
 
@@ -104,6 +104,11 @@ public class BlockingSubscription implements Subscription {
     }
 
     @Override
+    public SubscriptionSourceType getSourceType() {
+        return subscription.getSourceType();
+    }
+
+    @Override
     public DateTime getStartDate() {
         return subscription.getStartDate();
     }
@@ -179,5 +184,4 @@ public class BlockingSubscription implements Subscription {
     public Subscription getDelegateSubscription() {
         return subscription;
     }
-
 }
diff --git a/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java b/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java
index fff8feb..09a1820 100644
--- a/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java
+++ b/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java
@@ -89,6 +89,12 @@ public class MockEntitlementUserApi implements EntitlementUserApi {
     }
 
     @Override
+    public List<SubscriptionBundle> getBundlesForKey(String bundleKey)
+            throws EntitlementUserApiException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public List<Subscription> getSubscriptionsForBundle(final UUID bundleId) {
         throw new UnsupportedOperationException();
     }
diff --git a/util/src/test/java/com/ning/billing/mock/MockSubscription.java b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
index 013c9e0..57775aa 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -179,7 +179,11 @@ public class MockSubscription implements Subscription {
 
     @Override
     public DateTime getFutureEndDate() {
-        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public SubscriptionSourceType getSourceType() {
         return null;
     }
 }