killbill-memoizeit

analytics: add billing_period to BusinessSubscription object Signed-off-by:

11/11/2011 9:17:13 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 fbe2749..b85f6f3 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
@@ -51,6 +51,7 @@ public class BusinessSubscription
     private final ProductCategory productCategory;
     private final String slug;
     private final String phase;
+    private final String billingPeriod;
     private final BigDecimal price;
     private final BigDecimal mrr;
     private final String currency;
@@ -59,13 +60,14 @@ 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 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 BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
     {
         this.productName = productName;
         this.productType = productType;
         this.productCategory = productCategory;
         this.slug = slug;
         this.phase = phase;
+        this.billingPeriod = billingPeriod;
         this.price = price;
         this.mrr = mrr;
         this.currency = currency;
@@ -111,9 +113,11 @@ public class BusinessSubscription
 
             if (currentPhase.getPhaseType() != null) {
                 phase = currentPhase.getPhaseType().toString();
+                billingPeriod = currentPhase.getBillingPeriod().toString();
             }
             else {
                 phase = null;
+                billingPeriod = null;
             }
 
             if (currentPhase.getRecurringPrice() != null) {
@@ -128,6 +132,7 @@ public class BusinessSubscription
         else {
             slug = null;
             phase = null;
+            billingPeriod = null;
             price = null;
             mrr = null;
         }
@@ -145,6 +150,11 @@ public class BusinessSubscription
         this.bundleId = bundleId;
     }
 
+    public String getBillingPeriod()
+    {
+        return billingPeriod;
+    }
+
     public UUID getBundleId()
     {
         return bundleId;
@@ -244,10 +254,10 @@ public class BusinessSubscription
     {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessSubscription");
-        sb.append("{bundleId=").append(bundleId);
+        sb.append("{billingPeriod='").append(billingPeriod).append('\'');
         sb.append(", productName='").append(productName).append('\'');
         sb.append(", productType='").append(productType).append('\'');
-        sb.append(", productCategory='").append(productCategory).append('\'');
+        sb.append(", productCategory=").append(productCategory);
         sb.append(", slug='").append(slug).append('\'');
         sb.append(", phase='").append(phase).append('\'');
         sb.append(", price=").append(price);
@@ -256,6 +266,7 @@ public class BusinessSubscription
         sb.append(", startDate=").append(startDate);
         sb.append(", state=").append(state);
         sb.append(", subscriptionId=").append(subscriptionId);
+        sb.append(", bundleId=").append(bundleId);
         sb.append('}');
         return sb.toString();
     }
@@ -272,6 +283,9 @@ public class BusinessSubscription
 
         final BusinessSubscription that = (BusinessSubscription) o;
 
+        if (billingPeriod != null ? !billingPeriod.equals(that.billingPeriod) : that.billingPeriod != null) {
+            return false;
+        }
         if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
             return false;
         }
@@ -327,6 +341,7 @@ public class BusinessSubscription
         result = 31 * result + (state != null ? state.hashCode() : 0);
         result = 31 * result + (subscriptionId != null ? subscriptionId.hashCode() : 0);
         result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
+        result = 31 * result + (billingPeriod != null ? billingPeriod.hashCode() : 0);
         return result;
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
index 6a10741..ccf2a2b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
@@ -54,6 +54,7 @@ public @interface BusinessSubscriptionTransitionBinder
                         q.bindNull("prev_product_category", Types.VARCHAR);
                         q.bindNull("prev_slug", Types.VARCHAR);
                         q.bindNull("prev_phase", Types.VARCHAR);
+                        q.bindNull("prev_billing_period", Types.VARCHAR);
                         q.bindNull("prev_price", Types.NUMERIC);
                         q.bindNull("prev_mrr", Types.NUMERIC);
                         q.bindNull("prev_currency", Types.VARCHAR);
@@ -73,6 +74,7 @@ public @interface BusinessSubscriptionTransitionBinder
                         }
                         q.bind("prev_slug", previousSubscription.getSlug());
                         q.bind("prev_phase", previousSubscription.getPhase());
