killbill-memoizeit

analytics: add account_key in bos, bst_tags and bst_fields Because

7/3/2012 6:27:10 PM

Changes

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
index 8aa4343..49c4b2b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
@@ -122,13 +122,22 @@ public class BusinessTagRecorder {
             return;
         }
 
+        final Account account;
+        try {
+            account = accountApi.getAccountById(bundle.getAccountId());
+        } catch (AccountApiException e) {
+            log.warn("Ignoring tag addition of {} for bundle id {} and account id {} (account does not exist)", new Object[]{name, objectId.toString(), bundle.getAccountId()});
+            return;
+        }
+
         /*
          * Note: we store tags associated to bundles, not to subscriptions.
          * Subscriptions are in the core of killbill and not exposed in Analytics to avoid a hard dependency
          * (i.e. dashboards should not rely on killbill ids).
          */
+        final String accountKey = account.getExternalKey();
         final String externalKey = bundle.getKey();
-        subscriptionTransitionTagSqlDao.addTag(externalKey, name);
+        subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey, name);
     }
 
     private void tagRemovedForBundle(final UUID objectId, final String name) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java
index eb1bd9d..1e0575e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java
@@ -38,6 +38,7 @@ public @interface BusinessOverdueStatusBinder {
         public Binder build(final Annotation annotation) {
             return new Binder<BusinessOverdueStatusBinder, BusinessOverdueStatus>() {
                 public void bind(final SQLStatement q, final BusinessOverdueStatusBinder bind, final BusinessOverdueStatus overdueStatus) {
+                    q.bind("account_key", overdueStatus.getAccountKey());
                     q.bind("external_key", overdueStatus.getExternalKey());
                     q.bind("status", overdueStatus.getStatus());
 
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java
index dcd6bf2..819c9ab 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java
@@ -30,10 +30,11 @@ public class BusinessOverdueStatusMapper implements ResultSetMapper<BusinessOver
     @Override
     public BusinessOverdueStatus map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
         final String externalKey = r.getString(1);
-        final String status = r.getString(2);
-        final DateTime startDate = new DateTime(r.getLong(3), DateTimeZone.UTC);
-        final DateTime endDate = new DateTime(r.getLong(4), DateTimeZone.UTC);
+        final String accountKey = r.getString(2);
+        final String status = r.getString(3);
+        final DateTime startDate = new DateTime(r.getLong(4), DateTimeZone.UTC);
+        final DateTime endDate = new DateTime(r.getLong(5), DateTimeZone.UTC);
 
-        return new BusinessOverdueStatus(endDate, externalKey, startDate, status);
+        return new BusinessOverdueStatus(accountKey, endDate, externalKey, startDate, status);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java
index 68ef0e2..53cfef7 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java
@@ -27,6 +27,10 @@ import com.ning.billing.analytics.model.BusinessSubscriptionTransitionField;
 public class BusinessSubscriptionTransitionFieldMapper implements ResultSetMapper<BusinessSubscriptionTransitionField> {
     @Override
     public BusinessSubscriptionTransitionField map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
-        return new BusinessSubscriptionTransitionField(r.getString(1), r.getString(2), r.getString(3));
+        final String externalKey = r.getString(1);
+        final String accountKey = r.getString(2);
+        final String name = r.getString(3);
+        final String value = r.getString(4);
+        return new BusinessSubscriptionTransitionField(accountKey, externalKey, name, value);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java
index d22076e..a316939 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java
@@ -33,7 +33,8 @@ public interface BusinessSubscriptionTransitionFieldSqlDao {
     List<BusinessSubscriptionTransitionField> getFieldsForBusinessSubscriptionTransition(@Bind("external_key") final String externalKey);
 
     @SqlUpdate
-    int addField(@Bind("external_key") final String externalKey, @Bind("name") final String name, @Bind("value") final String value);
+    int addField(@Bind("account_key") final String accountKey, @Bind("external_key") final String externalKey,
+                 @Bind("name") final String name, @Bind("value") final String value);
 
     @SqlUpdate
     int removeField(@Bind("external_key") final String externalKey, @Bind("name") final String name);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java
index 36f7631..47a7be9 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java
@@ -27,6 +27,9 @@ import com.ning.billing.analytics.model.BusinessSubscriptionTransitionTag;
 public class BusinessSubscriptionTransitionTagMapper implements ResultSetMapper<BusinessSubscriptionTransitionTag> {
     @Override
     public BusinessSubscriptionTransitionTag map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
-        return new BusinessSubscriptionTransitionTag(r.getString(1), r.getString(2));
+        final String externalKey = r.getString(1);
+        final String accountKey = r.getString(2);
+        final String name = r.getString(3);
+        return new BusinessSubscriptionTransitionTag(accountKey, externalKey, name);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java
index c073a53..094af9a 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java
@@ -33,7 +33,7 @@ public interface BusinessSubscriptionTransitionTagSqlDao {
     List<BusinessSubscriptionTransitionTag> getTagsForBusinessSubscriptionTransition(@Bind("external_key") final String externalKey);
 
     @SqlUpdate
-    int addTag(@Bind("external_key") final String externalKey, @Bind("name") final String name);
+    int addTag(@Bind("account_key") final String accountKey, @Bind("external_key") final String externalKey, @Bind("name") final String name);
 
     @SqlUpdate
     int removeTag(@Bind("external_key") final String externalKey, @Bind("name") final String name);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java
index dd8a310..e76a02e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java
@@ -19,18 +19,25 @@ package com.ning.billing.analytics.model;
 import org.joda.time.DateTime;
 
 public class BusinessOverdueStatus {
+    private final String accountKey;
     private final String externalKey;
     private final String status;
     private final DateTime startDate;
     private final DateTime endDate;
 
-    public BusinessOverdueStatus(final DateTime endDate, final String externalKey, final DateTime startDate, final String status) {
+    public BusinessOverdueStatus(final String accountKey, final DateTime endDate, final String externalKey,
+                                 final DateTime startDate, final String status) {
+        this.accountKey = accountKey;
         this.endDate = endDate;
         this.externalKey = externalKey;
         this.startDate = startDate;
         this.status = status;
     }
 
+    public String getAccountKey() {
+        return accountKey;
+    }
+
     public DateTime getEndDate() {
         return endDate;
     }
@@ -51,7 +58,8 @@ public class BusinessOverdueStatus {
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessOverdueStatus");
-        sb.append("{endDate=").append(endDate);
+        sb.append("{accountKey=").append(accountKey);
+        sb.append(", endDate='").append(endDate).append('\'');
         sb.append(", externalKey='").append(externalKey).append('\'');
         sb.append(", status='").append(status).append('\'');
         sb.append(", startDate=").append(startDate);
@@ -70,6 +78,9 @@ public class BusinessOverdueStatus {
 
         final BusinessOverdueStatus that = (BusinessOverdueStatus) o;
 
+        if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
+            return false;
+        }
         if (endDate != null ? !endDate.equals(that.endDate) : that.endDate != null) {
             return false;
         }
@@ -88,7 +99,8 @@ public class BusinessOverdueStatus {
 
     @Override
     public int hashCode() {
-        int result = externalKey != null ? externalKey.hashCode() : 0;
+        int result = accountKey != null ? accountKey.hashCode() : 0;
+        result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
         result = 31 * result + (status != null ? status.hashCode() : 0);
         result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
         result = 31 * result + (endDate != null ? endDate.hashCode() : 0);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java
index 4fe470a..f54e39e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java
@@ -17,13 +17,19 @@
 package com.ning.billing.analytics.model;
 
 public class BusinessSubscriptionTransitionField extends BusinessField {
+    private final String accountKey;
     private final String externalKey;
 
-    public BusinessSubscriptionTransitionField(final String externalKey, final String name, final String value) {
+    public BusinessSubscriptionTransitionField(final String accountKey, final String externalKey, final String name, final String value) {
         super(name, value);
+        this.accountKey = accountKey;
         this.externalKey = externalKey;
     }
 
+    public String getAccountKey() {
+        return accountKey;
+    }
+
     public String getExternalKey() {
         return externalKey;
     }
@@ -32,7 +38,8 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessSubscriptionTransitionField");
-        sb.append("{externalKey='").append(externalKey).append('\'');
+        sb.append("{accountKey='").append(accountKey).append('\'');
+        sb.append(", externalKey='").append(externalKey).append('\'');
         sb.append(", name='").append(getName()).append('\'');
         sb.append(", value='").append(getValue()).append('\'');
         sb.append('}');
@@ -50,6 +57,9 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
 
         final BusinessSubscriptionTransitionField that = (BusinessSubscriptionTransitionField) o;
 
+        if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
+            return false;
+        }
         if (externalKey != null ? !externalKey.equals(that.externalKey) : that.externalKey != null) {
             return false;
         }
@@ -65,7 +75,8 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
 
     @Override
     public int hashCode() {
-        int result = externalKey != null ? externalKey.hashCode() : 0;
+        int result = accountKey != null ? accountKey.hashCode() : 0;
+        result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
         result = 31 * result + (getName() != null ? getName().hashCode() : 0);
         result = 31 * result + (getValue() != null ? getValue().hashCode() : 0);
         return result;
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java
index eefa65c..0539461 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java
@@ -17,13 +17,19 @@
 package com.ning.billing.analytics.model;
 
 public class BusinessSubscriptionTransitionTag extends BusinessTag {
+    private final String accountKey;
     private final String externalKey;
 
-    public BusinessSubscriptionTransitionTag(final String externalKey, final String name) {
+    public BusinessSubscriptionTransitionTag(final String accountKey, final String externalKey, final String name) {
         super(name);
+        this.accountKey = accountKey;
         this.externalKey = externalKey;
     }
 
+    public String getAccountKey() {
+        return accountKey;
+    }
+
     public String getExternalKey() {
         return externalKey;
     }
@@ -32,7 +38,8 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessSubscriptionTransitionTag");
-        sb.append("{externalKey='").append(externalKey).append('\'');
+        sb.append("{accountKey='").append(accountKey).append('\'');
+        sb.append(", externalKey='").append(externalKey).append('\'');
         sb.append(", name='").append(getName()).append('\'');
         sb.append('}');
         return sb.toString();
@@ -49,6 +56,9 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
 
         final BusinessSubscriptionTransitionTag that = (BusinessSubscriptionTransitionTag) o;
 
+        if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
+            return false;
+        }
         if (externalKey != null ? !externalKey.equals(that.externalKey) : that.externalKey != null) {
             return false;
         }
@@ -61,7 +71,8 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
 
     @Override
     public int hashCode() {
-        int result = externalKey != null ? externalKey.hashCode() : 0;
+        int result = accountKey != null ? accountKey.hashCode() : 0;
+        result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
         result = 31 * result + (getName() != null ? getName().hashCode() : 0);
         return result;
     }
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg
index d412125..c1c7140 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg
@@ -3,6 +3,7 @@ group BusinessOverdueStatus;
 getOverdueStatusesForBundle(external_key) ::= <<
 select
   external_key
+, account_key
 , status
 , start_date
 , end_date
@@ -15,11 +16,13 @@ order by start_date asc
 createOverdueStatus() ::= <<
 insert into bos (
   external_key
+, account_key
 , status
 , start_date
 , end_date
 ) values (
   :external_key
+, :account_key
 , :status
 , :start_date
 , :end_date
@@ -28,4 +31,4 @@ insert into bos (
 
 test() ::= <<
 select 1 from bos;
->>
\ No newline at end of file
+>>
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg
index 522e6d7..0330ac0 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg
@@ -3,6 +3,7 @@ group BusinessSubscriptionTransitionField;
 getFieldsForBusinessSubscriptionTransition(external_key) ::=<<
 select
   external_key
+, account_key
 , name
 , value
 from bst_fields
@@ -13,10 +14,12 @@ where external_key = :external_key
 addField(external_key, name, value) ::=<<
 insert into bst_fields (
   external_key
+, account_key
 , name
 , value
 ) values (
   :external_key
+, :account_key
 , :name
 , :value
 );
@@ -28,4 +31,4 @@ delete from bst_fields where external_key = :external_key and name = :name;
 
 test() ::= <<
 select 1 from bst_fields;
->>
\ No newline at end of file
+>>
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg
index 3d2255f..dcd99aa 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg
@@ -3,6 +3,7 @@ group BusinessSubscriptionTransitionTag;
 getTagsForBusinessSubscriptionTransition(external_key) ::=<<
 select
   external_key
+, account_key
 , name
 from bst_tags
 where external_key = :external_key
@@ -12,9 +13,11 @@ where external_key = :external_key
 addTag(external_key, name) ::=<<
 insert into bst_tags (
   external_key
+, account_key
 , name
 ) values (
   :external_key
+, :account_key
 , :name
 );
 >>
@@ -25,4 +28,4 @@ delete from bst_tags where external_key = :external_key and name = :name;
 
 test() ::= <<
 select 1 from bst_tags;
->>
\ No newline at end of file
+>>
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 80c1be6..c7f9d1b 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -126,6 +126,7 @@ drop table if exists bos;
 create table bos (
   record_id int(11) unsigned not null auto_increment
 , external_key varchar(50) not null comment 'Bundle external key'
+, account_key varchar(50) not null comment 'Account external key'
 , status varchar(50) not null
 , start_date bigint default null
 , end_date bigint default null
@@ -154,6 +155,7 @@ drop table if exists bst_tags;
 create table bst_tags (
   record_id int(11) unsigned not null auto_increment
 , external_key varchar(50) not null comment 'Bundle external key'
+, account_key varchar(50) not null comment 'Account external key'
 , name varchar(20) not null
 , primary key(record_id)
 ) engine=innodb comment 'Tags associated to bundles';
@@ -162,6 +164,7 @@ drop table if exists bst_fields;
 create table bst_fields (
   record_id int(11) unsigned not null auto_increment
 , external_key varchar(50) not null comment 'Bundle external key'
+, account_key varchar(50) not null comment 'Account external key'
 , name varchar(30) not null
 , value varchar(255) default null
 , primary key(record_id)
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java
index c16ab3c..f21d3af 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java
@@ -39,8 +39,9 @@ public class TestBusinessOverdueStatusSqlDao extends TestWithEmbeddedDB {
 
     @Test(groups = "slow")
     public void testCreate() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey = UUID.randomUUID().toString();
-        final BusinessOverdueStatus firstOverdueStatus = createOverdueStatus(externalKey);
+        final BusinessOverdueStatus firstOverdueStatus = createOverdueStatus(accountKey, externalKey);
 
         // Verify initial state
         Assert.assertEquals(overdueStatusSqlDao.getOverdueStatusesForBundle(externalKey).size(), 0);
@@ -53,7 +54,7 @@ public class TestBusinessOverdueStatusSqlDao extends TestWithEmbeddedDB {
         Assert.assertEquals(overdueStatusSqlDao.getOverdueStatusesForBundle(externalKey).get(0), firstOverdueStatus);
 
         // Add a second one
-        final BusinessOverdueStatus secondOverdueStatus = createOverdueStatus(externalKey);
+        final BusinessOverdueStatus secondOverdueStatus = createOverdueStatus(accountKey, externalKey);
         Assert.assertEquals(overdueStatusSqlDao.createOverdueStatus(secondOverdueStatus), 1);
 
         // Retrieve both
@@ -72,11 +73,11 @@ public class TestBusinessOverdueStatusSqlDao extends TestWithEmbeddedDB {
         }
     }
 
-    private BusinessOverdueStatus createOverdueStatus(final String externalKey) {
+    private BusinessOverdueStatus createOverdueStatus(final String accountKey, final String externalKey) {
         final DateTime endDate = new DateTime(DateTimeZone.UTC);
         final DateTime startDate = new DateTime(DateTimeZone.UTC);
         final String status = UUID.randomUUID().toString();
 
-        return new BusinessOverdueStatus(endDate, externalKey, startDate, status);
+        return new BusinessOverdueStatus(accountKey, endDate, externalKey, startDate, status);
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java
index 5233229..eb0d374 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java
@@ -38,6 +38,7 @@ public class TestBusinessSubscriptionTransitionFieldSqlDao extends TestWithEmbed
 
     @Test(groups = "slow")
     public void testCRUD() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey = UUID.randomUUID().toString();
         final String name = UUID.randomUUID().toString().substring(0, 30);
         final String value = UUID.randomUUID().toString();
@@ -47,7 +48,7 @@ public class TestBusinessSubscriptionTransitionFieldSqlDao extends TestWithEmbed
         Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(externalKey, name), 0);
 
         // Add an entry
-        Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(externalKey, name, value), 1);
+        Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, externalKey, name, value), 1);
         final List<BusinessSubscriptionTransitionField> fieldsForBusinessSubscriptionTransition = subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey);
         Assert.assertEquals(fieldsForBusinessSubscriptionTransition.size(), 1);
 
@@ -64,14 +65,15 @@ public class TestBusinessSubscriptionTransitionFieldSqlDao extends TestWithEmbed
 
     @Test(groups = "slow")
     public void testSegmentation() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey1 = UUID.randomUUID().toString();
         final String name1 = UUID.randomUUID().toString().substring(0, 30);
         final String externalKey2 = UUID.randomUUID().toString();
         final String name2 = UUID.randomUUID().toString().substring(0, 30);
 
         // Add a field to both transitions
-        Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(externalKey1, name1, UUID.randomUUID().toString()), 1);
-        Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(externalKey2, name2, UUID.randomUUID().toString()), 1);
+        Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, externalKey1, name1, UUID.randomUUID().toString()), 1);
+        Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, externalKey2, name2, UUID.randomUUID().toString()), 1);
 
         Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey1).size(), 1);
         Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java
index 8b4740f..7b8f1db 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java
@@ -38,6 +38,7 @@ public class TestBusinessSubscriptionTransitionTagSqlDao extends TestWithEmbedde
 
     @Test(groups = "slow")
     public void testCRUD() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey = UUID.randomUUID().toString();
         final String name = UUID.randomUUID().toString().substring(0, 20);
 
@@ -46,7 +47,7 @@ public class TestBusinessSubscriptionTransitionTagSqlDao extends TestWithEmbedde
         Assert.assertEquals(subscriptionTransitionTagSqlDao.removeTag(externalKey, name), 0);
 
         // Add an entry
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(externalKey, name), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey, name), 1);
         final List<BusinessSubscriptionTransitionTag> tagsForBusinessSubscriptionTransition = subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey);
         Assert.assertEquals(tagsForBusinessSubscriptionTransition.size(), 1);
 
@@ -62,14 +63,15 @@ public class TestBusinessSubscriptionTransitionTagSqlDao extends TestWithEmbedde
 
     @Test(groups = "slow")
     public void testSegmentation() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey1 = UUID.randomUUID().toString();
         final String name1 = UUID.randomUUID().toString().substring(0, 20);
         final String externalKey2 = UUID.randomUUID().toString();
         final String name2 = UUID.randomUUID().toString().substring(0, 20);
 
         // Add a tag to both transitions
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(externalKey1, name1), 1);
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(externalKey2, name2), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey1, name1), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey2, name2), 1);
 
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey1).size(), 1);
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java
index b92ee12..6edcbf9 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java
@@ -28,21 +28,26 @@ import com.ning.billing.analytics.AnalyticsTestSuite;
 public class TestBusinessOverdueStatus extends AnalyticsTestSuite {
     @Test(groups = "fast")
     public void testEquals() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final DateTime endDate = new DateTime(DateTimeZone.UTC);
         final String externalKey = UUID.randomUUID().toString();
         final DateTime startDate = new DateTime(DateTimeZone.UTC);
         final String status = UUID.randomUUID().toString();
-        final BusinessOverdueStatus overdueStatus = new BusinessOverdueStatus(endDate, externalKey, startDate, status);
+        final BusinessOverdueStatus overdueStatus = new BusinessOverdueStatus(accountKey, endDate, externalKey, startDate, status);
         Assert.assertSame(overdueStatus, overdueStatus);
         Assert.assertEquals(overdueStatus, overdueStatus);
         Assert.assertTrue(overdueStatus.equals(overdueStatus));
+        Assert.assertEquals(overdueStatus.getAccountKey(), accountKey);
         Assert.assertEquals(overdueStatus.getEndDate(), endDate);
         Assert.assertEquals(overdueStatus.getExternalKey(), externalKey);
         Assert.assertEquals(overdueStatus.getStartDate(), startDate);
         Assert.assertEquals(overdueStatus.getStatus(), status);
 
-        final BusinessOverdueStatus otherOverdueStatus = new BusinessOverdueStatus(new DateTime(DateTimeZone.UTC), UUID.randomUUID().toString(),
-                                                                                   new DateTime(DateTimeZone.UTC), UUID.randomUUID().toString());
+        final BusinessOverdueStatus otherOverdueStatus = new BusinessOverdueStatus(UUID.randomUUID().toString(),
+                                                                                   new DateTime(DateTimeZone.UTC),
+                                                                                   UUID.randomUUID().toString(),
+                                                                                   new DateTime(DateTimeZone.UTC),
+                                                                                   UUID.randomUUID().toString());
         Assert.assertFalse(overdueStatus.equals(otherOverdueStatus));
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java
index 5a1e31b..af9122e 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java
@@ -26,21 +26,25 @@ import com.ning.billing.analytics.AnalyticsTestSuite;
 public class TestBusinessSubscriptionTransitionField extends AnalyticsTestSuite {
     @Test(groups = "fast")
     public void testEquals() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey = UUID.randomUUID().toString();
         final String name = UUID.randomUUID().toString();
         final String value = UUID.randomUUID().toString();
-        final BusinessSubscriptionTransitionField subscriptionTransitionField = new BusinessSubscriptionTransitionField(externalKey,
+        final BusinessSubscriptionTransitionField subscriptionTransitionField = new BusinessSubscriptionTransitionField(accountKey,
+                                                                                                                        externalKey,
                                                                                                                         name,
                                                                                                                         value);
         Assert.assertSame(subscriptionTransitionField, subscriptionTransitionField);
         Assert.assertEquals(subscriptionTransitionField, subscriptionTransitionField);
         Assert.assertTrue(subscriptionTransitionField.equals(subscriptionTransitionField));
+        Assert.assertEquals(subscriptionTransitionField.getAccountKey(), accountKey);
         Assert.assertEquals(subscriptionTransitionField.getExternalKey(), externalKey);
         Assert.assertEquals(subscriptionTransitionField.getName(), name);
         Assert.assertEquals(subscriptionTransitionField.getValue(), value);
 
         final BusinessSubscriptionTransitionField otherSubscriptionField = new BusinessSubscriptionTransitionField(UUID.randomUUID().toString(),
                                                                                                                    UUID.randomUUID().toString(),
+                                                                                                                   UUID.randomUUID().toString(),
                                                                                                                    UUID.randomUUID().toString());
         Assert.assertFalse(subscriptionTransitionField.equals(otherSubscriptionField));
     }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java
index b5a40d1..9d079b4 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java
@@ -26,16 +26,22 @@ import com.ning.billing.analytics.AnalyticsTestSuite;
 public class TestBusinessSubscriptionTransitionTag extends AnalyticsTestSuite {
     @Test(groups = "fast")
     public void testEquals() throws Exception {
+        final String accountKey = UUID.randomUUID().toString();
         final String externalKey = UUID.randomUUID().toString();
         final String name = UUID.randomUUID().toString();
-        final BusinessSubscriptionTransitionTag subscriptionTransitionTag = new BusinessSubscriptionTransitionTag(externalKey, name);
+        final BusinessSubscriptionTransitionTag subscriptionTransitionTag = new BusinessSubscriptionTransitionTag(accountKey,
+                                                                                                                  externalKey,
+                                                                                                                  name);
         Assert.assertSame(subscriptionTransitionTag, subscriptionTransitionTag);
         Assert.assertEquals(subscriptionTransitionTag, subscriptionTransitionTag);
         Assert.assertTrue(subscriptionTransitionTag.equals(subscriptionTransitionTag));
+        Assert.assertEquals(subscriptionTransitionTag.getAccountKey(), accountKey);
         Assert.assertEquals(subscriptionTransitionTag.getExternalKey(), externalKey);
         Assert.assertEquals(subscriptionTransitionTag.getName(), name);
 
-        final BusinessSubscriptionTransitionTag otherTransitionTag = new BusinessSubscriptionTransitionTag(UUID.randomUUID().toString(), UUID.randomUUID().toString());
+        final BusinessSubscriptionTransitionTag otherTransitionTag = new BusinessSubscriptionTransitionTag(UUID.randomUUID().toString(),
+                                                                                                           UUID.randomUUID().toString(),
+                                                                                                           UUID.randomUUID().toString());
         Assert.assertFalse(subscriptionTransitionTag.equals(otherTransitionTag));
     }
 }