killbill-aplcache

Added migration constructor to Default account and added comments

1/25/2012 12:06:18 AM

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
index 0c22000..fd97eec 100644
--- a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
@@ -53,12 +53,27 @@ public class DefaultAccount extends CustomizableEntityBase implements Account {
 	private final DateTime createdDate;
 	private final DateTime updatedDate;
 
-	public DefaultAccount(final AccountData data) {
-		this(UUID.randomUUID(), data, null, null);
+	/**
+	 * This call is used to create a new account
+	 * @param data
+	 * @param createdDate
+	 */
+	public DefaultAccount(final AccountData data, DateTime createdDate) {
+		this(UUID.randomUUID(), data.getExternalKey(), data.getEmail(), data.getName(), data.getFirstNameLength(),
+				data.getCurrency(), data.getBillCycleDay(), data.getPaymentProviderName(),
+				data.getTimeZone(), data.getLocale(),
+				data.getAddress1(), data.getAddress2(), data.getCompanyName(),
+				data.getCity(), data.getStateOrProvince(), data.getCountry(),
+				data.getPostalCode(), data.getPhone(), createdDate, createdDate);
 	}
 
-	public DefaultAccount(final UUID id, final AccountData data, DateTime createdDate, DateTime updatedDate) {
-		this(id, data.getExternalKey(), data.getEmail(), data.getName(), data.getFirstNameLength(),
+	/**
+	 * This call is used to migrate an account
+	 * @param data
+	 * @param createdDate
+	 */
+	public DefaultAccount(final AccountData data, DateTime createdDate,  DateTime updatedDate) {
+		this(UUID.randomUUID(), data.getExternalKey(), data.getEmail(), data.getName(), data.getFirstNameLength(),
 				data.getCurrency(), data.getBillCycleDay(), data.getPaymentProviderName(),
 				data.getTimeZone(), data.getLocale(),
 				data.getAddress1(), data.getAddress2(), data.getCompanyName(),
@@ -66,6 +81,45 @@ public class DefaultAccount extends CustomizableEntityBase implements Account {
 				data.getPostalCode(), data.getPhone(), createdDate, updatedDate);
 	}
 
+	
+	/**
+	 * This call is used to update an existing account
+	 *  
+	 * @param id
+	 * @param data
+	 */
+	public DefaultAccount(final UUID id, final AccountData data) {
+		this(id, data.getExternalKey(), data.getEmail(), data.getName(), data.getFirstNameLength(),
+				data.getCurrency(), data.getBillCycleDay(), data.getPaymentProviderName(),
+				data.getTimeZone(), data.getLocale(),
+				data.getAddress1(), data.getAddress2(), data.getCompanyName(),
+				data.getCity(), data.getStateOrProvince(), data.getCountry(),
+				data.getPostalCode(), data.getPhone(), null, null);
+	}
+
+	/**
+	 * This call is used for testing 
+	 * @param id
+	 * @param externalKey
+	 * @param email
+	 * @param name
+	 * @param firstNameLength
+	 * @param currency
+	 * @param billCycleDay
+	 * @param paymentProviderName
+	 * @param timeZone
+	 * @param locale
+	 * @param address1
+	 * @param address2
+	 * @param companyName
+	 * @param city
+	 * @param stateOrProvince
+	 * @param country
+	 * @param postalCode
+	 * @param phone
+	 * @param createdDate
+	 * @param updatedDate
+	 */
 	public DefaultAccount(final UUID id, final String externalKey, final String email, final String name, final int firstNameLength,
 			final Currency currency, final int billCycleDay, final String paymentProviderName,
 			final DateTimeZone timeZone, final String locale,
@@ -91,8 +145,8 @@ public class DefaultAccount extends CustomizableEntityBase implements Account {
 		this.postalCode = postalCode;
 		this.country = country;
 		this.phone = phone;
-		this.createdDate = createdDate == null ? new DateTime(DateTimeZone.UTC) : createdDate;
-		this.updatedDate = updatedDate == null ? new DateTime(DateTimeZone.UTC) : updatedDate;
+		this.createdDate = createdDate == null ? new DateTime(DateTimeZone.UTC) : createdDate; // This is a fallback, we are only expecting these to be set to null 
+		this.updatedDate = updatedDate == null ? new DateTime(DateTimeZone.UTC) : updatedDate; // in the case that the account is being updated. In which case the values are ignored anyway
 		this.tags = new DefaultTagStore(id, getObjectName());
 	}
 
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index fdc70e6..a6e2b7e 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -18,28 +18,30 @@ package com.ning.billing.account.api.user;
 
 import java.util.List;
 import java.util.UUID;
+
 import com.google.inject.Inject;
-import com.ning.billing.ErrorCode;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountData;
 import com.ning.billing.account.api.DefaultAccount;
 import com.ning.billing.account.dao.AccountDao;
+import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.eventbus.EventBus;
 import com.ning.billing.util.tag.Tag;
 
 public class DefaultAccountUserApi implements com.ning.billing.account.api.AccountUserApi {
     private final AccountDao dao;
+	private Clock clock;
 
     @Inject
-    public DefaultAccountUserApi(final AccountDao dao) {
+    public DefaultAccountUserApi(final AccountDao dao, final Clock clock) {
         this.dao = dao;
+        this.clock = clock;
     }
 
     @Override
     public Account createAccount(final AccountData data, final List<CustomField> fields, List<Tag> tags) throws AccountApiException {
-        Account account = new DefaultAccount(data);
+        Account account = new DefaultAccount(data, clock.getUTCNow());
         account.addFields(fields);
         account.addTags(tags);
 
diff --git a/account/src/main/java/com/ning/billing/account/glue/AccountModule.java b/account/src/main/java/com/ning/billing/account/glue/AccountModule.java
index f6e51f4..2e5559a 100644
--- a/account/src/main/java/com/ning/billing/account/glue/AccountModule.java
+++ b/account/src/main/java/com/ning/billing/account/glue/AccountModule.java
@@ -25,6 +25,7 @@ import com.ning.billing.account.api.DefaultAccountService;
 import com.ning.billing.account.api.user.DefaultAccountUserApi;
 import com.ning.billing.account.dao.AccountDao;
 import com.ning.billing.account.dao.DefaultAccountDao;
+import com.ning.billing.util.glue.ClockModule;
 
 public class AccountModule extends AbstractModule {
 
@@ -44,6 +45,11 @@ public class AccountModule extends AbstractModule {
     private void installAccountService() {
         bind(AccountService.class).to(DefaultAccountService.class).asEagerSingleton();
     }
+    
+    protected void installClock() {
+        install(new ClockModule());
+    }
+
 
     @Override
     protected void configure() {
@@ -51,5 +57,6 @@ public class AccountModule extends AbstractModule {
         installAccountDao();
         installAccountService();
         installAccountUserApi();
+        installClock() ;
     }
 }
diff --git a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
index 433a663..28f0107 100644
--- a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 
 import com.ning.billing.catalog.api.Currency;
@@ -61,7 +62,7 @@ public class MockAccountUserApi implements AccountUserApi {
 
     @Override
     public Account createAccount(AccountData data, List<CustomField> fields, List<Tag> tags) throws AccountApiException {
-        Account result = new DefaultAccount(data);
+        Account result = new DefaultAccount(data, new DateTime());
         accounts.add(result);
         return result;
     }
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
index fd5350b..1c118a9 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
@@ -252,7 +252,7 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
             }
         };
 
-        Account updatedAccount = new DefaultAccount(account.getId(), accountData, null, null);
+        Account updatedAccount = new DefaultAccount(account.getId(), accountData);
         accountDao.update(updatedAccount);
 
         Account savedAccount = accountDao.getAccountByKey(account.getExternalKey());
diff --git a/account/src/test/java/com/ning/billing/account/glue/AccountModuleWithMocks.java b/account/src/test/java/com/ning/billing/account/glue/AccountModuleWithMocks.java
index fb72404..f9265c0 100644
--- a/account/src/test/java/com/ning/billing/account/glue/AccountModuleWithMocks.java
+++ b/account/src/test/java/com/ning/billing/account/glue/AccountModuleWithMocks.java
@@ -18,6 +18,7 @@ package com.ning.billing.account.glue;
 
 import com.ning.billing.account.dao.AccountDao;
 import com.ning.billing.account.dao.MockAccountDao;
+import com.ning.billing.util.glue.MockClockModule;
 
 public class AccountModuleWithMocks extends AccountModule {
     @Override
@@ -25,4 +26,9 @@ public class AccountModuleWithMocks extends AccountModule {
         bind(MockAccountDao.class).asEagerSingleton();
         bind(AccountDao.class).to(MockAccountDao.class);
     }
+    
+    @Override
+    protected void installClock() {
+        install(new MockClockModule());
+    }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
index 3c3de7e..d4fb56a 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
@@ -16,15 +16,17 @@
 
 package com.ning.billing.analytics;
 
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.IDBI;
+
 import com.ning.billing.account.glue.AccountModule;
 import com.ning.billing.analytics.setup.AnalyticsModule;
 import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.dbi.MysqlTestingHelper;
 import com.ning.billing.entitlement.glue.EntitlementModule;
+import com.ning.billing.util.glue.ClockModule;
 import com.ning.billing.util.glue.EventBusModule;
 import com.ning.billing.util.glue.TagStoreModule;
-import org.skife.jdbi.v2.DBI;
-import org.skife.jdbi.v2.IDBI;
 
 public class AnalyticsTestModule extends AnalyticsModule
 {
@@ -38,6 +40,7 @@ public class AnalyticsTestModule extends AnalyticsModule
         install(new CatalogModule());
         install(new EventBusModule());
         install(new EntitlementModule());
+        install(new ClockModule());
         install(new TagStoreModule());
 
         // Install the Dao layer
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
index 2ce98b8..0722494 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
@@ -24,6 +24,7 @@ import com.ning.billing.account.api.AccountData;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.account.api.DefaultAccount;
 import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.tag.Tag;
 
@@ -31,11 +32,13 @@ public class MockIAccountUserApi implements AccountUserApi
 {
     private final AccountData account;
     private final UUID id;
+	private Clock clock;
 
-    public MockIAccountUserApi(final String accountKey, final Currency currency)
+    public MockIAccountUserApi(final String accountKey, final Currency currency, final Clock clock)
     {
         this.id = UUID.randomUUID();
         account = new MockAccount(id, accountKey, currency);
+        this.clock = clock;
     }
 
     @Override
@@ -57,7 +60,7 @@ public class MockIAccountUserApi implements AccountUserApi
 
     @Override
     public Account getAccountById(final UUID uid) {
-        return new DefaultAccount(account);
+        return new DefaultAccount(account, clock.getUTCNow());
     }
 
     @Override
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 7bad790..a1fdc99 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -16,18 +16,25 @@
 
 package com.ning.billing.analytics;
 
-import com.ning.billing.catalog.api.*;
-import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
-import com.ning.billing.entitlement.events.EntitlementEvent;
-import com.ning.billing.entitlement.events.user.ApiEventType;
+import java.util.UUID;
+
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import java.util.UUID;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.catalog.api.PhaseType;
+import com.ning.billing.catalog.api.Plan;
+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.entitlement.api.user.SubscriptionTransitionData;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.user.ApiEventType;
+import com.ning.billing.util.clock.ClockMock;
 
 public class TestAnalyticsListener
 {
@@ -48,7 +55,7 @@ public class TestAnalyticsListener
     @BeforeMethod(alwaysRun = true)
     public void setUp() throws Exception
     {
-        final BusinessSubscriptionTransitionRecorder recorder = new BusinessSubscriptionTransitionRecorder(dao, new MockIEntitlementUserApi(bundleUUID, KEY), new MockIAccountUserApi(ACCOUNT_KEY, CURRENCY));
+        final BusinessSubscriptionTransitionRecorder recorder = new BusinessSubscriptionTransitionRecorder(dao, new MockIEntitlementUserApi(bundleUUID, KEY), new MockIAccountUserApi(ACCOUNT_KEY, CURRENCY, new ClockMock()));
         listener = new AnalyticsListener(recorder, null);
     }
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index ab04700..91d4aba 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.entitlement.glue;
 
+import org.skife.config.ConfigurationObjectFactory;
+
 import com.google.inject.AbstractModule;
 import com.ning.billing.config.EntitlementConfig;
 import com.ning.billing.entitlement.alignment.MigrationPlanAligner;
@@ -35,23 +37,20 @@ import com.ning.billing.entitlement.engine.core.Engine;
 import com.ning.billing.entitlement.engine.core.EventNotifier;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
 import com.ning.billing.entitlement.engine.dao.EntitlementSqlDao;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.DefaultClock;
-import org.skife.config.ConfigurationObjectFactory;
+import com.ning.billing.util.glue.ClockModule;
 
 
 
 public class EntitlementModule extends AbstractModule {
 
-
-    protected void installClock() {
-        bind(Clock.class).to(DefaultClock.class).asEagerSingleton();
-    }
-
     protected void installConfig() {
         final EntitlementConfig config = new ConfigurationObjectFactory(System.getProperties()).build(EntitlementConfig.class);
         bind(EntitlementConfig.class).toInstance(config);
     }
+    
+    protected void installClock() {
+    	install(new ClockModule());
+    }
 
     protected void installApiEventProcessor() {
         bind(EventNotifier.class).to(DefaultApiEventProcessor.class).asEagerSingleton();
@@ -76,9 +75,9 @@ public class EntitlementModule extends AbstractModule {
     @Override
     protected void configure() {
         installConfig();
-        installClock();
         installApiEventProcessor();
         installEntitlementDao();
         installEntitlementCore();
+        installClock();
     }
 }
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModule.java b/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModule.java
index 6f5ac4e..87b5f02 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModule.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/glue/MockEngineModule.java
@@ -18,15 +18,14 @@ package com.ning.billing.entitlement.glue;
 
 import com.ning.billing.account.glue.AccountModuleWithMocks;
 import com.ning.billing.catalog.glue.CatalogModule;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.glue.EventBusModule;
+import com.ning.billing.util.glue.MockClockModule;
 
 public class MockEngineModule extends EntitlementModule {
 
     @Override
     protected void installClock() {
-        bind(Clock.class).to(ClockMock.class).asEagerSingleton();
+        install (new MockClockModule());
     }
 
     @Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java b/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java
index 0e1c657..63ed8fb 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java
@@ -23,6 +23,7 @@ import com.ning.billing.invoice.api.invoice.DefaultInvoicePaymentApi;
 import com.ning.billing.invoice.api.user.DefaultInvoiceUserApi;
 import com.ning.billing.invoice.dao.DefaultInvoiceDao;
 import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.util.glue.ClockModule;
 
 public class InvoiceModule extends AbstractModule {
     protected void installInvoiceDao() {
@@ -36,6 +37,10 @@ public class InvoiceModule extends AbstractModule {
     protected void installInvoicePaymentApi() {
         bind(InvoicePaymentApi.class).to(DefaultInvoicePaymentApi.class).asEagerSingleton();
     }
+    
+    protected void installClock() {
+    	install(new ClockModule());
+    }
 
     @Override
     protected void configure() {