killbill-memoizeit

api: change Subscription interface Add List<EffectiveSubscriptionEvent>

7/2/2012 8:16:27 PM

Details

diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscription.java
index c102d35..0d68bec 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscription.java
@@ -29,8 +29,6 @@ import com.ning.billing.analytics.MockDuration;
 import com.ning.billing.analytics.MockPhase;
 import com.ning.billing.analytics.MockPlan;
 import com.ning.billing.analytics.MockProduct;
-import com.ning.billing.analytics.MockSubscription;
-import com.ning.billing.analytics.model.BusinessSubscription;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.Duration;
@@ -40,6 +38,7 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.mock.MockSubscription;
 
 import static com.ning.billing.catalog.api.Currency.USD;
 
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionEvent.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionEvent.java
index 11c6215..5509662 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionEvent.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionEvent.java
@@ -27,8 +27,6 @@ import com.ning.billing.analytics.MockDuration;
 import com.ning.billing.analytics.MockPhase;
 import com.ning.billing.analytics.MockPlan;
 import com.ning.billing.analytics.MockProduct;
-import com.ning.billing.analytics.MockSubscription;
-import com.ning.billing.analytics.model.BusinessSubscriptionEvent;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.PhaseType;
@@ -37,6 +35,7 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.mock.MockSubscription;
 
 public class TestBusinessSubscriptionEvent extends AnalyticsTestSuite {
     private Product product;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransition.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransition.java
index 4c401a6..da54e4b 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransition.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransition.java
@@ -28,10 +28,6 @@ import com.ning.billing.analytics.MockDuration;
 import com.ning.billing.analytics.MockPhase;
 import com.ning.billing.analytics.MockPlan;
 import com.ning.billing.analytics.MockProduct;
-import com.ning.billing.analytics.MockSubscription;
-import com.ning.billing.analytics.model.BusinessSubscription;
-import com.ning.billing.analytics.model.BusinessSubscriptionEvent;
-import com.ning.billing.analytics.model.BusinessSubscriptionTransition;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.PhaseType;
@@ -40,6 +36,7 @@ import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.ProductCategory;
 import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.mock.MockSubscription;
 
 import static com.ning.billing.catalog.api.Currency.USD;
 
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 df39528..e75ea1b 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
@@ -31,7 +31,6 @@ import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.entity.Entity;
 
-
 public interface Subscription extends Entity, Blockable {
 
     public boolean cancel(DateTime requestedDate, boolean eot, CallContext context)
@@ -76,4 +75,6 @@ public interface Subscription extends Entity, Blockable {
     public EffectiveSubscriptionEvent getPreviousTransition();
 
     public List<EffectiveSubscriptionEvent> getBillingTransitions();
+
+    public List<EffectiveSubscriptionEvent> getAllTransitions();
 }
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 368dbb5..220c2ad 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
@@ -37,6 +37,7 @@ import com.ning.billing.entitlement.api.SubscriptionFactory;
 import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline.NewEvent;
 import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory.SubscriptionBuilder;
+import com.ning.billing.entitlement.api.user.EffectiveSubscriptionEvent;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
@@ -323,7 +324,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
         if (nbDeleted != deletedEvents.size()) {
             for (final SubscriptionTimeline.DeletedEvent d : deletedEvents) {
                 boolean found = false;
-                for (final SubscriptionTransitionData cur : data.getAllTransitions()) {
+                for (final EffectiveSubscriptionEvent cur : data.getAllTransitions()) {
                     if (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 409bc8d..d5586e9 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
@@ -303,8 +303,19 @@ public class SubscriptionData extends EntityBase implements Subscription {
         return activeVersion;
     }
 
-    public List<SubscriptionTransitionData> getAllTransitions() {
-        return transitions;
+    @Override
+    public List<EffectiveSubscriptionEvent> getAllTransitions() {
+        if (transitions == null) {
+            return Collections.emptyList();
+        }
+
+        final List<EffectiveSubscriptionEvent> result = new ArrayList<EffectiveSubscriptionEvent>();
+        final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(clock, transitions, Order.ASC_FROM_PAST, Kind.ALL, Visibility.ALL, TimeLimit.ALL);
+        while (it.hasNext()) {
+            result.add(new DefaultEffectiveSubscriptionEvent(it.next(), startDate));
+        }
+
+        return result;
     }
 
     public SubscriptionTransitionData getInitialTransitionForCurrentPlan() {
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 571630f..9df1b92 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
@@ -36,6 +36,7 @@ import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
 import com.ning.billing.config.CatalogConfig;
 import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory;
+import com.ning.billing.entitlement.api.user.EffectiveSubscriptionEvent;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionData;
 import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
@@ -201,7 +202,7 @@ public class TestPlanAligner {
 
         subscriptionData.rebuildTransitions(ImmutableList.<EntitlementEvent>of(previousEvent, event), catalogService.getFullCatalog());
 
-        final List<SubscriptionTransitionData> newTransitions = subscriptionData.getAllTransitions();
+        final List<EffectiveSubscriptionEvent> 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/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 154ff3c..fb41a88 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
@@ -128,6 +128,11 @@ public class BlockingSubscription implements Subscription {
         return subscription.getBillingTransitions();
     }
 
+    @Override
+    public List<EffectiveSubscriptionEvent> getAllTransitions() {
+        return subscription.getAllTransitions();
+    }
+
     public BlockingState getBlockingState() {
         if (blockingState == null) {
             blockingState = blockingApi.getBlockingStateFor(this);
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
index 29ca9f5..fb5d6ea 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
@@ -177,6 +177,11 @@ public class TestBillingApi {
             }
 
             @Override
+            public List<EffectiveSubscriptionEvent> getAllTransitions() {
+                return effectiveSubscriptionTransitions;
+            }
+
+            @Override
             public Plan getCurrentPlan() {
                 return subscriptionPlan;
             }
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 cf80d68..2e7234e 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -20,6 +20,7 @@ import java.util.List;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Plan;
@@ -35,12 +36,22 @@ import com.ning.billing.mock.BrainDeadProxyFactory;
 import com.ning.billing.util.callcontext.CallContext;
 
 public class MockSubscription implements Subscription {
-    Subscription sub = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+    private static final UUID ID = UUID.randomUUID();
+    private static final UUID BUNDLE_ID = UUID.randomUUID();
+    private static final DateTime START_DATE = new DateTime(DateTimeZone.UTC);
 
-    public UUID getId() {
-        return sub.getId();
+    private final SubscriptionState state;
+    private final Plan plan;
+    private final PlanPhase phase;
+
+    public MockSubscription(final SubscriptionState state, final Plan plan, final PlanPhase phase) {
+        this.state = state;
+        this.plan = plan;
+        this.phase = phase;
     }
 
+    Subscription sub = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+
     public boolean cancel(final DateTime requestedDate, final boolean eot, final CallContext context) throws EntitlementUserApiException {
         return sub.cancel(requestedDate, eot, context);
     }
@@ -59,16 +70,20 @@ public class MockSubscription implements Subscription {
         return sub.recreate(spec, requestedDate, context);
     }
 
+    public UUID getId() {
+        return ID;
+    }
+
     public UUID getBundleId() {
-        return sub.getBundleId();
+        return BUNDLE_ID;
     }
 
     public SubscriptionState getState() {
-        return sub.getState();
+        return state;
     }
 
     public DateTime getStartDate() {
-        return sub.getStartDate();
+        return START_DATE;
     }
 
     public DateTime getEndDate() {
@@ -76,7 +91,7 @@ public class MockSubscription implements Subscription {
     }
 
     public Plan getCurrentPlan() {
-        return sub.getCurrentPlan();
+        return plan;
     }
 
     public BlockingState getBlockingState() {
@@ -88,7 +103,7 @@ public class MockSubscription implements Subscription {
     }
 
     public PlanPhase getCurrentPhase() {
-        return sub.getCurrentPhase();
+        return phase;
     }
 
     public DateTime getChargedThroughDate() {
@@ -114,4 +129,9 @@ public class MockSubscription implements Subscription {
     public List<EffectiveSubscriptionEvent> getBillingTransitions() {
         return sub.getBillingTransitions();
     }
+
+    @Override
+    public List<EffectiveSubscriptionEvent> getAllTransitions() {
+        return sub.getAllTransitions();
+    }
 }