killbill-uncached

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/AccountDefault.java b/account/src/main/java/com/ning/billing/account/api/AccountDefault.java
index 2c8c281..f2cb01d 100644
--- a/account/src/main/java/com/ning/billing/account/api/AccountDefault.java
+++ b/account/src/main/java/com/ning/billing/account/api/AccountDefault.java
@@ -23,26 +23,26 @@ import java.util.UUID;
 public class AccountDefault extends CustomizableEntityBase implements Account {
     public final static String OBJECT_TYPE = "Account";
 
-    private String externalKey;
-    private String email;
-    private String firstName;
-    private String lastName;
-    private String phone;
-    private Currency currency;
-    private int billCycleDay;
+    private final String externalKey;
+    private final String email;
+    private final String name;
+    private final int firstNameLength;
+    private final String phone;
+    private final Currency currency;
+    private final int billCycleDay;
 
     public AccountDefault(AccountData data) {
-        this(UUID.randomUUID(), data.getExternalKey(), data.getEmail(), data.getFirstName(), data.getLastName(),
-                data.getPhone(), data.getCurrency(), data.getBillCycleDay());
+        this(UUID.randomUUID(), data.getExternalKey(), data.getEmail(), data.getName(),
+                data.getFirstNameLength(), data.getPhone(), data.getCurrency(), data.getBillCycleDay());
     }
 
-    public AccountDefault(UUID id, String externalKey, String email, String firstName, String lastName,
+    public AccountDefault(UUID id, String externalKey, String email, String name, int firstNameLength,
                           String phone, Currency currency, int billCycleDay) {
         super(id);
         this.externalKey = externalKey;
         this.email = email;
-        this.firstName = firstName;
-        this.lastName = lastName;
+        this.name = name;
+        this.firstNameLength = firstNameLength;
         this.phone = phone;
         this.currency = currency;
         this.billCycleDay = billCycleDay;
@@ -58,8 +58,9 @@ public class AccountDefault extends CustomizableEntityBase implements Account {
         return externalKey;
     }
 
-    public void setExternalKey(String externalKey) {
-        this.externalKey = externalKey;
+    @Override
+    public String getName() {
+        return name;
     }
 
     @Override
@@ -67,26 +68,9 @@ public class AccountDefault extends CustomizableEntityBase implements Account {
         return email;
     }
 
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
     @Override
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    @Override
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
+    public int getFirstNameLength() {
+        return firstNameLength;
     }
 
     @Override
@@ -94,25 +78,13 @@ public class AccountDefault extends CustomizableEntityBase implements Account {
         return phone;
     }
 
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
     @Override
     public Currency getCurrency() {
         return currency;
     }
 
-    public void setCurrency(Currency currency) {
-        this.currency = currency;
-    }
-
     @Override
     public int getBillCycleDay() {
         return billCycleDay;
     }
-
-    public void setBillCycleDay(int billCycleDay) {
-        this.billCycleDay = billCycleDay;
-    }
 }
diff --git a/account/src/main/java/com/ning/billing/account/api/user/AccountBuilder.java b/account/src/main/java/com/ning/billing/account/api/user/AccountBuilder.java
index 5abe588..3d881b6 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/AccountBuilder.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/AccountBuilder.java
@@ -25,11 +25,11 @@ public class AccountBuilder {
     private UUID id;
     private String externalKey;
     private String email;
-    private String firstName;
-    private String lastName;
+    private String name;
+    private int firstNameLength;
     private String phone;
     private Currency currency;
-    private int billCycleDay;
+    private int billingCycleDay;
 
     public AccountBuilder() {
         this(UUID.randomUUID());
@@ -49,13 +49,13 @@ public class AccountBuilder {
         return this;
     }
 
-    public AccountBuilder firstName(String firstName) {
-        this.firstName = firstName;
+    public AccountBuilder name(String name) {
+        this.name = name;
         return this;
     }
 
-    public AccountBuilder lastName(String lastName) {
-        this.lastName = lastName;
+    public AccountBuilder firstNameLength(int firstNameLength) {
+        this.firstNameLength = firstNameLength;
         return this;
     }
 
@@ -64,8 +64,8 @@ public class AccountBuilder {
         return this;
     }
 
-    public AccountBuilder billCycleDay(int billCycleDay) {
-        this.billCycleDay = billCycleDay;
+    public AccountBuilder billingCycleDay(int billingCycleDay) {
+        this.billingCycleDay = billingCycleDay;
         return this;
     }
 
@@ -75,6 +75,6 @@ public class AccountBuilder {
     }
 
     public AccountDefault build() {
-        return new AccountDefault(id, externalKey, email, firstName, lastName, phone, currency, billCycleDay);
+        return new AccountDefault(id, externalKey, email, name, firstNameLength, phone, currency, billingCycleDay);
     }
 }
diff --git a/account/src/main/java/com/ning/billing/account/api/user/AccountChangeEventDefault.java b/account/src/main/java/com/ning/billing/account/api/user/AccountChangeEventDefault.java
index f5a9480..2a992f0 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/AccountChangeEventDefault.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/AccountChangeEventDefault.java
@@ -58,11 +58,8 @@ public class AccountChangeEventDefault implements AccountChangeEvent {
         if (!newData.getEmail().equals(oldData.getEmail())) {
             changedFields.add(new ChangedFieldDefault("email", newData.getEmail(), oldData.getEmail()));
         }
-        if (!newData.getFirstName().equals(oldData.getFirstName())) {
-            changedFields.add(new ChangedFieldDefault("firstName", newData.getFirstName(), oldData.getFirstName()));
-        }
-        if (!newData.getLastName().equals(oldData.getLastName())) {
-            changedFields.add(new ChangedFieldDefault("lastName", newData.getLastName(), oldData.getLastName()));
+        if (!newData.getName().equals(oldData.getName())) {
+            changedFields.add(new ChangedFieldDefault("firstName", newData.getName(), oldData.getName()));
         }
         if (!newData.getPhone().equals(oldData.getPhone())) {
             changedFields.add(new ChangedFieldDefault("phone", newData.getPhone(), oldData.getPhone()));
diff --git a/account/src/main/java/com/ning/billing/account/api/user/AccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/AccountUserApi.java
index c065783..fa07547 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/AccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/AccountUserApi.java
@@ -35,7 +35,9 @@ public class AccountUserApi implements com.ning.billing.account.api.AccountUserA
 
     @Override
     public Account createAccount(AccountData data) {
-        return new AccountDefault(data);
+        Account account = new AccountDefault(data);
+        dao.save(account);
+        return account;
     }
 
     @Override
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
index 1dbc8d9..f571405 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
@@ -48,14 +48,16 @@ public interface AccountDao extends EntityDao<Account> {
             UUID id = UUID.fromString(result.getString("id"));
             String externalKey = result.getString("external_key");
             String email = result.getString("email");
-            String firstName = result.getString("first_name");
-            String lastName = result.getString("last_name");
+            String name = result.getString("name");
+            int firstNameLength = result.getInt("first_name_length");
             String phone = result.getString("phone");
+            int billingCycleDay = result.getInt("billing_cycle_day");
             Currency currency = Currency.valueOf(result.getString("currency"));
 
             return new AccountBuilder(id).externalKey(externalKey).email(email)
-                                         .firstName(firstName).lastName(lastName)
-                                         .phone(phone).currency(currency).build();
+                                         .name(name).firstNameLength(firstNameLength)
+                                         .phone(phone).currency(currency)
+                                         .billingCycleDay(billingCycleDay).build();
         }
     }
 
@@ -70,10 +72,11 @@ public interface AccountDao extends EntityDao<Account> {
                         q.bind("id", account.getId().toString());
                         q.bind("externalKey", account.getExternalKey());
                         q.bind("email", account.getEmail());
-                        q.bind("firstName", account.getFirstName());
-                        q.bind("lastName", account.getLastName());
+                        q.bind("name", account.getName());
+                        q.bind("firstNameLength", account.getFirstNameLength());
                         q.bind("phone", account.getPhone());
                         q.bind("currency", account.getCurrency().toString());
+                        q.bind("billingCycleDay", account.getBillCycleDay());
                     }
                 };
             }
diff --git a/account/src/main/resources/com/ning/billing/account/dao/AccountDao.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/AccountDao.sql.stg
index a925519..8be70d4 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/AccountDao.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/AccountDao.sql.stg
@@ -1,27 +1,27 @@
-group IAccountDaoSql;
+group AccountDaoSql;
 
 save() ::= <<
-    INSERT INTO accounts (id, external_key, email, first_name, last_name, phone, currency)
-    VALUES (:id, :externalKey, :email, :firstName, :lastName, :phone, :currency)
+    INSERT INTO accounts (id, external_key, email, name, first_name_length, phone, currency, billing_cycle_day)
+    VALUES (:id, :externalKey, :email, :name, :firstNameLength, :phone, :currency, :billingCycleDay)
     ON DUPLICATE KEY UPDATE
-      external_key = :externalKey, email = :email, first_name = :firstName, last_name = :lastName,
+      external_key = :externalKey, email = :email, name = :name, first_name_length = :firstNameLength,
       phone = :phone, currency = :currency;
 >>
 
 getAccountByKey() ::= <<
-    select id, external_key, email, first_name, last_name, phone, currency
+    select id, external_key, email, name, first_name_length, phone, currency, billing_cycle_day
     from accounts
     where external_key = :externalKey;
 >>
 
 getById() ::= <<
-    select id, external_key, email, first_name, last_name, phone, currency
+    select id, external_key, email, name, first_name_length, phone, currency, billing_cycle_day
     from accounts
     where id = :id;
 >>
 
 get() ::= <<
-    select id, external_key, email, first_name, last_name, phone, currency
+    select id, external_key, email, name, first_name_length, phone, currency, billing_cycle_day
     from accounts;
 >>
 
diff --git a/account/src/main/resources/com/ning/billing/account/ddl.sql b/account/src/main/resources/com/ning/billing/account/ddl.sql
index b6f3c0b..55dff4e 100644
--- a/account/src/main/resources/com/ning/billing/account/ddl.sql
+++ b/account/src/main/resources/com/ning/billing/account/ddl.sql
@@ -3,10 +3,11 @@ CREATE TABLE accounts (
     id char(36) NOT NULL,
     external_key varchar(128) NULL,
     email varchar(50) DEFAULT NULL,
-    first_name varchar(100) NOT NULL,
-    last_name varchar(100) NOT NULL,
+    name varchar(100) NOT NULL,
+    first_name_length int NOT NULL,
     phone varchar(13) DEFAULT NULL,
     currency char(3) NOT NULL,
+    billing_cycle_day int NOT NULL,
     PRIMARY KEY(id)
 ) ENGINE=innodb;
 CREATE UNIQUE INDEX accounts_external_key ON accounts(external_key);
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 ee4f813..3ee07df 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
@@ -37,7 +37,10 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
         String thisKey = key + UUID.randomUUID().toString();
         String lastName = UUID.randomUUID().toString();
         String thisEmail = email + " " + UUID.randomUUID();
-        return new AccountBuilder().externalKey(thisKey).firstName(firstName).lastName(lastName)
+        String name = firstName + " " + lastName;
+
+        int firstNameLength = firstName.length();
+        return new AccountBuilder().externalKey(thisKey).name(name).firstNameLength(firstNameLength)
                                    .email(thisEmail).currency(Currency.USD).build();
     }
 
@@ -65,8 +68,8 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
         Account account = createTestAccount();
         UUID id = account.getId();
         String key = account.getExternalKey();
-        String firstName = account.getFirstName();
-        String lastName = account.getLastName();
+        String name = account.getName();
+        int firstNameLength = account.getFirstNameLength();
 
         accountDao.save(account);
 
@@ -74,8 +77,8 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
         assertNotNull(account);
         assertEquals(account.getId(), id);
         assertEquals(account.getExternalKey(), key);
-        assertEquals(account.getFirstName(), firstName);
-        assertEquals(account.getLastName(), lastName);
+        assertEquals(account.getName(), name);
+        assertEquals(account.getFirstNameLength(), firstNameLength);
 
     }
 
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 7e81737..9734ada 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
@@ -68,7 +68,7 @@ public class TestAnalyticsService
     private BusinessSubscriptionTransition expectedTransition;
 
     @BeforeClass(alwaysRun = true)
-    public void startMysql() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException
+    public void Setup() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException
     {
         final String analyticsDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/analytics/ddl.sql"));
         // For bundles
@@ -80,7 +80,22 @@ public class TestAnalyticsService
         helper.initDb(accountDdl);
         helper.initDb(entitlementDdl);
 
-        // We need a bundle to retrieve the event key
+        bus.start();
+    }
+
+    @AfterClass(alwaysRun = true)
+    public void stopMysql()
+    {
+        helper.stopMysql();
+    }
+
+    @Test(groups = "slow")
+    public void testRegisterForNotifications() throws Exception
+    {
+        // Make sure the service has been instantiated
+        Assert.assertEquals(service.getName(), "analytics-service");
+
+         // We need a bundle to retrieve the event key
         final MockAccount account = new MockAccount(UUID.randomUUID(), ACCOUNT_KEY, Currency.USD);
         final Account storedAccount = accountApi.createAccount(account);
         final ISubscriptionBundle bundle = entitlementApi.createBundleForAccount(storedAccount, KEY);
@@ -90,7 +105,7 @@ public class TestAnalyticsService
         Assert.assertEquals(bundle.getKey(), KEY);
 
         // Create a subscription transition
-        final IProduct product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
+        final IProduct product = new MockProduct("platinum", "subscription", ProductCategory.BASE);
         final IPlan plan = new MockPlan("platinum-monthly", product);
         final IPlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
         final UUID subscriptionId = UUID.randomUUID();
@@ -120,25 +135,11 @@ public class TestAnalyticsService
             requestedTransitionTime,
             BusinessSubscriptionEvent.subscriptionCreated(plan),
             null,
-            new BusinessSubscription(priceList, plan, phase, null, effectiveTransitionTime, ISubscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
+            new BusinessSubscription(priceList, plan, phase, Currency.USD, effectiveTransitionTime, ISubscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
         );
-    }
-
-    @AfterClass(alwaysRun = true)
-    public void stopMysql()
-    {
-        helper.stopMysql();
-    }
-
-    @Test(groups = "slow")
-    public void testRegisterForNotifications() throws Exception
-    {
-        // Make sure the service has been instantiated
-        Assert.assertEquals(service.getName(), "analytics-service");
 
-        // Test the bus and make sure we can register our service
+        // Make sure we can register our service
         try {
-            bus.start();
             service.registerForNotifications();
         }
         catch (Throwable t) {
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
index 689694a..bfcfea8 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
@@ -38,15 +38,8 @@ public class MockAccount implements Account
     }
 
     @Override
-    public String getFirstName()
-    {
-        return "firstName";
-    }
-
-    @Override
-    public String getLastName()
-    {
-        return "lastName";
+    public int getFirstNameLength() {
+        return 0;
     }
 
     @Override
@@ -68,6 +61,11 @@ public class MockAccount implements Account
     }
 
     @Override
+    public String getName() {
+        return "firstName lastName";
+    }
+
+    @Override
     public int getBillCycleDay()
     {
         return 12;
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountData.java b/api/src/main/java/com/ning/billing/account/api/AccountData.java
index 088de96..fe54598 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountData.java
@@ -22,9 +22,9 @@ public interface AccountData {
 
     public String getExternalKey();
 
-    public String getFirstName();
+    public String getName();
 
-    public String getLastName();
+    public int getFirstNameLength();
 
     public String getEmail();
 
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceCreationEvent.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceCreationEvent.java
new file mode 100644
index 0000000..b876530
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceCreationEvent.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.invoice.api;
+
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.eventbus.IEventBusType;
+import org.joda.time.DateTime;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+public interface InvoiceCreationEvent extends IEventBusType {
+    public UUID getInvoiceId();
+    public BigDecimal getAmountOwed();
+    public Currency getCurrency();
+    public DateTime getInvoiceDate();
+}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
index fa68bff..9f7e3a6 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
@@ -281,12 +281,12 @@ public abstract class TestUserApiBase {
     protected Account getAccount() {
         Account account = new Account() {
             @Override
-            public String getFirstName() {
-                return "accountFirstName";
+            public String getName() {
+                return "accountFirstName accountLastName";
             }
             @Override
-            public String getLastName() {
-                return "accountLastName";
+            public int getFirstNameLength() {
+                return "accountFirstName".length();
             }
             @Override
             public String getEmail() {