killbill-memoizeit

Details

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 289a7b9..b4eeaba 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
@@ -16,6 +16,7 @@
 
 package com.ning.billing.entitlement.api.user;
 
+import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
@@ -100,4 +101,6 @@ public interface Subscription extends Entity, Blockable {
     public SubscriptionTransition getPendingTransition();
 
     public SubscriptionTransition getPreviousTransition();
+
+    public List<SubscriptionTransition> getAllTransitions();
 }
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/util/EntitlementChecker.java b/beatrix/src/test/java/com/ning/billing/beatrix/util/EntitlementChecker.java
index 593fc8c..bdf75f8 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/util/EntitlementChecker.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/util/EntitlementChecker.java
@@ -31,6 +31,7 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
 import com.ning.billing.junction.plumbing.api.BlockingSubscription;
 import com.ning.billing.util.callcontext.CallContext;
@@ -68,15 +69,15 @@ public class EntitlementChecker {
         Assert.assertNotNull(subscription);
         auditChecker.checkSubscriptionCreated(subscription.getBundleId(), subscriptionId, context);
 
-        List<SubscriptionTransitionData> subscriptionEvents = getSubscriptionEvents(subscription);
+        List<SubscriptionTransition> subscriptionEvents = getSubscriptionEvents(subscription);
         Assert.assertTrue(subscriptionEvents.size() >= 1);
-        auditChecker.checkSubscriptionEventCreated(subscription.getBundleId(), subscriptionEvents.get(0).getId(), context);
+        auditChecker.checkSubscriptionEventCreated(subscription.getBundleId(), ((SubscriptionTransitionData) subscriptionEvents.get(0)).getId(), context);
 
         auditChecker.checkBundleCreated(subscription.getBundleId(), context);
         return subscription;
     }
 