+                        q.bind("prev_billing_period", previousSubscription.getBillingPeriod());
                         q.bind("prev_price", previousSubscription.getRoundedPrice());
                         q.bind("prev_mrr", previousSubscription.getRoundedMrr());
                         q.bind("prev_currency", previousSubscription.getCurrency());
@@ -109,6 +111,7 @@ public @interface BusinessSubscriptionTransitionBinder
                         q.bindNull("next_product_category", Types.VARCHAR);
                         q.bindNull("next_slug", Types.VARCHAR);
                         q.bindNull("next_phase", Types.VARCHAR);
+                        q.bindNull("next_billing_period", Types.VARCHAR);
                         q.bindNull("next_price", Types.NUMERIC);
                         q.bindNull("next_mrr", Types.NUMERIC);
                         q.bindNull("next_currency", Types.VARCHAR);
@@ -128,6 +131,7 @@ public @interface BusinessSubscriptionTransitionBinder
                         }
                         q.bind("next_slug", nextSubscription.getSlug());
                         q.bind("next_phase", nextSubscription.getPhase());
+                        q.bind("next_billing_period", nextSubscription.getBillingPeriod());
                         q.bind("next_price", nextSubscription.getRoundedPrice());
                         q.bind("next_mrr", nextSubscription.getRoundedMrr());
                         q.bind("next_currency", nextSubscription.getCurrency());
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 1788193..55aedb9 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
@@ -43,13 +43,14 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
             r.getString(6) == null ? null : ProductCategory.valueOf(r.getString(6)), // productCategory
             r.getString(7), // slug
             r.getString(8),  // phase
-            BigDecimal.valueOf(r.getDouble(9)), // price
-            BigDecimal.valueOf(r.getDouble(10)), // mrr
-            r.getString(11), // currency
-            r.getLong(12) == 0 ? null : new DateTime(r.getLong(12), DateTimeZone.UTC), // startDate
-            r.getString(13) == null ? null : SubscriptionState.valueOf(r.getString(13)), // state
-            r.getString(14) == null ? null : UUID.fromString(r.getString(14)), // subscriptionId
-            r.getString(15) == null ? null : UUID.fromString(r.getString(15)) //bundleId
+            r.getString(9),  // billing period
+            BigDecimal.valueOf(r.getDouble(10)), // price
+            BigDecimal.valueOf(r.getDouble(11)), // mrr
+            r.getString(12), // currency
+            r.getLong(13) == 0 ? null : new DateTime(r.getLong(13), DateTimeZone.UTC), // startDate
+            r.getString(14) == null ? null : SubscriptionState.valueOf(r.getString(14)), // state
+            r.getString(15) == null ? null : UUID.fromString(r.getString(15)), // subscriptionId
+            r.getString(16) == null ? null : UUID.fromString(r.getString(16)) //bundleId
         );
 
         // Avoid creating a dummy subscriptions with all null fields
