killbill-memoizeit

analytics: add priceList to BusinessSubscription We don't

11/21/2011 10:43:38 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
index 69c89cd..56fb743 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
@@ -53,6 +53,8 @@ public class BusinessSubscription
     private final String phase;
     private final String billingPeriod;
     private final BigDecimal price;
+    // For convenience, not exposed
+    private final String priceList;
     private final BigDecimal mrr;
     private final String currency;
     private final DateTime startDate;
@@ -60,7 +62,7 @@ public class BusinessSubscription
     private final UUID subscriptionId;
     private final UUID bundleId;
 
-    public BusinessSubscription(final String productName, final String productType, final ProductCategory productCategory, final String slug, final String phase, final String billingPeriod, final BigDecimal price, final BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
+    public BusinessSubscription(final String productName, final String productType, final ProductCategory productCategory, final String slug, final String phase, final String billingPeriod, final BigDecimal price, final String priceList, final BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
     {
         this.productName = productName;
         this.productType = productType;
@@ -69,6 +71,7 @@ public class BusinessSubscription
         this.phase = phase;
         this.billingPeriod = billingPeriod;
         this.price = price;
+        this.priceList = priceList;
         this.mrr = mrr;
         this.currency = currency;
         this.startDate = startDate;
@@ -88,11 +91,13 @@ public class BusinessSubscription
      */
     BusinessSubscription(final ISubscription subscription, final Currency currency)
     {
-        this(subscription.getCurrentPlan(), subscription.getCurrentPhase(), currency, subscription.getStartDate(), subscription.getState(), subscription.getId(), subscription.getBundleId());
+        this(subscription.getCurrentPriceList(), subscription.getCurrentPlan(), subscription.getCurrentPhase(), currency, subscription.getStartDate(), subscription.getState(), subscription.getId(), subscription.getBundleId());
     }
 
-    public BusinessSubscription(final IPlan currentPlan, final IPlanPhase currentPhase, final Currency currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
+    public BusinessSubscription(final String priceList, final IPlan currentPlan, final IPlanPhase currentPhase, final Currency currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
     {
+        this.priceList = priceList;
+
         // Record plan information
         if (currentPlan != null && currentPlan.getProduct() != null) {
             final IProduct product = currentPlan.getProduct();
@@ -185,6 +190,11 @@ public class BusinessSubscription
         return price;
     }
 
+    public String getPriceList()
+    {
+        return priceList;
+    }
+
     public double getRoundedPrice()
     {
         return Rounder.round(price);
@@ -261,6 +271,7 @@ public class BusinessSubscription
         sb.append(", slug='").append(slug).append('\'');
         sb.append(", phase='").append(phase).append('\'');
         sb.append(", price=").append(price);
+        sb.append(", priceList=").append(priceList);
         sb.append(", mrr=").append(mrr);
         sb.append(", currency='").append(currency).append('\'');
         sb.append(", startDate=").append(startDate);
@@ -301,6 +312,9 @@ public class BusinessSubscription
         if (price != null ? !(Rounder.round(price) == Rounder.round(that.price)) : that.price != null) {
             return false;
         }
+        if (priceList != null ? !priceList.equals(that.priceList) : that.priceList != null) {
+            return false;
+        }
         if (productCategory != null ? !productCategory.equals(that.productCategory) : that.productCategory != null) {
             return false;
         }
@@ -335,6 +349,7 @@ public class BusinessSubscription
         result = 31 * result + (slug != null ? slug.hashCode() : 0);
         result = 31 * result + (phase != null ? phase.hashCode() : 0);
         result = 31 * result + (price != null ? price.hashCode() : 0);
+        result = 31 * result + (priceList != null ? priceList.hashCode() : 0);
         result = 31 * result + (mrr != null ? mrr.hashCode() : 0);
         result = 31 * result + (currency != null ? currency.hashCode() : 0);
         result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
index c3ecc70..37ff0ff 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
@@ -110,8 +110,8 @@ public class BusinessSubscriptionTransitionRecorder
         }
 
         // TODO Support currency changes
-        final BusinessSubscription prevSubscription = new BusinessSubscription(transition.getPreviousPlan(), transition.getPreviousPhase(), currency, previousEffectiveTransitionTime, transition.getPreviousState(), transition.getSubscriptionId(), transition.getBundleId());
-        final BusinessSubscription nextSubscription = new BusinessSubscription(transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId());
+        final BusinessSubscription prevSubscription = new BusinessSubscription(transition.getPreviousPriceList(),transition.getPreviousPlan(), transition.getPreviousPhase(), currency, previousEffectiveTransitionTime, transition.getPreviousState(), transition.getSubscriptionId(), transition.getBundleId());
+        final BusinessSubscription nextSubscription = new BusinessSubscription(transition.getNextPriceList(), transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId());
 
         record(transitionKey, transition.getRequestedTransitionTime(), event, prevSubscription, nextSubscription);
     }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
index 55aedb9..015f8bf 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
@@ -45,6 +45,7 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
             r.getString(8),  // phase
             r.getString(9),  // billing period
             BigDecimal.valueOf(r.getDouble(10)), // price
+            null,
             BigDecimal.valueOf(r.getDouble(11)), // mrr
             r.getString(12), // currency
             r.getLong(13) == 0 ? null : new DateTime(r.getLong(13), DateTimeZone.UTC), // startDate
@@ -66,6 +67,7 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
             r.getString(21),  // phase
             r.getString(22),  // billing period
             BigDecimal.valueOf(r.getDouble(23)), // price
+            null,
             BigDecimal.valueOf(r.getDouble(24)), // mrr
             r.getString(25), // currency
             r.getLong(26) == 0 ? null : new DateTime(r.getLong(26), DateTimeZone.UTC), // startDate
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index aae04e7..e521e33 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -126,7 +126,7 @@ public class TestAnalyticsService
             requestedTransitionTime,
             BusinessSubscriptionEvent.subscriptionCreated(plan),
             null,
-            new BusinessSubscription(plan, phase, null, effectiveTransitionTime, ISubscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
+            new BusinessSubscription(null, plan, phase, null, effectiveTransitionTime, ISubscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
         );
     }
 
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
index defdcef..2156a7e 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
@@ -79,8 +79,8 @@ public class TestAnalyticsDao
 
     private void setupBusinessSubscriptionTransition()
     {
-        final BusinessSubscription prevSubscription = new BusinessSubscription(plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.ACTIVE, UUID.randomUUID(), UUID.randomUUID());
-        final BusinessSubscription nextSubscription = new BusinessSubscription(plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID());
+        final BusinessSubscription prevSubscription = new BusinessSubscription(null, plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.ACTIVE, UUID.randomUUID(), UUID.randomUUID());
+        final BusinessSubscription nextSubscription = new BusinessSubscription(null, plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID());
         final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan);
         final DateTime requestedTimestamp = new DateTime(DateTimeZone.UTC);
 
@@ -166,7 +166,7 @@ public class TestAnalyticsDao
     @Test(groups = "slow")
     public void testTransitionsWithNullFieldsInSubscription()
     {
-        final BusinessSubscription subscriptionWithNullFields = new BusinessSubscription(plan, phase, Currency.USD, null, null, null, null);
+        final BusinessSubscription subscriptionWithNullFields = new BusinessSubscription(null, plan, phase, Currency.USD, null, null, null, null);
         final BusinessSubscriptionTransition transitionWithNullFields = new BusinessSubscriptionTransition(
             transition.getKey(),
             transition.getRequestedTimestamp(),
@@ -184,7 +184,7 @@ public class TestAnalyticsDao
     @Test(groups = "slow")
     public void testTransitionsWithNullPlanAndPhase() throws Exception
     {
-        final BusinessSubscription subscriptionWithNullPlanAndPhase = new BusinessSubscription(null, null, Currency.USD, null, null, null, null);
+        final BusinessSubscription subscriptionWithNullPlanAndPhase = new BusinessSubscription(null, null, null, Currency.USD, null, null, null, null);
         final BusinessSubscriptionTransition transitionWithNullPlanAndPhase = new BusinessSubscriptionTransition(
             transition.getKey(),
             transition.getRequestedTimestamp(),
@@ -207,7 +207,7 @@ public class TestAnalyticsDao
     @Test(groups = "slow")
     public void testTransitionsWithNullPlan() throws Exception
     {
-        final BusinessSubscription subscriptionWithNullPlan = new BusinessSubscription(null, phase, Currency.USD, null, null, null, null);
+        final BusinessSubscription subscriptionWithNullPlan = new BusinessSubscription(null, null, phase, Currency.USD, null, null, null, null);
         final BusinessSubscriptionTransition transitionWithNullPlan = new BusinessSubscriptionTransition(
             transition.getKey(),
             transition.getRequestedTimestamp(),
@@ -226,7 +226,7 @@ public class TestAnalyticsDao
     @Test(groups = "slow")
     public void testTransitionsWithNullPhase() throws Exception
     {
-        final BusinessSubscription subscriptionWithNullPhase = new BusinessSubscription(plan, null, Currency.USD, null, null, null, null);
+        final BusinessSubscription subscriptionWithNullPhase = new BusinessSubscription(null, plan, null, Currency.USD, null, null, null, null);
         final BusinessSubscriptionTransition transitionWithNullPhase = new BusinessSubscriptionTransition(
             transition.getKey(),
             transition.getRequestedTimestamp(),
@@ -243,7 +243,7 @@ public class TestAnalyticsDao
         Assert.assertEquals(transitions.get(0).getEvent(), transition.getEvent());
 
         // Null Phase but Plan - we don't turn the subscription into a null, however price and mrr are both set to 0 (not null)
-        final BusinessSubscription blankSubscription = new BusinessSubscription(plan, new MockPhase(null, null, null, 0.0), Currency.USD, null, null, null, null);
+        final BusinessSubscription blankSubscription = new BusinessSubscription(null, plan, new MockPhase(null, null, null, 0.0), Currency.USD, null, null, null, null);
         Assert.assertEquals(transitions.get(0).getPreviousSubscription(), blankSubscription);
         Assert.assertEquals(transitions.get(0).getNextSubscription(), blankSubscription);
     }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
index e208852..1a17c2d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
@@ -124,6 +124,6 @@ public class MockSubscription implements ISubscription
     @Override
     public String getCurrentPriceList()
     {
-        throw new UnsupportedOperationException();
+        return null;
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
index 9f13e2e..97b562d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -43,7 +43,7 @@ public class TestAnalyticsListener
     private final IProduct product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
     private final IPlan plan = new MockPlan("platinum-monthly", product);
     private final IPlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
-    private final String priceList = "something";
+    private final String priceList = null;
 
     private AnalyticsListener listener;
 
@@ -97,7 +97,7 @@ public class TestAnalyticsListener
     {
         final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCreated(plan);
         final ISubscription.SubscriptionState subscriptionState = ISubscription.SubscriptionState.ACTIVE;
-        final BusinessSubscription emptyBST = new BusinessSubscription(null, null, null, null, null, subscriptionId, bundleUUID);
+        final BusinessSubscription emptyBST = new BusinessSubscription(null, null, null, null, null, null, subscriptionId, bundleUUID);
         return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, emptyBST, subscriptionState);
     }
 
@@ -136,6 +136,7 @@ public class TestAnalyticsListener
             eventType,
             previousSubscription,
             new BusinessSubscription(
+                null,
                 plan,
                 phase,
                 null,