-    private List<SubscriptionTransitionData> getSubscriptionEvents(final Subscription subscription) {
+    private List<SubscriptionTransition> getSubscriptionEvents(final Subscription subscription) {
         return ((SubscriptionData) ((BlockingSubscription) subscription).getDelegateSubscription()).getAllTransitions();
     }
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java
index 4eba14f..08dceae 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java
@@ -38,6 +38,7 @@ import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBuilder;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
 import com.ning.billing.util.callcontext.InternalCallContext;
@@ -124,23 +125,23 @@ public class DefaultEntitlementInternalApi extends EntitlementApiBase implements
 
     @Override
     public List<EffectiveSubscriptionInternalEvent> getAllTransitions(final Subscription subscription, final InternalTenantContext context) {
-        final List<SubscriptionTransitionData> transitions = ((SubscriptionData) subscription).getAllTransitions();
+        final List<SubscriptionTransition> transitions = ((SubscriptionData) subscription).getAllTransitions();
         return convertEffectiveSubscriptionInternalEventFromSubscriptionTransitions(subscription, context, transitions);
     }
 
     @Override
     public List<EffectiveSubscriptionInternalEvent> getBillingTransitions(final Subscription subscription, final InternalTenantContext context) {
-        final List<SubscriptionTransitionData> transitions = ((SubscriptionData) subscription).getBillingTransitions();
+        final List<SubscriptionTransition> transitions = ((SubscriptionData) subscription).getBillingTransitions();
         return convertEffectiveSubscriptionInternalEventFromSubscriptionTransitions(subscription, context, transitions);
     }
 
     private List<EffectiveSubscriptionInternalEvent> convertEffectiveSubscriptionInternalEventFromSubscriptionTransitions(final Subscription subscription,
-                                                                                                                          final InternalTenantContext context, final List<SubscriptionTransitionData> transitions) {
-        return ImmutableList.<EffectiveSubscriptionInternalEvent>copyOf(Collections2.transform(transitions, new Function<SubscriptionTransitionData, EffectiveSubscriptionInternalEvent>() {
+                                                                                                                          final InternalTenantContext context, final List<SubscriptionTransition> transitions) {
+        return ImmutableList.<EffectiveSubscriptionInternalEvent>copyOf(Collections2.transform(transitions, new Function<SubscriptionTransition, EffectiveSubscriptionInternalEvent>() {
             @Override
             @Nullable
-            public EffectiveSubscriptionInternalEvent apply(@Nullable SubscriptionTransitionData input) {
-                return new DefaultEffectiveSubscriptionEvent(input, ((SubscriptionData) subscription).getAlignStartDate(), null, context.getAccountRecordId(), context.getTenantRecordId());
+            public EffectiveSubscriptionInternalEvent apply(@Nullable SubscriptionTransition input) {
+                return new DefaultEffectiveSubscriptionEvent((SubscriptionTransitionData) input, ((SubscriptionData) subscription).getAlignStartDate(), null, context.getAccountRecordId(), context.getTenantRecordId());
             }
         }));
     }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
index fef4559..8855655 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
@@ -43,6 +43,7 @@ import com.ning.billing.entitlement.api.user.SubscriptionBuilder;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
 import com.ning.billing.entitlement.engine.addon.AddonUtils;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
@@ -374,8 +375,8 @@ public class DefaultEntitlementTimelineApi extends EntitlementApiBase implements
         if (nbDeleted != deletedEvents.size()) {
             for (final SubscriptionTimeline.DeletedEvent d : deletedEvents) {
                 boolean found = false;
-                for (final SubscriptionTransitionData cur : data.getAllTransitions()) {
-                    if (cur.getId().equals(d.getEventId())) {
+                for (final SubscriptionTransition cur : data.getAllTransitions()) {
+                    if (((SubscriptionTransitionData) cur).getId().equals(d.getEventId())) {
                         found = true;
                     }
                 }
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 3b632d7..47aa41e 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
@@ -83,7 +83,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
     // so the user holding that subscription object get the correct state when
     // the call completes
     //
-    private LinkedList<SubscriptionTransitionData> transitions;
+    private LinkedList<SubscriptionTransition> transitions;
 
     // Low level events are ONLY used for Repair APIs
     protected List<EntitlementEvent> events;
@@ -123,7 +123,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         this.activeVersion = internalSubscription.getActiveVersion();
         this.chargedThroughDate = internalSubscription.getChargedThroughDate();
         this.paidThroughDate = internalSubscription.getPaidThroughDate();
-        this.transitions = new LinkedList<SubscriptionTransitionData>(internalSubscription.getAllTransitions());
+        this.transitions = new LinkedList<SubscriptionTransition>(internalSubscription.getAllTransitions());
         this.events = internalSubscription.getEvents();
     }
 
@@ -148,7 +148,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         if (transitions == null) {
             return null;
         }
-        final SubscriptionTransitionData initialTransition = transitions.get(0);
+        final SubscriptionTransitionData initialTransition = (SubscriptionTransitionData) transitions.get(0);
         switch (initialTransition.getApiEventType()) {
         case MIGRATE_BILLING:
         case MIGRATE_ENTITLEMENT:
@@ -197,7 +197,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
                 clock, transitions, Order.ASC_FROM_PAST, Kind.ENTITLEMENT,
                 Visibility.ALL, TimeLimit.FUTURE_ONLY);
         while (it.hasNext()) {
-            final SubscriptionTransitionData cur = it.next();
+            final SubscriptionTransition cur = it.next();
             if (cur.getTransitionType() == SubscriptionTransitionType.CANCEL) {
                 return cur.getEffectiveTransitionTime();
             }
@@ -336,6 +336,19 @@ public class SubscriptionData extends EntityBase implements Subscription {
     }
 
     @Override
+    public List<SubscriptionTransition> getAllTransitions() {
+        if (transitions == null) {
+            return Collections.emptyList();
+        }
+        final List<SubscriptionTransition> result = new ArrayList<SubscriptionTransition>();
+        final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(clock, transitions, Order.ASC_FROM_PAST, Kind.ALL, Visibility.ALL, TimeLimit.ALL);
+        while (it.hasNext()) {
+            result.add(it.next());
+        }
+        return result;
+    }
+
+    @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
@@ -371,9 +384,9 @@ public class SubscriptionData extends EntityBase implements Subscription {
         if (transitions == null || event == null) {
             return null;
         }
-        for (final SubscriptionTransitionData cur : transitions) {
-            if (cur.getId().equals(event.getId())) {
-                final SubscriptionTransitionData withSeq = new SubscriptionTransitionData(cur, seqId);
+        for (final SubscriptionTransition cur : transitions) {
+            if (((SubscriptionTransitionData) cur).getId().equals(event.getId())) {
+                final SubscriptionTransitionData withSeq = new SubscriptionTransitionData((SubscriptionTransitionData)cur, seqId);
                 return withSeq;
             }
         }
@@ -388,26 +401,26 @@ public class SubscriptionData extends EntityBase implements Subscription {
         final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(
                 clock, transitions, Order.DESC_FROM_FUTURE, Kind.ENTITLEMENT,
                 Visibility.FROM_DISK_ONLY, TimeLimit.ALL);
-        return it.hasNext() ? it.next().getTotalOrdering() : -1L;
+        return it.hasNext() ? ((SubscriptionTransitionData)it.next()).getTotalOrdering() : -1L;
     }
 
     public long getActiveVersion() {
         return activeVersion;
     }
 
-    public List<SubscriptionTransitionData> getBillingTransitions() {
+    public List<SubscriptionTransition> getBillingTransitions() {
 
         if (transitions == null) {
             return Collections.emptyList();
         }
-        final List<SubscriptionTransitionData> result = new ArrayList<SubscriptionTransitionData>();
+        final List<SubscriptionTransition> result = new ArrayList<SubscriptionTransition>();
         final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(
                 clock, transitions, Order.ASC_FROM_PAST, Kind.BILLING,
                 Visibility.ALL, TimeLimit.ALL);
         // Remove anything prior to first CREATE or MIGRATE_BILLING
         boolean foundInitialEvent = false;
         while (it.hasNext()) {
-            final SubscriptionTransitionData curTransition = it.next();
+            final SubscriptionTransitionData curTransition = (SubscriptionTransitionData) it.next();
             if (!foundInitialEvent) {
                 foundInitialEvent = curTransition.getEventType() == EventType.API_USER &&
                                     (curTransition.getApiEventType() == ApiEventType.CREATE ||
@@ -422,18 +435,6 @@ public class SubscriptionData extends EntityBase implements Subscription {
     }
 
 
-    public List<SubscriptionTransitionData> getAllTransitions() {
-        if (transitions == null) {
-            return Collections.emptyList();
-        }
-        final List<SubscriptionTransitionData> result = new ArrayList<SubscriptionTransitionData>();
-        final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(clock, transitions, Order.ASC_FROM_PAST, Kind.ALL, Visibility.ALL, TimeLimit.ALL);
-        while (it.hasNext()) {
-            result.add(it.next());
-        }
-        return result;
-    }
-
     public SubscriptionTransitionData getInitialTransitionForCurrentPlan() {
         if (transitions == null) {
             throw new EntitlementError(String.format("No transitions for subscription %s", getId()));
@@ -447,7 +448,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
                 TimeLimit.PAST_OR_PRESENT_ONLY);
 
         while (it.hasNext()) {
-            final SubscriptionTransitionData cur = it.next();
+            final SubscriptionTransitionData cur = (SubscriptionTransitionData) it.next();
             if (cur.getTransitionType() == SubscriptionTransitionType.CREATE
                     || cur.getTransitionType() == SubscriptionTransitionType.RE_CREATE
                     || cur.getTransitionType() == SubscriptionTransitionType.TRANSFER
@@ -493,7 +494,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
                 clock, transitions, Order.DESC_FROM_FUTURE, Kind.ENTITLEMENT,
                 Visibility.ALL, TimeLimit.PAST_OR_PRESENT_ONLY);
         while (it.hasNext()) {
-            final SubscriptionTransitionData cur = it.next();
+            final SubscriptionTransitionData cur = (SubscriptionTransitionData) it.next();
 
             if (cur.getTransitionType() == SubscriptionTransitionType.PHASE
                     || cur.getTransitionType() == SubscriptionTransitionType.TRANSFER
@@ -525,7 +526,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         SubscriptionState previousState = null;
         PriceList previousPriceList = null;
 
-        transitions = new LinkedList<SubscriptionTransitionData>();
+        transitions = new LinkedList<SubscriptionTransition>();
         Plan previousPlan = null;
         PlanPhase previousPhase = null;
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionDataIterator.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionDataIterator.java
index 8de654f..9da28ea 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionDataIterator.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionDataIterator.java
@@ -23,15 +23,15 @@ import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 import com.ning.billing.entitlement.exceptions.EntitlementError;
 import com.ning.billing.util.clock.Clock;
 
-public class SubscriptionTransitionDataIterator implements Iterator<SubscriptionTransitionData> {
+public class SubscriptionTransitionDataIterator implements Iterator<SubscriptionTransition> {
 
     private final Clock clock;
-    private final Iterator<SubscriptionTransitionData> it;
+    private final Iterator<SubscriptionTransition> it;
     private final Kind kind;
     private final TimeLimit timeLimit;
     private final Visibility visibility;
 
-    private SubscriptionTransitionData next;
+    private SubscriptionTransition next;
 
     public enum Order {
         ASC_FROM_PAST,
@@ -55,7 +55,7 @@ public class SubscriptionTransitionDataIterator implements Iterator<Subscription
         ALL
     }
 
-    public SubscriptionTransitionDataIterator(final Clock clock, final LinkedList<SubscriptionTransitionData> transitions,
+    public SubscriptionTransitionDataIterator(final Clock clock, final LinkedList<SubscriptionTransition> transitions,
                                               final Order order, final Kind kind, final Visibility visibility, final TimeLimit timeLimit) {
         this.it = (order == Order.DESC_FROM_FUTURE) ? transitions.descendingIterator() : transitions.iterator();
         this.clock = clock;
@@ -77,12 +77,12 @@ public class SubscriptionTransitionDataIterator implements Iterator<Subscription
         return true;
     }
 
-    private boolean shouldSkip(final SubscriptionTransitionData input) {
-        if (visibility == Visibility.FROM_DISK_ONLY && !input.isFromDisk()) {
+    private boolean shouldSkip(final SubscriptionTransition input) {
+        if (visibility == Visibility.FROM_DISK_ONLY && ! ((SubscriptionTransitionData) input).isFromDisk()) {
             return true;
         }
-        if ((kind == Kind.ENTITLEMENT && shouldSkipForEntitlementEvents(input)) ||
-            (kind == Kind.BILLING && shouldSkipForBillingEvents(input))) {
+        if ((kind == Kind.ENTITLEMENT && shouldSkipForEntitlementEvents((SubscriptionTransitionData)input)) ||
+            (kind == Kind.BILLING && shouldSkipForBillingEvents((SubscriptionTransitionData) input))) {
             return true;
         }
         if ((timeLimit == TimeLimit.FUTURE_ONLY && !input.getEffectiveTransitionTime().isAfter(clock.getUTCNow())) ||
@@ -106,7 +106,7 @@ public class SubscriptionTransitionDataIterator implements Iterator<Subscription
 
 
     @Override
-    public SubscriptionTransitionData next() {
+    public SubscriptionTransition next() {
         return next;
     }
 
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java b/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
index 16deb9d..282ffb6 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
@@ -35,6 +35,7 @@ import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
 import com.ning.billing.entitlement.EntitlementTestSuiteNoDB;
 import com.ning.billing.entitlement.api.user.SubscriptionBuilder;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.util.config.CatalogConfig;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
@@ -206,7 +207,7 @@ public class TestPlanAligner extends EntitlementTestSuiteNoDB {
 
         subscriptionData.rebuildTransitions(ImmutableList.<EntitlementEvent>of(previousEvent, event), catalogService.getFullCatalog());
 
-        final List<SubscriptionTransitionData> newTransitions = subscriptionData.getAllTransitions();
+        final List<SubscriptionTransition> newTransitions = subscriptionData.getAllTransitions();
         Assert.assertEquals(newTransitions.size(), 2);
         Assert.assertNull(newTransitions.get(0).getPreviousPhase());
         Assert.assertEquals(newTransitions.get(0).getNextPhase(), newTransitions.get(1).getPreviousPhase());
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java
index c5af7fe..17cede0 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/migration/TestMigration.java
@@ -39,6 +39,7 @@ import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
 import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
 import com.ning.billing.entitlement.events.user.ApiEventType;
 
@@ -291,28 +292,28 @@ public class TestMigration extends EntitlementTestSuiteWithEmbeddedDB {
             assertEquals(subscriptions.size(), 1);
             final SubscriptionData subscription = (SubscriptionData) subscriptions.get(0);
 
-            final List<SubscriptionTransitionData> transitions = subscription.getAllTransitions();
+            final List<SubscriptionTransition> transitions = subscription.getAllTransitions();
             assertEquals(transitions.size(), 2);
-            final SubscriptionTransitionData initialMigrateBilling = transitions.get(1);
+            final SubscriptionTransitionData initialMigrateBilling = (SubscriptionTransitionData) transitions.get(1);
             assertEquals(initialMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
             assertTrue(initialMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
             assertEquals(initialMigrateBilling.getNextPlan().getName(), "shotgun-annual");
             assertEquals(initialMigrateBilling.getNextPhase().getName(), "shotgun-annual-evergreen");
 
-            final List<SubscriptionTransitionData> billingTransitions = subscription.getBillingTransitions();
+            final List<SubscriptionTransition> billingTransitions = subscription.getBillingTransitions();
             assertEquals(billingTransitions.size(), 1);
             assertEquals(billingTransitions.get(0), initialMigrateBilling);
 
             // Now make an IMMEDIATE change of plan
             subscription.changePlan("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
 
-            final List<SubscriptionTransitionData> newTransitions = subscription.getAllTransitions();
+            final List<SubscriptionTransition> newTransitions = subscription.getAllTransitions();
             assertEquals(newTransitions.size(), 3);
 
-            final SubscriptionTransitionData changeTransition = newTransitions.get(1);
+            final SubscriptionTransitionData changeTransition = (SubscriptionTransitionData) newTransitions.get(1);
             assertEquals(changeTransition.getApiEventType(), ApiEventType.CHANGE);
 
-            final SubscriptionTransitionData newMigrateBilling = newTransitions.get(2);
+            final SubscriptionTransitionData newMigrateBilling = (SubscriptionTransitionData) newTransitions.get(2);
             assertEquals(newMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
             assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
             assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(initialMigrateBilling.getEffectiveTransitionTime()) == 0);
@@ -320,7 +321,7 @@ public class TestMigration extends EntitlementTestSuiteWithEmbeddedDB {
             assertEquals(newMigrateBilling.getNextPhase().getName(), "assault-rifle-monthly-evergreen");
 
 
-            final List<SubscriptionTransitionData> newBillingTransitions = subscription.getBillingTransitions();
+            final List<SubscriptionTransition> newBillingTransitions = subscription.getBillingTransitions();
             assertEquals(newBillingTransitions.size(), 1);
             assertEquals(newBillingTransitions.get(0), newMigrateBilling);
 
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 249f976..9bd4d4b 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
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.plumbing.api;
 
+import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
@@ -220,6 +221,11 @@ public class BlockingSubscription implements Subscription {
         return subscription.getPreviousTransition();
     }
 
+    @Override
+    public List<SubscriptionTransition> getAllTransitions() {
+        return subscription.getAllTransitions();
+    }
+
     public Subscription getDelegateSubscription() {
         return subscription;
     }
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 c1127cd..307d4a0 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -226,4 +226,9 @@ public class MockSubscription implements Subscription {
         // TODO Auto-generated method stub
         return null;
     }
+
+    @Override
+    public List<SubscriptionTransition> getAllTransitions() {
+        return null;
+    }
 }