@@ -58,18 +59,19 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
         }
 
         BusinessSubscription next = new BusinessSubscription(
-            r.getString(16), // productName
-            r.getString(17), // productType
-            r.getString(18) == null ? null : ProductCategory.valueOf(r.getString(18)), // productCategory
-            r.getString(19), // slug8
-            r.getString(20),  // phase
-            BigDecimal.valueOf(r.getDouble(21)), // price
-            BigDecimal.valueOf(r.getDouble(22)), // mrr
-            r.getString(23), // currency
-            r.getLong(24) == 0 ? null : new DateTime(r.getLong(24), DateTimeZone.UTC), // startDate
-            r.getString(25) == null ? null : SubscriptionState.valueOf(r.getString(25)), // state
-            r.getString(26) == null ? null : UUID.fromString(r.getString(26)), // subscriptionId
-            r.getString(27) == null ? null : UUID.fromString(r.getString(27)) //bundleId
+            r.getString(17), // productName
+            r.getString(18), // productType
+            r.getString(19) == null ? null : ProductCategory.valueOf(r.getString(19)), // productCategory
+            r.getString(20), // slug8
+            r.getString(21),  // phase
+            r.getString(22),  // billing period
+            BigDecimal.valueOf(r.getDouble(23)), // price
+            BigDecimal.valueOf(r.getDouble(24)), // mrr
+            r.getString(25), // currency
+            r.getLong(26) == 0 ? null : new DateTime(r.getLong(26), DateTimeZone.UTC), // startDate
+            r.getString(27) == null ? null : SubscriptionState.valueOf(r.getString(27)), // state
+            r.getString(28) == null ? null : UUID.fromString(r.getString(28)), // subscriptionId
+            r.getString(29) == null ? null : UUID.fromString(r.getString(29)) //bundleId
         );
 
         // Avoid creating a dummy subscriptions with all null fields
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg
index d1a4bb0..11e160a 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg
@@ -10,6 +10,7 @@ getTransitions(event_key) ::= <<
   , prev_product_category
   , prev_slug
   , prev_phase
+  , prev_billing_period
   , prev_price
   , prev_mrr
   , prev_currency
@@ -22,6 +23,7 @@ getTransitions(event_key) ::= <<
   , next_product_category
   , next_slug
   , next_phase
+  , next_billing_period
   , next_price
   , next_mrr
   , next_currency
@@ -45,6 +47,7 @@ createTransition() ::= <<
   , prev_product_category
   , prev_slug
   , prev_phase
+  , prev_billing_period
   , prev_price
   , prev_mrr
   , prev_currency
@@ -57,6 +60,7 @@ createTransition() ::= <<
   , next_product_category
   , next_slug
   , next_phase
+  , next_billing_period
   , next_price
   , next_mrr
   , next_currency
@@ -73,6 +77,7 @@ createTransition() ::= <<
   , :prev_product_category
   , :prev_slug
   , :prev_phase
+  , :prev_billing_period
   , :prev_price
   , :prev_mrr
   , :prev_currency
@@ -85,6 +90,7 @@ createTransition() ::= <<
   , :next_product_category
   , :next_slug
   , :next_phase
+  , :next_billing_period
   , :next_price
   , :next_mrr
   , :next_currency
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
index 6136317..908715a 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -8,6 +8,7 @@ create table bst (
 , prev_product_category varchar(32) default null
 , prev_slug varchar(50) default null
 , prev_phase varchar(32) default null
+, prev_billing_period varchar(32) default null
 , prev_price numeric(10, 4) default 0
 , prev_mrr numeric(10, 4) default 0
 , prev_currency varchar(32) default null
@@ -20,6 +21,7 @@ create table bst (
 , next_product_category varchar(32) default null
 , next_slug varchar(50) default null
 , next_phase varchar(32) default null
+, next_billing_period varchar(32) default null
 , next_price numeric(10, 4) default 0
 , next_mrr numeric(10, 4) default 0
 , next_currency varchar(32) default null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java b/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
index 54c0773..5075a92 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
@@ -83,7 +83,7 @@ public class MockPhase implements IPlanPhase
     @Override
     public BillingPeriod getBillingPeriod()
     {
-        throw new UnsupportedOperationException();
+        return BillingPeriod.MONTHLY;
     }
 
     @Override
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
index 2def231..f185a2a 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
@@ -84,6 +84,7 @@ public class TestBusinessSubscription
         Assert.assertEquals(subscription.getRoundedMrr(), 0.0);
         Assert.assertEquals(subscription.getSlug(), phase.getName());
         Assert.assertEquals(subscription.getPhase(), phase.getPhaseType().toString());
+        Assert.assertEquals(subscription.getBillingPeriod(), phase.getBillingPeriod().toString());
         Assert.assertEquals(subscription.getPrice(), phase.getRecurringPrice().getPrice(null));
         Assert.assertEquals(subscription.getProductCategory(), product.getCategory());
         Assert.assertEquals(subscription.getProductName(), product.getName());