killbill-memoizeit

analytics: add linked_item_id in bii We need this column

8/30/2012 1:35:44 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java
index 48e9fca..b13b996 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemBinder.java
@@ -42,6 +42,7 @@ public @interface BusinessInvoiceItemBinder {
             return new Binder<BusinessInvoiceItemBinder, BusinessInvoiceItem>() {
                 public void bind(final SQLStatement q, final BusinessInvoiceItemBinder bind, final BusinessInvoiceItem invoiceItem) {
                     q.bind("item_id", invoiceItem.getItemId().toString());
+                    q.bind("linked_item_id", invoiceItem.getLinkedItemId().toString());
 
                     final DateTime dateTimeNow = new DateTime(DateTimeZone.UTC);
                     if (invoiceItem.getCreatedDate() != null) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java
index 9dc26a7..4729f6f 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessInvoiceItemMapper.java
@@ -35,25 +35,26 @@ public class BusinessInvoiceItemMapper extends MapperBase implements ResultSetMa
 
     @Override
     public BusinessInvoiceItem map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
-        final UUID itemId = UUID.fromString(r.getString(1));
-        final DateTime createdDate = new DateTime(r.getLong(2), DateTimeZone.UTC);
-        final DateTime updatedDate = new DateTime(r.getLong(3), DateTimeZone.UTC);
-        final UUID invoiceId = UUID.fromString(r.getString(4));
-        final String itemType = r.getString(5);
-        final String externalKey = r.getString(6);
-        final String productName = r.getString(7);
-        final String productType = r.getString(8);
-        final String productCategory = r.getString(9);
-        final String slug = r.getString(10);
-        final String phase = r.getString(11);
-        final String billingPeriod = r.getString(12);
+        final UUID itemId = UUID.fromString(r.getString("item_id"));
+        final UUID linkedItemId = UUID.fromString(r.getString("linked_item_id"));
+        final DateTime createdDate = new DateTime(r.getLong("created_date"), DateTimeZone.UTC);
+        final DateTime updatedDate = new DateTime(r.getLong("updated_date"), DateTimeZone.UTC);
+        final UUID invoiceId = UUID.fromString(r.getString("invoice_id"));
+        final String itemType = r.getString("item_type");
+        final String externalKey = r.getString("external_key");
+        final String productName = r.getString("product_name");
+        final String productType = r.getString("product_type");
+        final String productCategory = r.getString("product_category");
+        final String slug = r.getString("slug");
+        final String phase = r.getString("phase");
+        final String billingPeriod = r.getString("billing_period");
         final LocalDate startDate = getDate(r, "start_date");
         final LocalDate endDate = getDate(r, "end_date");
-        final BigDecimal amount = BigDecimal.valueOf(r.getDouble(15));
-        final Currency currency = Currency.valueOf(r.getString(16));
+        final BigDecimal amount = BigDecimal.valueOf(r.getDouble("amount"));
+        final Currency currency = Currency.valueOf(r.getString("currency"));
 
         return new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency, endDate, externalKey, invoiceId,
-                                       itemId, itemType, phase, productCategory, productName, productType, slug,
+                                       itemId, linkedItemId, itemType, phase, productCategory, productName, productType, slug,
                                        startDate, updatedDate);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
index bdbd945..4664c45 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessInvoiceItem.java
@@ -49,12 +49,13 @@ public class BusinessInvoiceItem {
     private final LocalDate endDate;
     private final BigDecimal amount;
     private final Currency currency;
+    private final UUID linkedItemId;
 
     public BusinessInvoiceItem(final BigDecimal amount, @Nullable final String billingPeriod, final DateTime createdDate,
                                final Currency currency, final LocalDate endDate, final String externalKey,
-                               final UUID invoiceId, final UUID itemId, final String itemType, @Nullable final String phase,
-                               @Nullable final String productCategory, @Nullable final String productName, @Nullable final String productType,
-                               @Nullable final String slug, final LocalDate startDate, final DateTime updatedDate) {
+                               final UUID invoiceId, final UUID itemId, @Nullable final UUID linkedItemId, final String itemType,
+                               @Nullable final String phase, @Nullable final String productCategory, @Nullable final String productName,
+                               @Nullable final String productType, @Nullable final String slug, final LocalDate startDate, final DateTime updatedDate) {
         this.amount = amount;
         this.billingPeriod = billingPeriod;
         this.createdDate = createdDate;
@@ -63,6 +64,7 @@ public class BusinessInvoiceItem {
         this.externalKey = externalKey;
         this.invoiceId = invoiceId;
         this.itemId = itemId;
+        this.linkedItemId = linkedItemId;
         this.itemType = itemType;
         this.phase = phase;
         this.productCategory = productCategory;
@@ -75,7 +77,7 @@ public class BusinessInvoiceItem {
 
     public BusinessInvoiceItem(@Nullable final String externalKey, final InvoiceItem invoiceItem, @Nullable final Plan plan, @Nullable final PlanPhase planPhase) {
         this(invoiceItem.getAmount(), planPhase != null ? planPhase.getBillingPeriod().toString() : null, new DateTime(DateTimeZone.UTC), invoiceItem.getCurrency(),
-             invoiceItem.getEndDate(), externalKey, invoiceItem.getInvoiceId(), invoiceItem.getId(), invoiceItem.getInvoiceItemType().toString(),
+             invoiceItem.getEndDate(), externalKey, invoiceItem.getInvoiceId(), invoiceItem.getId(), invoiceItem.getLinkedItemId(), invoiceItem.getInvoiceItemType().toString(),
              planPhase != null ? planPhase.getPhaseType().toString() : null, plan != null ? plan.getProduct().getCategory().toString() : null,
              plan != null ? plan.getProduct().getName() : null, plan != null ? plan.getProduct().getCatalogName() : null,
              planPhase != null ? planPhase.getName() : null, invoiceItem.getStartDate(), new DateTime(DateTimeZone.UTC));
@@ -117,6 +119,10 @@ public class BusinessInvoiceItem {
         return itemType;
     }
 
+    public UUID getLinkedItemId() {
+        return linkedItemId;
+    }
+
     public String getPhase() {
         return phase;
     }
@@ -165,6 +171,7 @@ public class BusinessInvoiceItem {
         sb.append(", startDate=").append(startDate);
         sb.append(", endDate=").append(endDate);
         sb.append(", currency=").append(currency);
+        sb.append(", linkedItemId=").append(linkedItemId);
         sb.append('}');
         return sb.toString();
     }
@@ -207,6 +214,9 @@ public class BusinessInvoiceItem {
         if (itemType != null ? !itemType.equals(that.itemType) : that.itemType != null) {
             return false;
         }
+        if (linkedItemId != null ? !linkedItemId.equals(that.linkedItemId) : that.linkedItemId != null) {
+            return false;
+        }
         if (phase != null ? !phase.equals(that.phase) : that.phase != null) {
             return false;
         }
@@ -250,6 +260,7 @@ public class BusinessInvoiceItem {
         result = 31 * result + (endDate != null ? endDate.hashCode() : 0);
         result = 31 * result + (amount != null ? amount.hashCode() : 0);
         result = 31 * result + (currency != null ? currency.hashCode() : 0);
+        result = 31 * result + (linkedItemId != null ? linkedItemId.hashCode() : 0);
         return result;
     }
 }
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg
index 2d55e1f..b987105 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessInvoiceItemSqlDao.sql.stg
@@ -18,6 +18,7 @@ select
 , end_date
 , amount
 , currency
+, linked_item_id
 from bii
 where item_id = :item_id
 limit 1
@@ -42,6 +43,7 @@ select
 , end_date
 , amount
 , currency
+, linked_item_id
 from bii
 where invoice_id = :invoice_id
 order by created_date asc
@@ -66,6 +68,7 @@ select
 , end_date
 , amount
 , currency
+, linked_item_id
 from bii
 where external_key = :external_key
 order by created_date asc
@@ -90,6 +93,7 @@ insert into bii (
 , end_date
 , amount
 , currency
+, linked_item_id
 ) values (
   :item_id
 , :created_date
@@ -107,6 +111,7 @@ insert into bii (
 , :end_date
 , :amount
 , :currency
+, :linked_item_id
 );
 >>
 
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 fd6d6ae..fa6bfab 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -102,6 +102,7 @@ create table bii (
 , end_date date default null
 , amount numeric(10, 4) default 0
 , currency char(50) default null
+, linked_item_id char(36) default null
 , account_record_id int(11) unsigned default null
 , tenant_record_id int(11) unsigned default null
 , primary key(record_id)
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java
index 4eb0014..9c1db5d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessInvoiceItemSqlDao.java
@@ -115,6 +115,7 @@ public class TestBusinessInvoiceItemSqlDao extends AnalyticsTestSuiteWithEmbedde
         final Currency currency = Currency.AUD;
         final LocalDate endDate = clock.getUTCToday();
         final UUID itemId = UUID.randomUUID();
+        final UUID linkedItemId = UUID.randomUUID();
         final String itemType = UUID.randomUUID().toString().substring(0, 20);
         final String phase = UUID.randomUUID().toString().substring(0, 20);
         final String productCategory = UUID.randomUUID().toString().substring(0, 20);
@@ -124,7 +125,7 @@ public class TestBusinessInvoiceItemSqlDao extends AnalyticsTestSuiteWithEmbedde
         final LocalDate startDate = clock.getUTCToday();
         final DateTime updatedDate = clock.getUTCNow();
 
-        return new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency, endDate, externalKey, invoiceId,
-                                       itemId, itemType, phase, productCategory, productName, productType, slug, startDate, updatedDate);
+        return new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency, endDate, externalKey, invoiceId, itemId,
+                                       linkedItemId, itemType, phase, productCategory, productName, productType, slug, startDate, updatedDate);
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java
index eb7100e..4e43290 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessInvoiceItem.java
@@ -43,6 +43,7 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
         final String externalKey = UUID.randomUUID().toString();
         final UUID invoiceId = UUID.randomUUID();
         final UUID itemId = UUID.randomUUID();
+        final UUID linkedItemId = UUID.randomUUID();
         final String itemType = UUID.randomUUID().toString();
         final String phase = UUID.randomUUID().toString();
         final String productCategory = UUID.randomUUID().toString();
@@ -52,8 +53,8 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
         final LocalDate startDate = clock.getUTCToday();
         final DateTime updatedDate = clock.getUTCNow();
         final BusinessInvoiceItem invoiceItem = new BusinessInvoiceItem(amount, billingPeriod, createdDate, currency,
-                                                                        endDate, externalKey, invoiceId, itemId, itemType,
-                                                                        phase, productCategory, productName, productType,
+                                                                        endDate, externalKey, invoiceId, itemId, linkedItemId,
+                                                                        itemType, phase, productCategory, productName, productType,
                                                                         slug, startDate, updatedDate);
         Assert.assertSame(invoiceItem, invoiceItem);
         Assert.assertEquals(invoiceItem, invoiceItem);
@@ -67,6 +68,7 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
         Assert.assertEquals(invoiceItem.getInvoiceId(), invoiceId);
         Assert.assertEquals(invoiceItem.getItemId(), itemId);
         Assert.assertEquals(invoiceItem.getItemType(), itemType);
+        Assert.assertEquals(invoiceItem.getLinkedItemId(), linkedItemId);
         Assert.assertEquals(invoiceItem.getPhase(), phase);
         Assert.assertEquals(invoiceItem.getProductCategory(), productCategory);
         Assert.assertEquals(invoiceItem.getProductName(), productName);
@@ -76,7 +78,7 @@ public class TestBusinessInvoiceItem extends AnalyticsTestSuite {
         Assert.assertEquals(invoiceItem.getUpdatedDate(), updatedDate);
 
         final BusinessInvoiceItem otherInvoiceItem = new BusinessInvoiceItem(null, null, createdDate, null, null, null, null, itemId,
-                                                                             null, null, null, null, null, null, null, null);
+                                                                             linkedItemId, null, null, null, null, null, null, null, null);
         Assert.assertFalse(invoiceItem.equals(otherInvoiceItem));
     }
 }