killbill-memoizeit

jaxrs: add option to return account CBA in AccountJson Kaui

9/20/2012 1:17:59 PM

Details

diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
index c99f160..1d63e9d 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoiceUserApi.java
@@ -57,6 +57,14 @@ public interface InvoiceUserApi {
     public BigDecimal getAccountBalance(UUID accountId);
 
     /**
+     * Retrieve the account CBA.
+     *
+     * @param accountId account id
+     * @return the account CBA
+     */
+    public BigDecimal getAccountCBA(UUID accountId);
+
+    /**
      * Retrieve an invoice by id.
      *
      * @param invoiceId invoice id
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index d9c855c..6e05ad7 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -91,6 +91,12 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
     }
 
     @Override
+    public BigDecimal getAccountCBA(final UUID accountId) {
+        final BigDecimal result = dao.getAccountCBA(accountId);
+        return result == null ? BigDecimal.ZERO : result;
+    }
+
+    @Override
     public Invoice getInvoice(final UUID invoiceId) throws InvoiceApiException {
         return dao.getById(invoiceId);
     }
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java
index 618f924..5235fcb 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalance.java
@@ -13,14 +13,15 @@
  * License for the specific language governing permissions and limitations
  * under the License.
  */
+
 package com.ning.billing.jaxrs.json;
 
 import java.math.BigDecimal;
 
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ning.billing.account.api.Account;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class AccountJsonWithBalance extends AccountJson {
 
@@ -33,29 +34,29 @@ public class AccountJsonWithBalance extends AccountJson {
 
     @JsonCreator
     public AccountJsonWithBalance(@JsonProperty("accountId") final String accountId,
-                       @JsonProperty("name") final String name,
-                       @JsonProperty("firstNameLength") final Integer length,
-                       @JsonProperty("externalKey") final String externalKey,
-                       @JsonProperty("email") final String email,
-                       @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
-                       @JsonProperty("currency") final String currency,
-                       @JsonProperty("paymentMethodId") final String paymentMethodId,
-                       @JsonProperty("timezone") final String timeZone,
-                       @JsonProperty("address1") final String address1,
-                       @JsonProperty("address2") final String address2,
-                       @JsonProperty("postalCode") final String postalCode,
-                       @JsonProperty("company") final String company,
-                       @JsonProperty("city") final String city,
-                       @JsonProperty("state") final String state,
-                       @JsonProperty("country") final String country,
-                       @JsonProperty("locale") final String locale,
-                       @JsonProperty("phone") final String phone,
-                       @JsonProperty("isMigrated") final Boolean isMigrated,
-                       @JsonProperty("isNotifiedForInvoices") final Boolean isNotifiedForInvoices,
-                       @JsonProperty("accountBalance") final BigDecimal accountBalance) {
-            super(accountId, name, length, externalKey, email, billCycleDay, currency, paymentMethodId, timeZone,
-                    address1, address2, postalCode, company, city, state, country, locale, phone, isMigrated, isNotifiedForInvoices);
-            this.accountBalance = accountBalance;
+                                  @JsonProperty("name") final String name,
+                                  @JsonProperty("firstNameLength") final Integer length,
+                                  @JsonProperty("externalKey") final String externalKey,
+                                  @JsonProperty("email") final String email,
+                                  @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
+                                  @JsonProperty("currency") final String currency,
+                                  @JsonProperty("paymentMethodId") final String paymentMethodId,
+                                  @JsonProperty("timezone") final String timeZone,
+                                  @JsonProperty("address1") final String address1,
+                                  @JsonProperty("address2") final String address2,
+                                  @JsonProperty("postalCode") final String postalCode,
+                                  @JsonProperty("company") final String company,
+                                  @JsonProperty("city") final String city,
+                                  @JsonProperty("state") final String state,
+                                  @JsonProperty("country") final String country,
+                                  @JsonProperty("locale") final String locale,
+                                  @JsonProperty("phone") final String phone,
+                                  @JsonProperty("isMigrated") final Boolean isMigrated,
+                                  @JsonProperty("isNotifiedForInvoices") final Boolean isNotifiedForInvoices,
+                                  @JsonProperty("accountBalance") final BigDecimal accountBalance) {
+        super(accountId, name, length, externalKey, email, billCycleDay, currency, paymentMethodId, timeZone,
+              address1, address2, postalCode, company, city, state, country, locale, phone, isMigrated, isNotifiedForInvoices);
+        this.accountBalance = accountBalance;
     }
 
     public BigDecimal getAccountBalance() {
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalanceAndCBA.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalanceAndCBA.java
new file mode 100644
index 0000000..17f0acb
--- /dev/null
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonWithBalanceAndCBA.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2010-2012 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.jaxrs.json;
+
+import java.math.BigDecimal;
+
+import com.ning.billing.account.api.Account;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class AccountJsonWithBalanceAndCBA extends AccountJsonWithBalance {
+
+    private final BigDecimal accountCBA;
+
+    public AccountJsonWithBalanceAndCBA(final Account account, final BigDecimal accountBalance, final BigDecimal accountCBA) {
+        super(account, accountBalance);
+        this.accountCBA = accountCBA;
+    }
+
+    @JsonCreator
+    public AccountJsonWithBalanceAndCBA(@JsonProperty("accountId") final String accountId,
+                                        @JsonProperty("name") final String name,
+                                        @JsonProperty("firstNameLength") final Integer length,
+                                        @JsonProperty("externalKey") final String externalKey,
+                                        @JsonProperty("email") final String email,
+                                        @JsonProperty("billCycleDay") final BillCycleDayJson billCycleDay,
+                                        @JsonProperty("currency") final String currency,
+                                        @JsonProperty("paymentMethodId") final String paymentMethodId,
+                                        @JsonProperty("timezone") final String timeZone,
+                                        @JsonProperty("address1") final String address1,
+                                        @JsonProperty("address2") final String address2,
+                                        @JsonProperty("postalCode") final String postalCode,
+                                        @JsonProperty("company") final String company,
+                                        @JsonProperty("city") final String city,
+                                        @JsonProperty("state") final String state,
+                                        @JsonProperty("country") final String country,
+                                        @JsonProperty("locale") final String locale,
+                                        @JsonProperty("phone") final String phone,
+                                        @JsonProperty("isMigrated") final Boolean isMigrated,
+                                        @JsonProperty("isNotifiedForInvoices") final Boolean isNotifiedForInvoices,
+                                        @JsonProperty("accountBalance") final BigDecimal accountBalance,
+                                        @JsonProperty("accountCBA") final BigDecimal accountCBA) {
+        super(accountId, name, length, externalKey, email, billCycleDay, currency, paymentMethodId, timeZone, address1,
+              address2, postalCode, company, city, state, country, locale, phone, isMigrated, isNotifiedForInvoices, accountBalance);
+        this.accountCBA = accountCBA;
+    }
+
+    public BigDecimal getAccountCBA() {
+        return accountCBA;
+    }
+}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index ee4a6fc..6d186d3 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -60,6 +60,7 @@ import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.jaxrs.json.AccountEmailJson;
 import com.ning.billing.jaxrs.json.AccountJson;
 import com.ning.billing.jaxrs.json.AccountJsonWithBalance;
+import com.ning.billing.jaxrs.json.AccountJsonWithBalanceAndCBA;
 import com.ning.billing.jaxrs.json.AccountTimelineJson;
 import com.ning.billing.jaxrs.json.BundleJsonNoSubscriptions;
 import com.ning.billing.jaxrs.json.CustomFieldJson;
@@ -136,17 +137,10 @@ public class AccountResource extends JaxRsResourceBase {
     @Path("/{accountId:" + UUID_PATTERN + "}")
     @Produces(APPLICATION_JSON)
     public Response getAccount(@PathParam("accountId") final String accountId,
-            @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance) throws AccountApiException {
+                               @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance,
+                               @QueryParam(QUERY_ACCOUNT_WITH_BALANCE_AND_CBA) @DefaultValue("false") final Boolean accountWithBalanceAndCBA) throws AccountApiException {
         final Account account = accountApi.getAccountById(UUID.fromString(accountId));
-
-        AccountJson json = null;
-        if (accountWithBalance) {
-            final BigDecimal accountBalance = invoiceApi.getAccountBalance(account.getId());
-            json = new AccountJsonWithBalance(account, accountBalance);
-        } else {
-            json = new AccountJson(account);
-        }
-        return Response.status(Status.OK).entity(json).build();
+        return getAccount(account, accountWithBalance, accountWithBalanceAndCBA);
     }
 
     @GET
@@ -177,16 +171,24 @@ public class AccountResource extends JaxRsResourceBase {
     @GET
     @Produces(APPLICATION_JSON)
     public Response getAccountByKey(@QueryParam(QUERY_EXTERNAL_KEY) final String externalKey,
-            @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance) throws AccountApiException {
+                                    @QueryParam(QUERY_ACCOUNT_WITH_BALANCE) @DefaultValue("false") final Boolean accountWithBalance,
+                                    @QueryParam(QUERY_ACCOUNT_WITH_BALANCE_AND_CBA) @DefaultValue("false") final Boolean accountWithBalanceAndCBA) throws AccountApiException {
         final Account account = accountApi.getAccountByKey(externalKey);
-        AccountJson json = null;
-        if (accountWithBalance) {
+        return getAccount(account, accountWithBalance, accountWithBalanceAndCBA);
+    }
+
+    private Response getAccount(final Account account, final Boolean accountWithBalance, final Boolean accountWithBalanceAndCBA) {
+        final AccountJson json;
+        if (accountWithBalanceAndCBA) {
+            final BigDecimal accountBalance = invoiceApi.getAccountBalance(account.getId());
+            final BigDecimal accountCBA = invoiceApi.getAccountCBA(account.getId());
+            json = new AccountJsonWithBalanceAndCBA(account, accountBalance, accountCBA);
+        } else if (accountWithBalance) {
             final BigDecimal accountBalance = invoiceApi.getAccountBalance(account.getId());
             json = new AccountJsonWithBalance(account, accountBalance);
         } else {
             json = new AccountJson(account);
         }
-
         return Response.status(Status.OK).entity(json).build();
     }
 
@@ -214,7 +216,7 @@ public class AccountResource extends JaxRsResourceBase {
         final AccountData data = json.toAccountData();
         final UUID uuid = UUID.fromString(accountId);
         accountApi.updateAccount(uuid, data, context.createContext(createdBy, reason, comment));
-        return getAccount(accountId, false);
+        return getAccount(accountId, false, false);
     }
 
     // Not supported
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index 56f7140..9c8af32 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -51,6 +51,7 @@ public interface JaxrsResource {
     public static final String QUERY_POLICY = "policy";
 
     public static final String QUERY_ACCOUNT_WITH_BALANCE = "accountWithBalance";
+    public static final String QUERY_ACCOUNT_WITH_BALANCE_AND_CBA = "accountWithBalanceAndCBA";
 
     public static final String QUERY_ACCOUNT_ID = "accountId";