killbill-aplcache
Changes
analytics/pom.xml 10(+10 -0)
analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java 80(+36 -44)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java 66(+25 -41)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.java 8(+4 -4)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDaoProvider.java 10(+4 -6)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java 93(+46 -47)
analytics/src/test/java/com/ning/billing/analytics/MockBusinessSubscriptionTransitionDao.java 21(+9 -12)
analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java 64(+27 -37)
analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java 97(+97 -0)
jaxrs/pom.xml 11(+11 -0)
util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java 24(+13 -11)
Details
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
index 15f405e..e2cc293 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
@@ -16,13 +16,9 @@
package com.ning.billing.account.dao;
-import com.ning.billing.account.api.AccountEmail;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.dao.ObjectTypeBinder;
-import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
+import java.util.Collection;
+import java.util.List;
+
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
@@ -30,7 +26,13 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
-import java.util.List;
+import com.ning.billing.account.api.AccountEmail;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.dao.EntityHistory;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.dao.ObjectTypeBinder;
+import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
@ExternalizedSqlViaStringTemplate3
@RegisterMapper(AccountEmailMapper.class)
@@ -39,21 +41,21 @@ public interface AccountEmailSqlDao extends UpdatableEntityCollectionSqlDao<Acco
@SqlBatch(transactional=false)
public void insertFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @AccountEmailBinder final List<AccountEmail> entities,
+ @AccountEmailBinder final Collection<AccountEmail> entities,
@CallContextBinder final CallContext context);
@Override
@SqlBatch(transactional=false)
public void updateFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @AccountEmailBinder final List<AccountEmail> entities,
+ @AccountEmailBinder final Collection<AccountEmail> entities,
@CallContextBinder final CallContext context);
@Override
@SqlBatch(transactional=false)
public void deleteFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @AccountEmailBinder final List<AccountEmail> entities,
+ @AccountEmailBinder final Collection<AccountEmail> entities,
@CallContextBinder final CallContext context);
@Override
analytics/pom.xml 10(+10 -0)
diff --git a/analytics/pom.xml b/analytics/pom.xml
index 6015994..9fc2da7 100644
--- a/analytics/pom.xml
+++ b/analytics/pom.xml
@@ -32,7 +32,12 @@
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
@@ -57,6 +62,11 @@
<artifactId>jdbi</artifactId>
</dependency>
<dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
diff --git a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
index bf6f3eb..caefaef 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
@@ -40,7 +40,7 @@ public class AnalyticsListener {
@Subscribe
public void handleSubscriptionTransitionChange(final SubscriptionEvent event) throws AccountApiException, EntitlementUserApiException {
switch (event.getTransitionType()) {
- // A susbcription enters either through migration or as newly created subscription
+ // A subscription enters either through migration or as newly created subscription
case MIGRATE_ENTITLEMENT:
case CREATE:
bstRecorder.subscriptionCreated(event);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java b/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java
index 1ee53ee..3f61530 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/DefaultAnalyticsService.java
@@ -16,15 +16,15 @@
package com.ning.billing.analytics.api;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.inject.Inject;
import com.ning.billing.analytics.AnalyticsListener;
import com.ning.billing.lifecycle.LifecycleHandlerType;
import com.ning.billing.util.bus.Bus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-public class DefaultAnalyticsService implements AnalyticsService
-{
+public class DefaultAnalyticsService implements AnalyticsService {
private static final Logger log = LoggerFactory.getLogger(DefaultAnalyticsService.class);
private static final String ANALYTICS_SERVICE = "analytics-service";
@@ -33,25 +33,21 @@ public class DefaultAnalyticsService implements AnalyticsService
private final Bus eventBus;
@Inject
- public DefaultAnalyticsService(final AnalyticsListener listener, final Bus eventBus)
- {
+ public DefaultAnalyticsService(final AnalyticsListener listener, final Bus eventBus) {
this.listener = listener;
this.eventBus = eventBus;
}
@Override
- public String getName()
- {
+ public String getName() {
return ANALYTICS_SERVICE;
}
@LifecycleHandlerType(LifecycleHandlerType.LifecycleLevel.REGISTER_EVENTS)
- public void registerForNotifications()
- {
+ public void registerForNotifications() {
try {
eventBus.register(listener);
- }
- catch (Bus.EventBusException e) {
+ } catch (Bus.EventBusException e) {
log.error("Unable to register to the EventBus!", e);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccount.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccount.java
index 1eb3add..bfc2da0 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccount.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccount.java
@@ -16,16 +16,16 @@
package com.ning.billing.analytics;
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.joda.time.DateTime;
+
import com.google.common.base.Joiner;
import com.ning.billing.analytics.utils.Rounder;
import com.ning.billing.util.tag.Tag;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
-import java.util.List;
-public class BusinessAccount
-{
+public class BusinessAccount {
// Populated by the database
private DateTime createdDt = null;
private DateTime updatedDt = null;
@@ -40,8 +40,7 @@ public class BusinessAccount
private String creditCardType;
private String billingAddressCountry;
- public BusinessAccount(final String key, final BigDecimal balance, final List<Tag> tags, final DateTime lastInvoiceDate, final BigDecimal totalInvoiceBalance, final String lastPaymentStatus, final String paymentMethod, final String creditCardType, final String billingAddressCountry)
- {
+ public BusinessAccount(final String key, final BigDecimal balance, final List<Tag> tags, final DateTime lastInvoiceDate, final BigDecimal totalInvoiceBalance, final String lastPaymentStatus, final String paymentMethod, final String creditCardType, final String billingAddressCountry) {
this.key = key;
this.balance = balance;
this.billingAddressCountry = billingAddressCountry;
@@ -53,124 +52,100 @@ public class BusinessAccount
this.totalInvoiceBalance = totalInvoiceBalance;
}
- public String getKey()
- {
+ public String getKey() {
return key;
}
- public BigDecimal getBalance()
- {
+ public BigDecimal getBalance() {
return balance;
}
- public Double getRoundedBalance()
- {
+ public Double getRoundedBalance() {
return Rounder.round(balance);
}
- public void setBalance(final BigDecimal balance)
- {
+ public void setBalance(final BigDecimal balance) {
this.balance = balance;
}
- public String getBillingAddressCountry()
- {
+ public String getBillingAddressCountry() {
return billingAddressCountry;
}
- public void setBillingAddressCountry(final String billingAddressCountry)
- {
+ public void setBillingAddressCountry(final String billingAddressCountry) {
this.billingAddressCountry = billingAddressCountry;
}
- public DateTime getCreatedDt()
- {
+ public DateTime getCreatedDt() {
return createdDt;
}
- public void setCreatedDt(final DateTime createdDt)
- {
+ public void setCreatedDt(final DateTime createdDt) {
this.createdDt = createdDt;
}
- public String getCreditCardType()
- {
+ public String getCreditCardType() {
return creditCardType;
}
- public void setCreditCardType(final String creditCardType)
- {
+ public void setCreditCardType(final String creditCardType) {
this.creditCardType = creditCardType;
}
- public DateTime getLastInvoiceDate()
- {
+ public DateTime getLastInvoiceDate() {
return lastInvoiceDate;
}
- public void setLastInvoiceDate(final DateTime lastInvoiceDate)
- {
+ public void setLastInvoiceDate(final DateTime lastInvoiceDate) {
this.lastInvoiceDate = lastInvoiceDate;
}
- public String getLastPaymentStatus()
- {
+ public String getLastPaymentStatus() {
return lastPaymentStatus;
}
- public void setLastPaymentStatus(final String lastPaymentStatus)
- {
+ public void setLastPaymentStatus(final String lastPaymentStatus) {
this.lastPaymentStatus = lastPaymentStatus;
}
- public String getPaymentMethod()
- {
+ public String getPaymentMethod() {
return paymentMethod;
}
- public void setPaymentMethod(final String paymentMethod)
- {
+ public void setPaymentMethod(final String paymentMethod) {
this.paymentMethod = paymentMethod;
}
- public List<Tag> getTags()
- {
+ public List<Tag> getTags() {
return tags;
}
- public void setTags(final List<Tag> tags)
- {
+ public void setTags(final List<Tag> tags) {
this.tags = tags;
}
- public BigDecimal getTotalInvoiceBalance()
- {
+ public BigDecimal getTotalInvoiceBalance() {
return totalInvoiceBalance;
}
- public Double getRoundedTotalInvoiceBalance()
- {
+ public Double getRoundedTotalInvoiceBalance() {
return Rounder.round(totalInvoiceBalance);
}
- public void setTotalInvoiceBalance(final BigDecimal totalInvoiceBalance)
- {
+ public void setTotalInvoiceBalance(final BigDecimal totalInvoiceBalance) {
this.totalInvoiceBalance = totalInvoiceBalance;
}
- public DateTime getUpdatedDt()
- {
+ public DateTime getUpdatedDt() {
return updatedDt;
}
- public void setUpdatedDt(final DateTime updatedDt)
- {
+ public void setUpdatedDt(final DateTime updatedDt) {
this.updatedDt = updatedDt;
}
@Override
- public String toString()
- {
+ public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("BusinessAccount");
sb.append("{balance=").append(balance);
@@ -191,8 +166,7 @@ public class BusinessAccount
}
@Override
- public boolean equals(final Object o)
- {
+ public boolean equals(final Object o) {
if (this == o) {
return true;
}
@@ -240,8 +214,7 @@ public class BusinessAccount
}
@Override
- public int hashCode()
- {
+ public int hashCode() {
int result = createdDt != null ? createdDt.hashCode() : 0;
result = 31 * result + (updatedDt != null ? updatedDt.hashCode() : 0);
result = 31 * result + (key != null ? key.hashCode() : 0);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountRecorder.java
index 2da5922..7c26a94 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountRecorder.java
@@ -22,8 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import com.ning.billing.util.api.TagUserApi;
-import com.ning.billing.util.dao.ObjectType;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,6 +39,8 @@ import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.api.PaymentAttempt;
import com.ning.billing.payment.api.PaymentInfoEvent;
+import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.Tag;
public class BusinessAccountRecorder {
@@ -54,8 +54,8 @@ public class BusinessAccountRecorder {
@Inject
public BusinessAccountRecorder(final BusinessAccountDao dao, final AccountUserApi accountApi,
- final InvoiceUserApi invoiceUserApi, final PaymentApi paymentApi,
- final TagUserApi tagUserApi) {
+ final InvoiceUserApi invoiceUserApi, final PaymentApi paymentApi,
+ final TagUserApi tagUserApi) {
this.dao = dao;
this.accountApi = accountApi;
this.invoiceUserApi = invoiceUserApi;
@@ -73,7 +73,7 @@ public class BusinessAccountRecorder {
log.info("ACCOUNT CREATION " + bac);
dao.createAccount(bac);
} catch (AccountApiException e) {
- log.warn("Error encountered creating BusinessAccount",e);
+ log.warn("Error encountered creating BusinessAccount", e);
}
}
@@ -103,9 +103,9 @@ public class BusinessAccountRecorder {
final Account account = accountApi.getAccountById(paymentAttempt.getAccountId());
accountUpdated(account.getId());
} catch (AccountApiException e) {
- log.warn("Error encountered creating BusinessAccount",e);
+ log.warn("Error encountered creating BusinessAccount", e);
} catch (PaymentApiException e) {
- log.warn("Error encountered creating BusinessAccount",e);
+ log.warn("Error encountered creating BusinessAccount", e);
}
}
@@ -135,7 +135,7 @@ public class BusinessAccountRecorder {
dao.saveAccount(bac);
}
} catch (AccountApiException e) {
- log.warn("Error encountered creating BusinessAccount",e);
+ log.warn("Error encountered creating BusinessAccount", e);
}
}
@@ -220,7 +220,7 @@ public class BusinessAccountRecorder {
bac.setBalance(invoiceUserApi.getAccountBalance(account.getId()));
} catch (PaymentApiException ex) {
- log.error(String.format("Failed to handle acount update for account %s", account.getId()), ex);
+ log.error(String.format("Failed to handle account update for account %s", account.getId()), ex);
}
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
index 8b00dff..c2b3205 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
@@ -16,6 +16,14 @@
package com.ning.billing.analytics;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.ning.billing.analytics.utils.Rounder;
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogApiException;
@@ -27,21 +35,13 @@ import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.catalog.api.TimeUnit;
import com.ning.billing.entitlement.api.user.Subscription;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.UUID;
import static com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
/**
* Describe a subscription for Analytics purposes
*/
-public class BusinessSubscription
-{
+public class BusinessSubscription {
private static final Logger log = LoggerFactory.getLogger(BusinessSubscription.class);
private static final BigDecimal DAYS_IN_MONTH = BigDecimal.valueOf(30);
@@ -63,8 +63,7 @@ public class BusinessSubscription
private final UUID subscriptionId;
private final UUID bundleId;
- public BusinessSubscription(final String productName, final String productType, final ProductCategory productCategory, final String slug, final String phase, final String billingPeriod, final BigDecimal price, final String priceList, final BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
- {
+ public BusinessSubscription(final String productName, final String productType, final ProductCategory productCategory, final String slug, final String phase, final String billingPeriod, final BigDecimal price, final String priceList, final BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId) {
this.productName = productName;
this.productType = productType;
this.productCategory = productCategory;
@@ -89,9 +88,9 @@ public class BusinessSubscription
*
* @param subscription Subscription to use as a model
* @param currency ACCOUNT currency
+ * @param catalog Catalog to use
*/
- BusinessSubscription(final Subscription subscription, final Currency currency, Catalog catalog)
- {
+ BusinessSubscription(final Subscription subscription, final Currency currency, Catalog catalog) {
this(subscription.getCurrentPriceList() == null ? null : subscription.getCurrentPriceList().getName(), subscription.getCurrentPlan().getName(), subscription.getCurrentPhase().getName(), currency, subscription.getStartDate(), subscription.getState(), subscription.getId(), subscription.getBundleId(), catalog);
}
@@ -102,46 +101,43 @@ public class BusinessSubscription
thePlan = (currentPlan != null) ? catalog.findPlan(currentPlan, new DateTime(), startDate) : null;
thePhase = (currentPhase != null) ? catalog.findPhase(currentPhase, new DateTime(), startDate) : null;
} catch (CatalogApiException e) {
- log.error(String.format("Failed to retrieve Plan from catalog for plan %s, phase ", currentPlan, currentPhase));
+ log.error("Failed to retrieve Plan from catalog for plan {}, phase {}", currentPlan, currentPhase);
}
-
- this.priceList = priceList;
-
+
+ this.priceList = priceList;
+
// Record plan information
- if (currentPlan != null && thePlan.getProduct() != null) {
+ if (currentPlan != null && thePlan != null && thePlan.getProduct() != null) {
final Product product = thePlan.getProduct();
productName = product.getName();
productCategory = product.getCategory();
// TODO - we should keep the product type
productType = product.getCatalogName();
- }
- else {
+ } else {
productName = null;
productCategory = null;
productType = null;
}
// Record phase information
- if (currentPhase != null) {
+ if (currentPhase != null && thePhase != null) {
slug = thePhase.getName();
if (thePhase.getPhaseType() != null) {
phase = thePhase.getPhaseType().toString();
- }
- else {
+ } else {
phase = null;
}
if (thePhase.getBillingPeriod() != null) {
billingPeriod = thePhase.getBillingPeriod().toString();
- }
- else {
+ } else {
billingPeriod = null;
}
if (thePhase.getRecurringPrice() != null) {
//TODO check if this is the right way to handle exception
- BigDecimal tmpPrice = null;
+ BigDecimal tmpPrice;
try {
tmpPrice = thePhase.getRecurringPrice().getPrice(USD);
} catch (CatalogApiException e) {
@@ -149,13 +145,11 @@ public class BusinessSubscription
}
price = tmpPrice;
mrr = getMrrFromISubscription(thePhase.getDuration(), price);
- }
- else {
+ } else {
price = BigDecimal.ZERO;
mrr = BigDecimal.ZERO;
}
- }
- else {
+ } else {
slug = null;
phase = null;
billingPeriod = null;
@@ -165,8 +159,7 @@ public class BusinessSubscription
if (currency != null) {
this.currency = currency.toString();
- }
- else {
+ } else {
this.currency = null;
}
@@ -175,11 +168,10 @@ public class BusinessSubscription
this.subscriptionId = subscriptionId;
this.bundleId = bundleId;
}
-
- public BusinessSubscription(final String priceList, final Plan currentPlan, final PlanPhase currentPhase, final Currency currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
- {
+
+ public BusinessSubscription(final String priceList, final Plan currentPlan, final PlanPhase currentPhase, final Currency currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId) {
this.priceList = priceList;
-
+
// Record plan information
if (currentPlan != null && currentPlan.getProduct() != null) {
final Product product = currentPlan.getProduct();
@@ -187,8 +179,7 @@ public class BusinessSubscription
productCategory = product.getCategory();
// TODO - we should keep the product type
productType = product.getCatalogName();
- }
- else {
+ } else {
productName = null;
productCategory = null;
productType = null;
@@ -200,35 +191,31 @@ public class BusinessSubscription
if (currentPhase.getPhaseType() != null) {
phase = currentPhase.getPhaseType().toString();
- }
- else {
+ } else {
phase = null;
}
if (currentPhase.getBillingPeriod() != null) {
billingPeriod = currentPhase.getBillingPeriod().toString();
- }
- else {
+ } else {
billingPeriod = null;
}
if (currentPhase.getRecurringPrice() != null) {
- //TODO check if this is the right way to handle exception
- BigDecimal tmpPrice = null;
+ //TODO check if this is the right way to handle exception
+ BigDecimal tmpPrice;
try {
- tmpPrice = currentPhase.getRecurringPrice().getPrice(USD);
- } catch (CatalogApiException e) {
- tmpPrice = new BigDecimal(0);
- }
+ tmpPrice = currentPhase.getRecurringPrice().getPrice(USD);
+ } catch (CatalogApiException e) {
+ tmpPrice = new BigDecimal(0);
+ }
price = tmpPrice;
mrr = getMrrFromISubscription(currentPhase.getDuration(), price);
- }
- else {
+ } else {
price = BigDecimal.ZERO;
mrr = BigDecimal.ZERO;
}
- }
- else {
+ } else {
slug = null;
phase = null;
billingPeriod = null;
@@ -238,8 +225,7 @@ public class BusinessSubscription
if (currency != null) {
this.currency = currency.toString();
- }
- else {
+ } else {
this.currency = null;
}
@@ -249,113 +235,91 @@ public class BusinessSubscription
this.bundleId = bundleId;
}
- public String getBillingPeriod()
- {
+ public String getBillingPeriod() {
return billingPeriod;
}
- public UUID getBundleId()
- {
+ public UUID getBundleId() {
return bundleId;
}
- public String getCurrency()
- {
+ public String getCurrency() {
return currency;
}
- public BigDecimal getMrr()
- {
+ public BigDecimal getMrr() {
return mrr;
}
- public double getRoundedMrr()
- {
+ public double getRoundedMrr() {
return Rounder.round(mrr);
}
- public String getPhase()
- {
+ public String getPhase() {
return phase;
}
- public BigDecimal getPrice()
- {
+ public BigDecimal getPrice() {
return price;
}
- public String getPriceList()
- {
+ public String getPriceList() {
return priceList;
}
- public double getRoundedPrice()
- {
+ public double getRoundedPrice() {
return Rounder.round(price);
}
- public ProductCategory getProductCategory()
- {
+ public ProductCategory getProductCategory() {
return productCategory;
}
- public String getProductName()
- {
+ public String getProductName() {
return productName;
}
- public String getProductType()
- {
+ public String getProductType() {
return productType;
}
- public String getSlug()
- {
+ public String getSlug() {
return slug;
}
- public DateTime getStartDate()
- {
+ public DateTime getStartDate() {
return startDate;
}
- public SubscriptionState getState()
- {
+ public SubscriptionState getState() {
return state;
}
- public UUID getSubscriptionId()
- {
+ public UUID getSubscriptionId() {
return subscriptionId;
}
- static BigDecimal getMrrFromISubscription(final Duration duration, final BigDecimal price)
- {
+ static BigDecimal getMrrFromISubscription(final Duration duration, final BigDecimal price) {
if (duration == null || duration.getUnit() == null || duration.getNumber() == 0) {
return BigDecimal.ZERO;
}
if (duration.getUnit().equals(TimeUnit.UNLIMITED)) {
return BigDecimal.ZERO;
- }
- else if (duration.getUnit().equals(TimeUnit.DAYS)) {
+ } else if (duration.getUnit().equals(TimeUnit.DAYS)) {
return price.multiply(DAYS_IN_MONTH).multiply(BigDecimal.valueOf(duration.getNumber()));
- }
- else if (duration.getUnit().equals(TimeUnit.MONTHS)) {
+ } else if (duration.getUnit().equals(TimeUnit.MONTHS)) {
return price.divide(BigDecimal.valueOf(duration.getNumber()), Rounder.SCALE, BigDecimal.ROUND_HALF_UP);
- }
- else if (duration.getUnit().equals(TimeUnit.YEARS)) {
+ } else if (duration.getUnit().equals(TimeUnit.YEARS)) {
return price.divide(BigDecimal.valueOf(duration.getNumber()), Rounder.SCALE, RoundingMode.HALF_UP).divide(MONTHS_IN_YEAR, Rounder.SCALE, RoundingMode.HALF_UP);
- }
- else {
+ } else {
log.error("Unknown duration [" + duration + "], can't compute mrr");
return null;
}
}
@Override
- public String toString()
- {
+ public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("BusinessSubscription");
sb.append("{billingPeriod='").append(billingPeriod).append('\'');
@@ -377,8 +341,7 @@ public class BusinessSubscription
}
@Override
- public boolean equals(final Object o)
- {
+ public boolean equals(final Object o) {
if (this == o) {
return true;
}
@@ -435,8 +398,7 @@ public class BusinessSubscription
}
@Override
- public int hashCode()
- {
+ public int hashCode() {
int result = productName != null ? productName.hashCode() : 0;
result = 31 * result + (productType != null ? productType.hashCode() : 0);
result = 31 * result + (productCategory != null ? productCategory.hashCode() : 0);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
index b1668dc..6c2a5c1 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
@@ -22,7 +22,6 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogApiException;
-import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
@@ -32,15 +31,13 @@ import static com.ning.billing.entitlement.api.user.Subscription.SubscriptionSta
/**
* Describe an event associated with a transition between two BusinessSubscription
*/
-public class BusinessSubscriptionEvent
-{
-
+public class BusinessSubscriptionEvent {
+
private static final Logger log = LoggerFactory.getLogger(BusinessSubscriptionEvent.class);
-
+
private static final String MISC = "MISC";
- public enum EventType
- {
+ public enum EventType {
ADD,
CANCEL,
RE_ADD,
@@ -52,8 +49,7 @@ public class BusinessSubscriptionEvent
private final EventType eventType;
private final ProductCategory category;
- public static BusinessSubscriptionEvent valueOf(final String eventString)
- {
+ public static BusinessSubscriptionEvent valueOf(final String eventString) {
for (final EventType possibleEventType : EventType.values()) {
if (!eventString.startsWith(possibleEventType.toString().toUpperCase())) {
continue;
@@ -63,8 +59,7 @@ public class BusinessSubscriptionEvent
if (categoryString.equals(MISC)) {
return new BusinessSubscriptionEvent(possibleEventType, null);
- }
- else {
+ } else {
return new BusinessSubscriptionEvent(possibleEventType, ProductCategory.valueOf(categoryString));
}
}
@@ -72,68 +67,58 @@ public class BusinessSubscriptionEvent
throw new IllegalArgumentException("Unable to parse event string: " + eventString);
}
- public BusinessSubscriptionEvent(final EventType eventType, final ProductCategory category)
- {
+ // Public for internal reasons
+ public BusinessSubscriptionEvent(final EventType eventType, final ProductCategory category) {
this.eventType = eventType;
this.category = category;
}
- public ProductCategory getCategory()
- {
+ public ProductCategory getCategory() {
return category;
}
- public EventType getEventType()
- {
+ public EventType getEventType() {
return eventType;
}
- public static BusinessSubscriptionEvent subscriptionCreated(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate)
- {
+ public static BusinessSubscriptionEvent subscriptionCreated(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate) {
return eventFromType(EventType.ADD, plan, catalog, eventTime, subscriptionCreationDate);
}
- public static BusinessSubscriptionEvent subscriptionCancelled(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate)
- {
+ public static BusinessSubscriptionEvent subscriptionCancelled(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate) {
return eventFromType(EventType.CANCEL, plan, catalog, eventTime, subscriptionCreationDate);
}
- public static BusinessSubscriptionEvent subscriptionChanged(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate)
- {
+ public static BusinessSubscriptionEvent subscriptionChanged(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate) {
return eventFromType(EventType.CHANGE, plan, catalog, eventTime, subscriptionCreationDate);
}
- public static BusinessSubscriptionEvent subscriptionRecreated(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate)
- {
+ public static BusinessSubscriptionEvent subscriptionRecreated(final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate) {
return eventFromType(EventType.RE_ADD, plan, catalog, eventTime, subscriptionCreationDate);
}
- public static BusinessSubscriptionEvent subscriptionPhaseChanged(final String plan, final SubscriptionState state, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate)
- {
+ public static BusinessSubscriptionEvent subscriptionPhaseChanged(final String plan, final SubscriptionState state, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate) {
if (state != null && state.equals(SubscriptionState.CANCELLED)) {
return eventFromType(EventType.SYSTEM_CANCEL, plan, catalog, eventTime, subscriptionCreationDate);
- }
- else {
+ } else {
return eventFromType(EventType.SYSTEM_CHANGE, plan, catalog, eventTime, subscriptionCreationDate);
}
}
- private static BusinessSubscriptionEvent eventFromType(final EventType eventType, final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate)
- {
+ private static BusinessSubscriptionEvent eventFromType(final EventType eventType, final String plan, Catalog catalog, DateTime eventTime, DateTime subscriptionCreationDate) {
Plan thePlan = null;
try {
thePlan = catalog.findPlan(plan, eventTime, subscriptionCreationDate);
} catch (CatalogApiException e) {
log.error(String.format("Failed to retrieve PLan from catalog for %s", plan));
-
+
}
final ProductCategory category = getTypeFromSubscription(thePlan);
return new BusinessSubscriptionEvent(eventType, category);
}
- private static ProductCategory getTypeFromSubscription(final Plan plan)
- {
-
+ private static ProductCategory getTypeFromSubscription(final Plan plan) {
+
if (plan != null && plan.getProduct() != null) {
final Product product = plan.getProduct();
if (product.getCatalogName() != null && product.getCategory() != null) {
@@ -145,14 +130,12 @@ public class BusinessSubscriptionEvent
}
@Override
- public String toString()
- {
+ public String toString() {
return eventType.toString() + "_" + (category == null ? MISC : category.toString().toUpperCase());
}
@Override
- public boolean equals(final Object o)
- {
+ public boolean equals(final Object o) {
if (this == o) {
return true;
}
@@ -173,8 +156,7 @@ public class BusinessSubscriptionEvent
}
@Override
- public int hashCode()
- {
+ public int hashCode() {
int result = eventType != null ? eventType.hashCode() : 0;
result = 31 * result + (category != null ? category.hashCode() : 0);
return result;
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransition.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransition.java
index 6c3a393..6749260 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransition.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransition.java
@@ -16,17 +16,16 @@
package com.ning.billing.analytics;
-import org.joda.time.DateTime;
-
import java.util.UUID;
+import org.joda.time.DateTime;
+
/**
* Describe a state change between two BusinessSubscription
* <p/>
* The key is unique identifier that ties sets of subscriptions together.
*/
-public class BusinessSubscriptionTransition
-{
+public class BusinessSubscriptionTransition {
private final UUID id;
private final String key;
private final String accountKey;
@@ -35,8 +34,7 @@ public class BusinessSubscriptionTransition
private final BusinessSubscription previousSubscription;
private final BusinessSubscription nextSubscription;
- public BusinessSubscriptionTransition(final UUID id, final String key, final String accountKey, final DateTime requestedTimestamp, final BusinessSubscriptionEvent event, final BusinessSubscription previousSubscription, final BusinessSubscription nextsubscription)
- {
+ public BusinessSubscriptionTransition(final UUID id, final String key, final String accountKey, final DateTime requestedTimestamp, final BusinessSubscriptionEvent event, final BusinessSubscription previousSubscription, final BusinessSubscription nextSubscription) {
if (id == null) {
throw new IllegalArgumentException("An event must have an id");
}
@@ -59,47 +57,39 @@ public class BusinessSubscriptionTransition
this.requestedTimestamp = requestedTimestamp;
this.event = event;
this.previousSubscription = previousSubscription;
- this.nextSubscription = nextsubscription;
+ this.nextSubscription = nextSubscription;
}
- public UUID getId()
- {
+ public UUID getId() {
return id;
}
- public BusinessSubscriptionEvent getEvent()
- {
+ public BusinessSubscriptionEvent getEvent() {
return event;
}
- public String getKey()
- {
+ public String getKey() {
return key;
}
- public String getAccountKey()
- {
+ public String getAccountKey() {
return accountKey;
}
- public BusinessSubscription getNextSubscription()
- {
+ public BusinessSubscription getNextSubscription() {
return nextSubscription;
}
- public BusinessSubscription getPreviousSubscription()
- {
+ public BusinessSubscription getPreviousSubscription() {
return previousSubscription;
}
- public DateTime getRequestedTimestamp()
- {
+ public DateTime getRequestedTimestamp() {
return requestedTimestamp;
}
@Override
- public String toString()
- {
+ public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("BusinessSubscriptionTransition");
sb.append("{accountKey='").append(accountKey).append('\'');
@@ -114,8 +104,7 @@ public class BusinessSubscriptionTransition
}
@Override
- public boolean equals(final Object o)
- {
+ public boolean equals(final Object o) {
if (this == o) {
return true;
}
@@ -151,8 +140,7 @@ public class BusinessSubscriptionTransition
}
@Override
- public int hashCode()
- {
+ public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (key != null ? key.hashCode() : 0);
result = 31 * result + (accountKey != null ? accountKey.hashCode() : 0);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
index 0044758..80db909 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
@@ -16,6 +16,13 @@
package com.ning.billing.analytics;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
@@ -27,15 +34,8 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionEvent;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.UUID;
-public class BusinessSubscriptionTransitionRecorder
-{
+public class BusinessSubscriptionTransitionRecorder {
private static final Logger log = LoggerFactory.getLogger(BusinessSubscriptionTransitionRecorder.class);
private final BusinessSubscriptionTransitionDao dao;
@@ -44,8 +44,7 @@ public class BusinessSubscriptionTransitionRecorder
private final CatalogService catalogService;
@Inject
- public BusinessSubscriptionTransitionRecorder(final BusinessSubscriptionTransitionDao dao, final CatalogService catalogService, final EntitlementUserApi entitlementApi, final AccountUserApi accountApi)
- {
+ public BusinessSubscriptionTransitionRecorder(final BusinessSubscriptionTransitionDao dao, final CatalogService catalogService, final EntitlementUserApi entitlementApi, final AccountUserApi accountApi) {
this.dao = dao;
this.catalogService = catalogService;
this.entitlementApi = entitlementApi;
@@ -53,43 +52,37 @@ public class BusinessSubscriptionTransitionRecorder
}
- public void subscriptionCreated(final SubscriptionEvent created) throws AccountApiException, EntitlementUserApiException
- {
+ public void subscriptionCreated(final SubscriptionEvent created) throws AccountApiException, EntitlementUserApiException {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCreated(created.getNextPlan(), catalogService.getFullCatalog(), created.getEffectiveTransitionTime(), created.getSubscriptionStartDate());
recordTransition(event, created);
}
- public void subscriptionRecreated(final SubscriptionEvent recreated) throws AccountApiException, EntitlementUserApiException
- {
+ public void subscriptionRecreated(final SubscriptionEvent recreated) throws AccountApiException, EntitlementUserApiException {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionRecreated(recreated.getNextPlan(), catalogService.getFullCatalog(), recreated.getEffectiveTransitionTime(), recreated.getSubscriptionStartDate());
recordTransition(event, recreated);
}
- public void subscriptionCancelled(final SubscriptionEvent cancelled) throws AccountApiException, EntitlementUserApiException
- {
+ public void subscriptionCancelled(final SubscriptionEvent cancelled) throws AccountApiException, EntitlementUserApiException {
// cancelled.getNextPlan() is null here - need to look at the previous one to create the correct event name
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(cancelled.getPreviousPlan(), catalogService.getFullCatalog(), cancelled.getEffectiveTransitionTime(), cancelled.getSubscriptionStartDate());
recordTransition(event, cancelled);
}
- public void subscriptionChanged(final SubscriptionEvent changed) throws AccountApiException, EntitlementUserApiException
- {
+ public void subscriptionChanged(final SubscriptionEvent changed) throws AccountApiException, EntitlementUserApiException {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionChanged(changed.getNextPlan(), catalogService.getFullCatalog(), changed.getEffectiveTransitionTime(), changed.getSubscriptionStartDate());
recordTransition(event, changed);
}
- public void subscriptionPhaseChanged(final SubscriptionEvent phaseChanged) throws AccountApiException, EntitlementUserApiException
- {
+ public void subscriptionPhaseChanged(final SubscriptionEvent phaseChanged) throws AccountApiException, EntitlementUserApiException {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPhaseChanged(phaseChanged.getNextPlan(), phaseChanged.getNextState(), catalogService.getFullCatalog(), phaseChanged.getEffectiveTransitionTime(), phaseChanged.getSubscriptionStartDate());
recordTransition(event, phaseChanged);
}
- public void recordTransition(final BusinessSubscriptionEvent event, final SubscriptionEvent transition)
- throws AccountApiException, EntitlementUserApiException
- {
+ void recordTransition(final BusinessSubscriptionEvent event, final SubscriptionEvent transition)
+ throws AccountApiException, EntitlementUserApiException {
Currency currency = null;
String transitionKey = null;
String accountKey = null;
@@ -98,22 +91,25 @@ public class BusinessSubscriptionTransitionRecorder
final SubscriptionBundle bundle = entitlementApi.getBundleFromId(transition.getBundleId());
if (bundle != null) {
transitionKey = bundle.getKey();
-
+
final Account account = accountApi.getAccountById(bundle.getAccountId());
if (account != null) {
accountKey = account.getExternalKey();
currency = account.getCurrency();
}
- }
+ }
// The ISubscriptionTransition interface gives us all the prev/next information we need but the start date
// of the previous plan. We need to retrieve it from our own transitions table
DateTime previousEffectiveTransitionTime = null;
- final List<BusinessSubscriptionTransition> transitions = dao.getTransitions(transitionKey);
- if (transitions != null && transitions.size() > 0) {
- final BusinessSubscriptionTransition lastTransition = transitions.get(transitions.size() - 1);
- if (lastTransition != null && lastTransition.getNextSubscription() != null) {
- previousEffectiveTransitionTime = lastTransition.getNextSubscription().getStartDate();
+ // For creation events, the prev subscription will always be null
+ if (event.getEventType() != BusinessSubscriptionEvent.EventType.ADD) {
+ final List<BusinessSubscriptionTransition> transitions = dao.getTransitions(transitionKey);
+ if (transitions != null && transitions.size() > 0) {
+ final BusinessSubscriptionTransition lastTransition = transitions.get(transitions.size() - 1);
+ if (lastTransition != null && lastTransition.getNextSubscription() != null) {
+ previousEffectiveTransitionTime = lastTransition.getNextSubscription().getStartDate();
+ }
}
}
@@ -121,9 +117,7 @@ public class BusinessSubscriptionTransitionRecorder
final BusinessSubscription prevSubscription;
if (previousEffectiveTransitionTime == null) {
prevSubscription = null;
- }
- else {
-
+ } else {
prevSubscription = new BusinessSubscription(transition.getPreviousPriceList(), transition.getPreviousPlan(), transition.getPreviousPhase(), currency, previousEffectiveTransitionTime, transition.getPreviousState(), transition.getSubscriptionId(), transition.getBundleId(), catalogService.getFullCatalog());
}
final BusinessSubscription nextSubscription;
@@ -131,8 +125,7 @@ public class BusinessSubscriptionTransitionRecorder
// next plan is null for CANCEL events
if (transition.getNextPlan() == null) {
nextSubscription = null;
- }
- else {
+ } else {
nextSubscription = new BusinessSubscription(transition.getNextPriceList(), transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId(), catalogService.getFullCatalog());
}
@@ -140,16 +133,15 @@ public class BusinessSubscriptionTransitionRecorder
}
// Public for internal reasons
- public void record(final UUID id, final String key, final String accountKey, final DateTime requestedDateTime, final BusinessSubscriptionEvent event, final BusinessSubscription prevSubscription, final BusinessSubscription nextSubscription)
- {
+ public void record(final UUID id, final String key, final String accountKey, final DateTime requestedDateTime, final BusinessSubscriptionEvent event, final BusinessSubscription prevSubscription, final BusinessSubscription nextSubscription) {
final BusinessSubscriptionTransition transition = new BusinessSubscriptionTransition(
- id,
- key,
- accountKey,
- requestedDateTime,
- event,
- prevSubscription,
- nextSubscription
+ id,
+ key,
+ accountKey,
+ requestedDateTime,
+ event,
+ prevSubscription,
+ nextSubscription
);
log.info(transition.getEvent() + " " + transition);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountBinder.java
index b9da3fa..234e543 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountBinder.java
@@ -16,8 +16,13 @@
package com.ning.billing.analytics.dao;
-import com.google.common.base.Joiner;
-import com.ning.billing.analytics.BusinessAccount;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.sql.Types;
+
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.skife.jdbi.v2.SQLStatement;
@@ -25,34 +30,24 @@ import org.skife.jdbi.v2.sqlobject.Binder;
import org.skife.jdbi.v2.sqlobject.BinderFactory;
import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
-import java.lang.annotation.Annotation;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.sql.Types;
+import com.google.common.base.Joiner;
+import com.ning.billing.analytics.BusinessAccount;
@BindingAnnotation(BusinessAccountBinder.BacBinderFactory.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
-public @interface BusinessAccountBinder
-{
- public static class BacBinderFactory implements BinderFactory
- {
+public @interface BusinessAccountBinder {
+ public static class BacBinderFactory implements BinderFactory {
private final Joiner joiner = Joiner.on(";").skipNulls();
- public Binder build(final Annotation annotation)
- {
- return new Binder<BusinessAccountBinder, BusinessAccount>()
- {
- public void bind(final SQLStatement q, final BusinessAccountBinder bind, final BusinessAccount account)
- {
+ public Binder build(final Annotation annotation) {
+ return new Binder<BusinessAccountBinder, BusinessAccount>() {
+ public void bind(final SQLStatement q, final BusinessAccountBinder bind, final BusinessAccount account) {
final DateTime dateTimeNow = new DateTime(DateTimeZone.UTC);
if (account.getCreatedDt() != null) {
q.bind("created_date", account.getCreatedDt().getMillis());
- }
- else {
+ } else {
q.bind("created_date", dateTimeNow.getMillis());
}
q.bind("updated_date", dateTimeNow.getMillis());
@@ -62,8 +57,7 @@ public @interface BusinessAccountBinder
q.bind("tags", joiner.join(account.getTags()));
if (account.getLastInvoiceDate() != null) {
q.bind("last_invoice_date", account.getLastInvoiceDate().getMillis());
- }
- else {
+ } else {
q.bindNull("last_invoice_date", Types.BIGINT);
}
q.bind("total_invoice_balance", account.getRoundedTotalInvoiceBalance());
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDao.java
index 7223f82..0cd9db4 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDao.java
@@ -16,17 +16,17 @@
package com.ning.billing.analytics.dao;
-import com.ning.billing.analytics.BusinessAccount;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
+import com.ning.billing.analytics.BusinessAccount;
+
@ExternalizedSqlViaStringTemplate3()
@RegisterMapper(BusinessAccountMapper.class)
-public interface BusinessAccountDao
-{
+public interface BusinessAccountDao {
@SqlQuery
BusinessAccount getAccount(@Bind("account_key") final String key);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDaoProvider.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDaoProvider.java
index a2d6b2e..f2a9bf4 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDaoProvider.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountDaoProvider.java
@@ -17,22 +17,20 @@
package com.ning.billing.analytics.dao;
import org.skife.jdbi.v2.IDBI;
+
import com.google.inject.Inject;
import com.google.inject.Provider;
-public class BusinessAccountDaoProvider implements Provider<BusinessAccountDao>
-{
+public class BusinessAccountDaoProvider implements Provider<BusinessAccountDao> {
private final IDBI dbi;
@Inject
- public BusinessAccountDaoProvider(final IDBI dbi)
- {
+ public BusinessAccountDaoProvider(final IDBI dbi) {
this.dbi = dbi;
}
@Override
- public BusinessAccountDao get()
- {
+ public BusinessAccountDao get() {
return dbi.onDemand(BusinessAccountDao.class);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountMapper.java
index 03299d1..366bb3b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountMapper.java
@@ -16,15 +16,6 @@
package com.ning.billing.analytics.dao;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
-import com.ning.billing.analytics.BusinessAccount;
-import com.ning.billing.util.tag.Tag;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.skife.jdbi.v2.StatementContext;
-import org.skife.jdbi.v2.tweak.ResultSetMapper;
-
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -32,13 +23,21 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-public class BusinessAccountMapper implements ResultSetMapper<BusinessAccount>
-{
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+import com.ning.billing.analytics.BusinessAccount;
+import com.ning.billing.util.tag.Tag;
+
+public class BusinessAccountMapper implements ResultSetMapper<BusinessAccount> {
private final Splitter splitter = Splitter.on(";").trimResults().omitEmptyStrings();
@Override
- public BusinessAccount map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException
- {
+ public BusinessAccount map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
final List<String> tagNames = new ArrayList<String>();
Iterables.addAll(tagNames, splitter.split(r.getString(5)));
@@ -46,22 +45,34 @@ public class BusinessAccountMapper implements ResultSetMapper<BusinessAccount>
for (final String tagName : tagNames) {
tags.add(new Tag() {
private final UUID id = UUID.randomUUID();
- @Override public String getTagDefinitionName() {return tagName;}
- @Override public UUID getId() {return id;}
- @Override public String toString() {return tagName;}
+
+ @Override
+ public String getTagDefinitionName() {
+ return tagName;
+ }
+
+ @Override
+ public UUID getId() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return tagName;
+ }
});
}
final BusinessAccount account = new BusinessAccount(
- r.getString(1),
- BigDecimal.valueOf(r.getDouble(4)),
- tags,
- new DateTime(r.getLong(6), DateTimeZone.UTC),
- BigDecimal.valueOf(r.getDouble(7)),
- r.getString(8),
- r.getString(9),
- r.getString(10),
- r.getString(11)
+ r.getString(1),
+ BigDecimal.valueOf(r.getDouble(4)),
+ tags,
+ new DateTime(r.getLong(6), DateTimeZone.UTC),
+ BigDecimal.valueOf(r.getDouble(7)),
+ r.getString(8),
+ r.getString(9),
+ r.getString(10),
+ r.getString(11)
);
account.setCreatedDt(new DateTime(r.getLong(2), DateTimeZone.UTC));
account.setUpdatedDt(new DateTime(r.getLong(3), DateTimeZone.UTC));
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
index b769e5a..2a04c8e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
@@ -16,13 +16,6 @@
package com.ning.billing.analytics.dao;
-import com.ning.billing.analytics.BusinessSubscription;
-import com.ning.billing.analytics.BusinessSubscriptionTransition;
-import org.skife.jdbi.v2.SQLStatement;
-import org.skife.jdbi.v2.sqlobject.Binder;
-import org.skife.jdbi.v2.sqlobject.BinderFactory;
-import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
-
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -30,19 +23,22 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.sql.Types;
+import org.skife.jdbi.v2.SQLStatement;
+import org.skife.jdbi.v2.sqlobject.Binder;
+import org.skife.jdbi.v2.sqlobject.BinderFactory;
+import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
+
+import com.ning.billing.analytics.BusinessSubscription;
+import com.ning.billing.analytics.BusinessSubscriptionTransition;
+
@BindingAnnotation(BusinessSubscriptionTransitionBinder.BstBinderFactory.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
-public @interface BusinessSubscriptionTransitionBinder
-{
- public static class BstBinderFactory implements BinderFactory
- {
- public Binder build(final Annotation annotation)
- {
- return new Binder<BusinessSubscriptionTransitionBinder, BusinessSubscriptionTransition>()
- {
- public void bind(final SQLStatement q, final BusinessSubscriptionTransitionBinder bind, final BusinessSubscriptionTransition arg)
- {
+public @interface BusinessSubscriptionTransitionBinder {
+ public static class BstBinderFactory implements BinderFactory {
+ public Binder build(final Annotation annotation) {
+ return new Binder<BusinessSubscriptionTransitionBinder, BusinessSubscriptionTransition>() {
+ public void bind(final SQLStatement q, final BusinessSubscriptionTransitionBinder bind, final BusinessSubscriptionTransition arg) {
q.bind("event_id", arg.getId().toString());
q.bind("event_key", arg.getKey());
q.bind("account_key", arg.getAccountKey());
@@ -65,14 +61,12 @@ public @interface BusinessSubscriptionTransitionBinder
q.bindNull("prev_state", Types.VARCHAR);
q.bindNull("prev_subscription_id", Types.VARCHAR);
q.bindNull("prev_bundle_id", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("prev_product_name", previousSubscription.getProductName());
q.bind("prev_product_type", previousSubscription.getProductType());
if (previousSubscription.getProductCategory() == null) {
q.bindNull("prev_product_category", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("prev_product_category", previousSubscription.getProductCategory().toString());
}
q.bind("prev_slug", previousSubscription.getSlug());
@@ -84,26 +78,22 @@ public @interface BusinessSubscriptionTransitionBinder
q.bind("prev_currency", previousSubscription.getCurrency());
if (previousSubscription.getStartDate() == null) {
q.bindNull("prev_start_date", Types.BIGINT);
- }
- else {
+ } else {
q.bind("prev_start_date", previousSubscription.getStartDate().getMillis());
}
if (previousSubscription.getState() == null) {
q.bindNull("prev_state", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("prev_state", previousSubscription.getState().toString());
}
if (previousSubscription.getSubscriptionId() == null) {
q.bindNull("prev_subscription_id", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("prev_subscription_id", previousSubscription.getSubscriptionId().toString());
}
if (previousSubscription.getBundleId() == null) {
q.bindNull("prev_bundle_id", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("prev_bundle_id", previousSubscription.getBundleId().toString());
}
}
@@ -124,14 +114,12 @@ public @interface BusinessSubscriptionTransitionBinder
q.bindNull("next_state", Types.VARCHAR);
q.bindNull("next_subscription_id", Types.VARCHAR);
q.bindNull("next_bundle_id", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("next_product_name", nextSubscription.getProductName());
q.bind("next_product_type", nextSubscription.getProductType());
if (nextSubscription.getProductCategory() == null) {
q.bindNull("next_product_category", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("next_product_category", nextSubscription.getProductCategory().toString());
}
q.bind("next_slug", nextSubscription.getSlug());
@@ -143,26 +131,22 @@ public @interface BusinessSubscriptionTransitionBinder
q.bind("next_currency", nextSubscription.getCurrency());
if (nextSubscription.getStartDate() == null) {
q.bindNull("next_start_date", Types.BIGINT);
- }
- else {
+ } else {
q.bind("next_start_date", nextSubscription.getStartDate().getMillis());
}
if (nextSubscription.getState() == null) {
q.bindNull("next_state", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("next_state", nextSubscription.getState().toString());
}
if (nextSubscription.getSubscriptionId() == null) {
q.bindNull("next_subscription_id", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("next_subscription_id", nextSubscription.getSubscriptionId().toString());
}
if (nextSubscription.getBundleId() == null) {
q.bindNull("next_bundle_id", Types.VARCHAR);
- }
- else {
+ } else {
q.bind("next_bundle_id", nextSubscription.getBundleId().toString());
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.java
index cb57ab5..a05aeca 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.java
@@ -16,19 +16,19 @@
package com.ning.billing.analytics.dao;
-import com.ning.billing.analytics.BusinessSubscriptionTransition;
+import java.util.List;
+
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
-import java.util.List;
+import com.ning.billing.analytics.BusinessSubscriptionTransition;
@ExternalizedSqlViaStringTemplate3()
@RegisterMapper(BusinessSubscriptionTransitionMapper.class)
-public interface BusinessSubscriptionTransitionDao
-{
+public interface BusinessSubscriptionTransitionDao {
@SqlQuery
List<BusinessSubscriptionTransition> getTransitions(@Bind("event_key") final String key);
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDaoProvider.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDaoProvider.java
index 0890f84..3519011 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDaoProvider.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDaoProvider.java
@@ -17,22 +17,20 @@
package com.ning.billing.analytics.dao;
import org.skife.jdbi.v2.IDBI;
+
import com.google.inject.Inject;
import com.google.inject.Provider;
-public class BusinessSubscriptionTransitionDaoProvider implements Provider<BusinessSubscriptionTransitionDao>
-{
+public class BusinessSubscriptionTransitionDaoProvider implements Provider<BusinessSubscriptionTransitionDao> {
private final IDBI dbi;
@Inject
- public BusinessSubscriptionTransitionDaoProvider(final IDBI dbi)
- {
+ public BusinessSubscriptionTransitionDaoProvider(final IDBI dbi) {
this.dbi = dbi;
}
@Override
- public BusinessSubscriptionTransitionDao get()
- {
+ public BusinessSubscriptionTransitionDao get() {
return dbi.onDemand(BusinessSubscriptionTransitionDao.class);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
index ed41ab5..ac38463 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
@@ -16,42 +16,41 @@
package com.ning.billing.analytics.dao;
-import com.ning.billing.analytics.BusinessSubscription;
-import com.ning.billing.analytics.BusinessSubscriptionEvent;
-import com.ning.billing.analytics.BusinessSubscriptionTransition;
-import com.ning.billing.catalog.api.ProductCategory;
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.UUID;
+
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.UUID;
+import com.ning.billing.analytics.BusinessSubscription;
+import com.ning.billing.analytics.BusinessSubscriptionEvent;
+import com.ning.billing.analytics.BusinessSubscriptionTransition;
+import com.ning.billing.catalog.api.ProductCategory;
import static com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
-public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<BusinessSubscriptionTransition>
-{
+public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<BusinessSubscriptionTransition> {
@Override
- public BusinessSubscriptionTransition map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException
- {
+ public BusinessSubscriptionTransition map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
BusinessSubscription prev = new BusinessSubscription(
- r.getString(6), // productName
- r.getString(7), // productType
- r.getString(8) == null ? null : ProductCategory.valueOf(r.getString(8)), // productCategory
- r.getString(9), // slug
- r.getString(10), // phase
- r.getString(11), // billing period
- BigDecimal.valueOf(r.getDouble(12)), // price
- r.getString(13), // priceList
- BigDecimal.valueOf(r.getDouble(14)), // mrr
- r.getString(15), // currency
- r.getLong(16) == 0 ? null : new DateTime(r.getLong(16), DateTimeZone.UTC), // startDate
- r.getString(17) == null ? null : SubscriptionState.valueOf(r.getString(17)), // state
- r.getString(18) == null ? null : UUID.fromString(r.getString(18)), // subscriptionId
- r.getString(19) == null ? null : UUID.fromString(r.getString(19)) //bundleId
+ r.getString(6), // productName
+ r.getString(7), // productType
+ r.getString(8) == null ? null : ProductCategory.valueOf(r.getString(8)), // productCategory
+ r.getString(9), // slug
+ r.getString(10), // phase
+ r.getString(11), // billing period
+ BigDecimal.valueOf(r.getDouble(12)), // price
+ r.getString(13), // priceList
+ BigDecimal.valueOf(r.getDouble(14)), // mrr
+ r.getString(15), // currency
+ r.getLong(16) == 0 ? null : new DateTime(r.getLong(16), DateTimeZone.UTC), // startDate
+ r.getString(17) == null ? null : SubscriptionState.valueOf(r.getString(17)), // state
+ r.getString(18) == null ? null : UUID.fromString(r.getString(18)), // subscriptionId
+ r.getString(19) == null ? null : UUID.fromString(r.getString(19)) //bundleId
);
// Avoid creating a dummy subscriptions with all null fields
@@ -60,20 +59,20 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
}
BusinessSubscription next = new BusinessSubscription(
- r.getString(20), // productName
- r.getString(21), // productType
- r.getString(22) == null ? null : ProductCategory.valueOf(r.getString(22)), // productCategory
- r.getString(23), // slug8
- r.getString(24), // phase
- r.getString(25), // billing period
- BigDecimal.valueOf(r.getDouble(26)), // price
- r.getString(27), // priceList
- BigDecimal.valueOf(r.getDouble(28)), // mrr
- r.getString(29), // currency
- r.getLong(30) == 0 ? null : new DateTime(r.getLong(30), DateTimeZone.UTC), // startDate
- r.getString(31) == null ? null : SubscriptionState.valueOf(r.getString(31)), // state
- r.getString(32) == null ? null : UUID.fromString(r.getString(32)), // subscriptionId
- r.getString(33) == null ? null : UUID.fromString(r.getString(33)) //bundleId
+ r.getString(20), // productName
+ r.getString(21), // productType
+ r.getString(22) == null ? null : ProductCategory.valueOf(r.getString(22)), // productCategory
+ r.getString(23), // slug8
+ r.getString(24), // phase
+ r.getString(25), // billing period
+ BigDecimal.valueOf(r.getDouble(26)), // price
+ r.getString(27), // priceList
+ BigDecimal.valueOf(r.getDouble(28)), // mrr
+ r.getString(29), // currency
+ r.getLong(30) == 0 ? null : new DateTime(r.getLong(30), DateTimeZone.UTC), // startDate
+ r.getString(31) == null ? null : SubscriptionState.valueOf(r.getString(31)), // state
+ r.getString(32) == null ? null : UUID.fromString(r.getString(32)), // subscriptionId
+ r.getString(33) == null ? null : UUID.fromString(r.getString(33)) //bundleId
);
// Avoid creating a dummy subscriptions with all null fields
@@ -84,13 +83,13 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.valueOf(r.getString(5));
return new BusinessSubscriptionTransition(
- UUID.fromString(r.getString(1)),
- r.getString(2),
- r.getString(3),
- new DateTime(r.getLong(4), DateTimeZone.UTC),
- event,
- prev,
- next
+ UUID.fromString(r.getString(1)),
+ r.getString(2),
+ r.getString(3),
+ new DateTime(r.getLong(4), DateTimeZone.UTC),
+ event,
+ prev,
+ next
);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java b/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java
index 1b128b0..2233e1e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/setup/AnalyticsModule.java
@@ -21,18 +21,16 @@ import com.google.inject.AbstractModule;
import com.ning.billing.analytics.AnalyticsListener;
import com.ning.billing.analytics.BusinessAccountRecorder;
import com.ning.billing.analytics.BusinessSubscriptionTransitionRecorder;
-import com.ning.billing.analytics.api.DefaultAnalyticsService;
import com.ning.billing.analytics.api.AnalyticsService;
+import com.ning.billing.analytics.api.DefaultAnalyticsService;
import com.ning.billing.analytics.dao.BusinessAccountDao;
import com.ning.billing.analytics.dao.BusinessAccountDaoProvider;
import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDaoProvider;
-public class AnalyticsModule extends AbstractModule
-{
+public class AnalyticsModule extends AbstractModule {
@Override
- protected void configure()
- {
+ protected void configure() {
bind(BusinessSubscriptionTransitionDao.class).toProvider(BusinessSubscriptionTransitionDaoProvider.class).asEagerSingleton();
bind(BusinessAccountDao.class).toProvider(BusinessAccountDaoProvider.class).asEagerSingleton();
diff --git a/analytics/src/main/java/com/ning/billing/analytics/utils/Rounder.java b/analytics/src/main/java/com/ning/billing/analytics/utils/Rounder.java
index ab5728d..6222a34 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/utils/Rounder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/utils/Rounder.java
@@ -18,21 +18,17 @@ package com.ning.billing.analytics.utils;
import java.math.BigDecimal;
-public class Rounder
-{
+public class Rounder {
public static final int SCALE = 4;
// Static only
- private Rounder()
- {
+ private Rounder() {
}
- public static double round(final BigDecimal decimal)
- {
+ public static double round(final BigDecimal decimal) {
if (decimal == null) {
return 0;
- }
- else {
+ } else {
return decimal.setScale(SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
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 17b3c14..da7bc86 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestModule.java
@@ -16,10 +16,14 @@
package com.ning.billing.analytics;
+import org.mockito.Mockito;
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.MockCatalog;
+import com.ning.billing.catalog.api.Catalog;
+import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
import com.ning.billing.invoice.glue.DefaultInvoiceModule;
@@ -36,11 +40,9 @@ import com.ning.billing.util.glue.NotificationQueueModule;
import com.ning.billing.util.glue.TagStoreModule;
import com.ning.billing.util.tag.dao.TagDefinitionSqlDao;
-public class AnalyticsTestModule extends AnalyticsModule
-{
+public class AnalyticsTestModule extends AnalyticsModule {
@Override
- protected void configure()
- {
+ protected void configure() {
super.configure();
// Need to configure a few more things for the EventBus
@@ -61,11 +63,17 @@ public class AnalyticsTestModule extends AnalyticsModule
install(new DefaultJunctionModule());
// Install the Dao layer
- final MysqlTestingHelper helper = new MysqlTestingHelper();
+ final MysqlTestingHelper helper = TestWithEmbeddedDB.getMysqlTestingHelper();
bind(MysqlTestingHelper.class).toInstance(helper);
final IDBI dbi = helper.getDBI();
bind(IDBI.class).toInstance(dbi);
bind(TagDefinitionSqlDao.class).toInstance(dbi.onDemand(TagDefinitionSqlDao.class));
+
+ // Install a mock catalog
+ final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ final Catalog catalog = Mockito.mock(Catalog.class);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
+ bind(CatalogService.class).toInstance(catalogService);
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuite.java b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuite.java
new file mode 100644
index 0000000..489f5a1
--- /dev/null
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuite.java
@@ -0,0 +1,42 @@
+/*
+ * 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.analytics;
+
+import java.lang.reflect.Method;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+
+public abstract class AnalyticsTestSuite {
+ private static final Logger log = LoggerFactory.getLogger(AnalyticsTestSuite.class);
+
+ @BeforeMethod(alwaysRun = true)
+ public void startTest(final Method method) throws Exception {
+ log.info("***************************************************************************************************");
+ log.info("*** Starting test {}:{}", method.getDeclaringClass().getName(), method.getName());
+ log.info("***************************************************************************************************");
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void endTest(final Method method) throws Exception {
+ log.info("***************************************************************************************************");
+ log.info("*** Ending test {}:{}", method.getDeclaringClass().getName(), method.getName());
+ log.info("***************************************************************************************************");
+ }
+}
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 3a8637f..f48563a 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
@@ -16,8 +16,6 @@
package com.ning.billing.analytics.api;
-import static org.testng.Assert.fail;
-
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.SQLException;
@@ -26,15 +24,11 @@ import java.util.Arrays;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.payment.api.DefaultPaymentAttempt;
-import com.ning.billing.util.tag.TagDefinition;
-import com.ning.billing.util.tag.dao.AuditedTagDao;
-import com.ning.billing.util.tag.dao.TagDao;
-import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
+import org.mockito.Mockito;
import org.testng.Assert;
-import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
@@ -52,11 +46,12 @@ import com.ning.billing.analytics.MockDuration;
import com.ning.billing.analytics.MockPhase;
import com.ning.billing.analytics.MockPlan;
import com.ning.billing.analytics.MockProduct;
+import com.ning.billing.analytics.TestWithEmbeddedDB;
import com.ning.billing.analytics.dao.BusinessAccountDao;
import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
-import com.ning.billing.catalog.MockCatalogModule;
import com.ning.billing.catalog.MockPriceList;
import com.ning.billing.catalog.api.Catalog;
+import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
@@ -65,7 +60,6 @@ import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.user.DefaultSubscriptionEvent;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
@@ -81,7 +75,7 @@ import com.ning.billing.invoice.api.user.DefaultInvoiceCreationEvent;
import com.ning.billing.invoice.dao.InvoiceDao;
import com.ning.billing.invoice.model.DefaultInvoice;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
+import com.ning.billing.payment.api.DefaultPaymentAttempt;
import com.ning.billing.payment.api.DefaultPaymentInfoEvent;
import com.ning.billing.payment.api.PaymentAttempt;
import com.ning.billing.payment.api.PaymentAttempt.PaymentAttemptStatus;
@@ -95,16 +89,19 @@ import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.clock.DefaultClock;
import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.dao.AuditedTagDao;
+import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionSqlDao;
-@Guice(modules = {AnalyticsTestModule.class, MockCatalogModule.class})
-public class TestAnalyticsService {
-
+import static org.testng.Assert.fail;
+
+@Guice(modules = {AnalyticsTestModule.class})
+public class TestAnalyticsService extends TestWithEmbeddedDB {
final Product product = new MockProduct("platinum", "subscription", ProductCategory.BASE);
final Plan plan = new MockPlan("platinum-monthly", product);
final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
-
private static final UUID ID = UUID.randomUUID();
private static final String KEY = "12345";
private static final String ACCOUNT_KEY = "pierre-12345";
@@ -145,9 +142,6 @@ public class TestAnalyticsService {
@Inject
private BusinessAccountDao accountDao;
- @Inject
- private MysqlTestingHelper helper;
-
private SubscriptionEvent transition;
private BusinessSubscriptionTransition expectedTransition;
@@ -156,22 +150,22 @@ public class TestAnalyticsService {
private PaymentInfoEvent paymentInfoNotification;
@Inject
- private CatalogService catalogService;
-
+ private CatalogService catalogService;
+
private Catalog catalog;
-
- @BeforeClass(groups = "slow")
- public void startMysql() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException {
+ @BeforeClass(groups = "slow")
+ public void setUp() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException, CatalogApiException {
catalog = catalogService.getFullCatalog();
- ((ZombieControl) catalog).addResult("findPlan", plan);
- ((ZombieControl) catalog).addResult("findPhase", phase);
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPhase(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(phase);
// Killbill generic setup
- setupBusAndMySQL();
+ bus.start();
+ }
- helper.cleanupAllTables();
-
+ @BeforeMethod(groups = "slow")
+ public void createMocks() {
tagDao.create(TAG_ONE, context);
tagDao.create(TAG_TWO, context);
@@ -192,30 +186,6 @@ public class TestAnalyticsService {
}
}
- private void setupBusAndMySQL() throws IOException {
-
- final String analyticsDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/analytics/ddl.sql"));
- final String accountDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/account/ddl.sql"));
- final String entitlementDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/entitlement/ddl.sql"));
- final String invoiceDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/invoice/ddl.sql"));
- final String paymentDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/payment/ddl.sql"));
- final String utilDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/util/ddl.sql"));
- final String junctionDdl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/junction/ddl.sql"));
-
- helper.startMysql();
- helper.initDb(analyticsDdl);
- helper.initDb(accountDdl);
- helper.initDb(entitlementDdl);
- helper.initDb(invoiceDdl);
- helper.initDb(paymentDdl);
- helper.initDb(utilDdl);
- helper.initDb(junctionDdl);
-
- helper.cleanupAllTables();
-
- bus.start();
- }
-
private void createSubscriptionTransitionEvent(final Account account) throws EntitlementUserApiException {
final SubscriptionBundle bundle = entitlementApi.createBundleForAccount(account.getId(), KEY, context);
@@ -229,7 +199,7 @@ public class TestAnalyticsService {
final DateTime requestedTransitionTime = clock.getUTCNow();
final PriceList priceList = new MockPriceList().setName("something");
-
+
transition = new DefaultSubscriptionEvent(new SubscriptionTransitionData(
ID,
subscriptionId,
@@ -272,7 +242,7 @@ public class TestAnalyticsService {
invoice.addInvoiceItem(invoiceItem);
invoiceDao.create(invoice, context);
- List<Invoice> invoices = invoiceDao.getInvoicesByAccount(account.getId());
+ final List<Invoice> invoices = invoiceDao.getInvoicesByAccount(account.getId());
Assert.assertEquals(invoices.size(), 1);
Assert.assertEquals(invoices.get(0).getInvoiceItems().size(), 1);
@@ -289,12 +259,7 @@ public class TestAnalyticsService {
Assert.assertEquals(paymentDao.getPaymentInfoList(Arrays.asList(invoice.getId())).size(), 1);
}
- @AfterClass(groups = "slow")
- public void stopMysql() {
- helper.stopMysql();
- }
-
- @Test(groups = "slow", enabled=true)
+ @Test(groups = "slow")
public void testRegisterForNotifications() throws Exception {
// Make sure the service has been instantiated
Assert.assertEquals(service.getName(), "analytics-service");
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
index 9305d55..c9c31be 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
@@ -16,6 +16,21 @@
package com.ning.billing.analytics.dao;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.skife.jdbi.v2.IDBI;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
import com.ning.billing.analytics.BusinessAccount;
import com.ning.billing.analytics.BusinessSubscription;
import com.ning.billing.analytics.BusinessSubscriptionEvent;
@@ -24,8 +39,10 @@ import com.ning.billing.analytics.MockDuration;
import com.ning.billing.analytics.MockPhase;
import com.ning.billing.analytics.MockPlan;
import com.ning.billing.analytics.MockProduct;
+import com.ning.billing.analytics.TestWithEmbeddedDB;
import com.ning.billing.analytics.utils.Rounder;
import com.ning.billing.catalog.api.Catalog;
+import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
@@ -33,36 +50,14 @@ 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.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-
import com.ning.billing.util.tag.Tag;
-import org.apache.commons.io.IOUtils;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.skife.jdbi.v2.IDBI;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-public class TestAnalyticsDao
-{
+public class TestAnalyticsDao extends TestWithEmbeddedDB {
private static final UUID EVENT_ID = UUID.randomUUID();
private static final String EVENT_KEY = "23456";
private static final String ACCOUNT_KEY = "pierre-143343-vcc";
- private final MysqlTestingHelper helper = new MysqlTestingHelper();
private final Product product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
private final Plan plan = new MockPlan("platinum-monthly", product);
private final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
@@ -72,33 +67,25 @@ public class TestAnalyticsDao
private BusinessAccountDao businessAccountDao;
private BusinessAccount account;
- private final CatalogService catalogService = BrainDeadProxyFactory.createBrainDeadProxyFor(CatalogService.class);
- private final Catalog catalog = BrainDeadProxyFactory.createBrainDeadProxyFor(Catalog.class);
-
- @BeforeClass(alwaysRun = true)
- public void startMysql() throws IOException, ClassNotFoundException, SQLException
- {
-
- ((ZombieControl) catalog).addResult("findPlan", plan);
- ((ZombieControl) catalog).addResult("findPhase", phase);
- ((ZombieControl) catalogService).addResult("getFullCatalog", catalog);
-
- final String ddl = IOUtils.toString(BusinessSubscriptionTransitionDao.class.getResourceAsStream("/com/ning/billing/analytics/ddl.sql"));
+ private final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ private final Catalog catalog = Mockito.mock(Catalog.class);
- helper.startMysql();
- helper.initDb(ddl);
+ @BeforeClass(groups = "slow")
+ public void setup() throws IOException, ClassNotFoundException, SQLException, CatalogApiException {
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPhase(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(phase);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
setupBusinessSubscriptionTransition();
setupBusinessAccount();
}
- private void setupBusinessSubscriptionTransition()
- {
+ private void setupBusinessSubscriptionTransition() {
final DateTime requestedTimestamp = new DateTime(DateTimeZone.UTC);
final BusinessSubscription prevSubscription = new BusinessSubscription(null, plan.getName(), phase.getName(), Currency.USD, new DateTime(DateTimeZone.UTC), Subscription.SubscriptionState.ACTIVE, UUID.randomUUID(), UUID.randomUUID(), catalog);
final BusinessSubscription nextSubscription = new BusinessSubscription(null, plan.getName(), phase.getName(), Currency.USD, new DateTime(DateTimeZone.UTC), Subscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID(), catalog);
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan.getName(), catalog, requestedTimestamp, requestedTimestamp);
-
transition = new BusinessSubscriptionTransition(EVENT_ID, EVENT_KEY, ACCOUNT_KEY, requestedTimestamp, event, prevSubscription, nextSubscription);
@@ -108,14 +95,12 @@ public class TestAnalyticsDao
// Healthcheck test to make sure MySQL is setup properly
try {
businessSubscriptionTransitionDao.test();
- }
- catch (Throwable t) {
+ } catch (Throwable t) {
Assert.fail(t.toString());
}
}
- private void setupBusinessAccount()
- {
+ private void setupBusinessAccount() {
final List<Tag> tags = new ArrayList<Tag>();
tags.add(getMockTag("batch1"));
tags.add(getMockTag("great,guy"));
@@ -127,44 +112,28 @@ public class TestAnalyticsDao
// Healthcheck test to make sure MySQL is setup properly
try {
businessAccountDao.test();
- }
- catch (Throwable t) {
+ } catch (Throwable t) {
Assert.fail(t.toString());
}
}
- private Tag getMockTag(String tagDefinitionName) {
- Tag tag = BrainDeadProxyFactory.createBrainDeadProxyFor(Tag.class);
- ZombieControl zombie = (ZombieControl) tag;
- zombie.addResult("getTagDefinitionName", tagDefinitionName);
- zombie.addResult("toString", tagDefinitionName);
+ private Tag getMockTag(final String tagDefinitionName) {
+ final Tag tag = Mockito.mock(Tag.class);
+ Mockito.when(tag.getTagDefinitionName()).thenReturn(tagDefinitionName);
+ Mockito.when(tag.toString()).thenReturn(tagDefinitionName);
return tag;
}
- @AfterClass(groups = "slow")
- public void stopMysql()
- {
- helper.stopMysql();
- }
-
- @BeforeMethod(groups = "slow")
- public void cleanup() throws Exception
- {
- helper.cleanupTable("bst");
- helper.cleanupTable("bac");
- }
-
@Test(groups = "slow")
- public void testHandleDuplicatedEvents()
- {
+ public void testHandleDuplicatedEvents() {
final BusinessSubscriptionTransition transitionWithNullPrev = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- null,
- transition.getNextSubscription()
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ null,
+ transition.getNextSubscription()
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullPrev);
@@ -179,13 +148,13 @@ public class TestAnalyticsDao
// Try now to store a look-alike transition (same fields except UUID) - we should store it this time
final BusinessSubscriptionTransition secondTransitionWithNullPrev = new BusinessSubscriptionTransition(
- UUID.randomUUID(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- null,
- transition.getNextSubscription()
+ UUID.randomUUID(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ null,
+ transition.getNextSubscription()
);
businessSubscriptionTransitionDao.createTransition(secondTransitionWithNullPrev);
transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
@@ -195,16 +164,15 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testTransitionsWithNullPrevSubscription()
- {
+ public void testTransitionsWithNullPrevSubscription() {
final BusinessSubscriptionTransition transitionWithNullPrev = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- null,
- transition.getNextSubscription()
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ null,
+ transition.getNextSubscription()
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullPrev);
@@ -214,16 +182,15 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testTransitionsWithNullNextSubscription()
- {
+ public void testTransitionsWithNullNextSubscription() {
final BusinessSubscriptionTransition transitionWithNullNext = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- transition.getPreviousSubscription(),
- null
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ transition.getPreviousSubscription(),
+ null
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullNext);
@@ -233,17 +200,16 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testTransitionsWithNullFieldsInSubscription()
- {
+ public void testTransitionsWithNullFieldsInSubscription() {
final BusinessSubscription subscriptionWithNullFields = new BusinessSubscription(null, plan.getName(), phase.getName(), Currency.USD, null, null, null, null, catalog);
final BusinessSubscriptionTransition transitionWithNullFields = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- subscriptionWithNullFields,
- subscriptionWithNullFields
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullFields,
+ subscriptionWithNullFields
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullFields);
@@ -253,17 +219,16 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testTransitionsWithNullPlanAndPhase() throws Exception
- {
+ public void testTransitionsWithNullPlanAndPhase() throws Exception {
final BusinessSubscription subscriptionWithNullPlanAndPhase = new BusinessSubscription(null, null, null, Currency.USD, null, null, null, null, catalog);
final BusinessSubscriptionTransition transitionWithNullPlanAndPhase = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- subscriptionWithNullPlanAndPhase,
- subscriptionWithNullPlanAndPhase
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullPlanAndPhase,
+ subscriptionWithNullPlanAndPhase
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullPlanAndPhase);
@@ -277,17 +242,16 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testTransitionsWithNullPlan() throws Exception
- {
+ public void testTransitionsWithNullPlan() throws Exception {
final BusinessSubscription subscriptionWithNullPlan = new BusinessSubscription(null, null, phase.getName(), Currency.USD, null, null, null, null, catalog);
final BusinessSubscriptionTransition transitionWithNullPlan = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- subscriptionWithNullPlan,
- subscriptionWithNullPlan
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullPlan,
+ subscriptionWithNullPlan
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullPlan);
@@ -298,17 +262,16 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testTransitionsWithNullPhase() throws Exception
- {
+ public void testTransitionsWithNullPhase() throws Exception {
final BusinessSubscription subscriptionWithNullPhase = new BusinessSubscription(null, plan.getName(), null, Currency.USD, null, null, null, null, catalog);
final BusinessSubscriptionTransition transitionWithNullPhase = new BusinessSubscriptionTransition(
- transition.getId(),
- transition.getKey(),
- transition.getAccountKey(),
- transition.getRequestedTimestamp(),
- transition.getEvent(),
- subscriptionWithNullPhase,
- subscriptionWithNullPhase
+ transition.getId(),
+ transition.getKey(),
+ transition.getAccountKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullPhase,
+ subscriptionWithNullPhase
);
businessSubscriptionTransitionDao.createTransition(transitionWithNullPhase);
@@ -325,8 +288,7 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testCreateAndRetrieveTransitions()
- {
+ public void testCreateAndRetrieveTransitions() {
businessSubscriptionTransitionDao.createTransition(transition);
final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
@@ -337,8 +299,7 @@ public class TestAnalyticsDao
}
@Test(groups = "slow")
- public void testCreateSaveAndRetrieveAccounts()
- {
+ public void testCreateSaveAndRetrieveAccounts() {
// Create and retrieve an account
businessAccountDao.createAccount(account);
final BusinessAccount foundAccount = businessAccountDao.getAccount(ACCOUNT_KEY);
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 6a11803..bdad487 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
@@ -25,14 +25,12 @@ import com.ning.billing.account.api.MutableAccountData;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.junction.api.BlockingState;
-public class MockAccount implements Account
-{
+public class MockAccount implements Account {
private final UUID id;
private final String accountKey;
private final Currency currency;
- public MockAccount(final UUID id, final String accountKey, final Currency currency)
- {
+ public MockAccount(final UUID id, final String accountKey, final Currency currency) {
this.id = id;
this.accountKey = accountKey;
this.currency = currency;
@@ -44,14 +42,12 @@ public class MockAccount implements Account
}
@Override
- public String getEmail()
- {
+ public String getEmail() {
return "test@test.com";
}
@Override
- public String getPhone()
- {
+ public String getPhone() {
return "408-555-6665";
}
@@ -66,8 +62,7 @@ public class MockAccount implements Account
}
@Override
- public String getExternalKey()
- {
+ public String getExternalKey() {
return accountKey;
}
@@ -77,14 +72,12 @@ public class MockAccount implements Account
}
@Override
- public int getBillCycleDay()
- {
+ public int getBillCycleDay() {
return 12;
}
@Override
- public Currency getCurrency()
- {
+ public Currency getCurrency() {
return currency;
}
@@ -139,8 +132,7 @@ public class MockAccount implements Account
}
@Override
- public UUID getId()
- {
+ public UUID getId() {
return id;
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockAccountUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockAccountUserApi.java
index 795360f..d650fe2 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccountUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccountUserApi.java
@@ -19,35 +19,32 @@ package com.ning.billing.analytics;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.account.api.AccountEmail;
-import com.ning.billing.util.tag.TagDefinition;
import org.apache.commons.lang.NotImplementedException;
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.AccountEmail;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.account.api.DefaultAccount;
import com.ning.billing.account.api.MigrationAccountData;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.customfield.CustomField;
+import com.ning.billing.util.tag.TagDefinition;
-public class MockAccountUserApi implements AccountUserApi
-{
+public class MockAccountUserApi implements AccountUserApi {
private final AccountData account;
private final UUID id;
- public MockAccountUserApi(final String accountKey, final Currency currency)
- {
+ public MockAccountUserApi(final String accountKey, final Currency currency) {
this.id = UUID.randomUUID();
account = new MockAccount(id, accountKey, currency);
}
@Override
public Account createAccount(final AccountData data, final List<CustomField> fields,
- final List<TagDefinition> tagDefinitions, final CallContext context)
- {
+ final List<TagDefinition> tagDefinitions, final CallContext context) {
throw new UnsupportedOperationException();
}
@@ -57,8 +54,7 @@ public class MockAccountUserApi implements AccountUserApi
}
@Override
- public Account getAccountByKey(final String key)
- {
+ public Account getAccountByKey(final String key) {
throw new UnsupportedOperationException();
}
@@ -68,8 +64,7 @@ public class MockAccountUserApi implements AccountUserApi
}
@Override
- public List<Account> getAccounts()
- {
+ public List<Account> getAccounts() {
throw new UnsupportedOperationException();
}
@@ -89,17 +84,17 @@ public class MockAccountUserApi implements AccountUserApi
}
@Override
- public Account migrateAccount(MigrationAccountData data,
- List<CustomField> fields, List<TagDefinition> tagDefinitions, final CallContext context)
- throws AccountApiException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void updateAccount(String key, AccountData accountData, final CallContext context)
- throws AccountApiException {
- throw new UnsupportedOperationException();
- }
+ public Account migrateAccount(MigrationAccountData data,
+ List<CustomField> fields, List<TagDefinition> tagDefinitions, final CallContext context)
+ throws AccountApiException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void updateAccount(String key, AccountData accountData, final CallContext context)
+ throws AccountApiException {
+ throw new UnsupportedOperationException();
+ }
@Override
public void updateAccount(UUID accountId, AccountData accountData, CallContext context)
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockBusinessSubscriptionTransitionDao.java b/analytics/src/test/java/com/ning/billing/analytics/MockBusinessSubscriptionTransitionDao.java
index d7e36b4..68012eb 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockBusinessSubscriptionTransitionDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockBusinessSubscriptionTransitionDao.java
@@ -16,28 +16,26 @@
package com.ning.billing.analytics;
-import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionBinder;
-import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
-import org.skife.jdbi.v2.sqlobject.Bind;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-public class MockBusinessSubscriptionTransitionDao implements BusinessSubscriptionTransitionDao
-{
+import org.skife.jdbi.v2.sqlobject.Bind;
+
+import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionBinder;
+import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
+
+public class MockBusinessSubscriptionTransitionDao implements BusinessSubscriptionTransitionDao {
private final Map<String, List<BusinessSubscriptionTransition>> content = new HashMap<String, List<BusinessSubscriptionTransition>>();
@Override
- public List<BusinessSubscriptionTransition> getTransitions(@Bind("event_key") final String key)
- {
+ public List<BusinessSubscriptionTransition> getTransitions(@Bind("event_key") final String key) {
return content.get(key);
}
@Override
- public int createTransition(@BusinessSubscriptionTransitionBinder final BusinessSubscriptionTransition transition)
- {
+ public int createTransition(@BusinessSubscriptionTransitionBinder final BusinessSubscriptionTransition transition) {
if (content.get(transition.getKey()) == null) {
content.put(transition.getKey(), new ArrayList<BusinessSubscriptionTransition>());
}
@@ -46,7 +44,6 @@ public class MockBusinessSubscriptionTransitionDao implements BusinessSubscripti
}
@Override
- public void test()
- {
+ public void test() {
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockDuration.java b/analytics/src/test/java/com/ning/billing/analytics/MockDuration.java
index e2fa1a2..2bc723b 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockDuration.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockDuration.java
@@ -16,27 +16,23 @@
package com.ning.billing.analytics;
-import com.ning.billing.catalog.api.Duration;
-import com.ning.billing.catalog.api.TimeUnit;
import org.apache.commons.lang.NotImplementedException;
import org.joda.time.DateTime;
import org.joda.time.Period;
-public class MockDuration
-{
- public static Duration MONHTLY()
- {
- return new Duration()
- {
+import com.ning.billing.catalog.api.Duration;
+import com.ning.billing.catalog.api.TimeUnit;
+
+public class MockDuration {
+ public static Duration MONHTLY() {
+ return new Duration() {
@Override
- public TimeUnit getUnit()
- {
+ public TimeUnit getUnit() {
return TimeUnit.MONTHS;
}
@Override
- public int getNumber()
- {
+ public int getNumber() {
return 1;
}
@@ -44,6 +40,7 @@ public class MockDuration
public DateTime addToDateTime(DateTime dateTime) {
throw new NotImplementedException();
}
+
@Override
public Period toJodaPeriod() {
throw new UnsupportedOperationException();
@@ -51,19 +48,15 @@ public class MockDuration
};
}
- public static Duration YEARLY()
- {
- return new Duration()
- {
+ public static Duration YEARLY() {
+ return new Duration() {
@Override
- public TimeUnit getUnit()
- {
+ public TimeUnit getUnit() {
return TimeUnit.YEARS;
}
@Override
- public int getNumber()
- {
+ public int getNumber() {
return 1;
}
@@ -71,6 +64,7 @@ public class MockDuration
public DateTime addToDateTime(DateTime dateTime) {
throw new NotImplementedException();
}
+
@Override
public Period toJodaPeriod() {
throw new UnsupportedOperationException();
@@ -78,19 +72,15 @@ public class MockDuration
};
}
- public static Duration UNLIMITED()
- {
- return new Duration()
- {
+ public static Duration UNLIMITED() {
+ return new Duration() {
@Override
- public TimeUnit getUnit()
- {
+ public TimeUnit getUnit() {
return TimeUnit.UNLIMITED;
}
@Override
- public int getNumber()
- {
+ public int getNumber() {
return 1;
}
@@ -98,6 +88,7 @@ public class MockDuration
public DateTime addToDateTime(DateTime dateTime) {
throw new NotImplementedException();
}
+
@Override
public Period toJodaPeriod() {
throw new UnsupportedOperationException();
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockEntitlementUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockEntitlementUserApi.java
index 725c62b..789edfc 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockEntitlementUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockEntitlementUserApi.java
@@ -33,46 +33,38 @@ import com.ning.billing.junction.api.BlockingState;
import com.ning.billing.overdue.OverdueState;
import com.ning.billing.util.callcontext.CallContext;
-public class MockEntitlementUserApi implements EntitlementUserApi
-{
+public class MockEntitlementUserApi implements EntitlementUserApi {
private final Map<UUID, String> subscriptionBundles = new HashMap<UUID, String>();
- public MockEntitlementUserApi(final UUID bundleUUID, final String key)
- {
+ public MockEntitlementUserApi(final UUID bundleUUID, final String key) {
subscriptionBundles.put(bundleUUID, key);
}
@Override
- public SubscriptionBundle getBundleFromId(final UUID id)
- {
+ public SubscriptionBundle getBundleFromId(final UUID id) {
final String key = subscriptionBundles.get(id);
if (key == null) {
return null;
}
- return new SubscriptionBundle()
- {
+ return new SubscriptionBundle() {
@Override
- public UUID getAccountId()
- {
+ public UUID getAccountId() {
return UUID.randomUUID();
}
@Override
- public UUID getId()
- {
+ public UUID getId() {
return id;
}
@Override
- public DateTime getStartDate()
- {
+ public DateTime getStartDate() {
throw new UnsupportedOperationException();
}
@Override
- public String getKey()
- {
+ public String getKey() {
return key;
}
@@ -89,26 +81,22 @@ public class MockEntitlementUserApi implements EntitlementUserApi
}
@Override
- public Subscription getSubscriptionFromId(final UUID id)
- {
+ public Subscription getSubscriptionFromId(final UUID id) {
throw new UnsupportedOperationException();
}
@Override
- public List<SubscriptionBundle> getBundlesForAccount(final UUID accountId)
- {
+ public List<SubscriptionBundle> getBundlesForAccount(final UUID accountId) {
throw new UnsupportedOperationException();
}
@Override
- public List<Subscription> getSubscriptionsForBundle(final UUID bundleId)
- {
+ public List<Subscription> getSubscriptionsForBundle(final UUID bundleId) {
throw new UnsupportedOperationException();
}
@Override
- public SubscriptionBundle createBundleForAccount(final UUID accountId, final String bundleKey, CallContext context) throws EntitlementUserApiException
- {
+ public SubscriptionBundle createBundleForAccount(final UUID accountId, final String bundleKey, CallContext context) throws EntitlementUserApiException {
throw new UnsupportedOperationException();
}
@@ -117,21 +105,21 @@ public class MockEntitlementUserApi implements EntitlementUserApi
throw new UnsupportedOperationException();
}
- @Override
- public Subscription createSubscription(UUID bundleId, PlanPhaseSpecifier spec,
- DateTime requestedDate, CallContext context) throws EntitlementUserApiException {
+ @Override
+ public Subscription createSubscription(UUID bundleId, PlanPhaseSpecifier spec,
+ DateTime requestedDate, CallContext context) throws EntitlementUserApiException {
throw new UnsupportedOperationException();
- }
+ }
@Override
public SubscriptionBundle getBundleForKey(String bundleKey) {
throw new UnsupportedOperationException();
}
- @Override
- public DateTime getNextBillingDate(UUID account) {
- throw new UnsupportedOperationException();
- }
+ @Override
+ public DateTime getNextBillingDate(UUID account) {
+ throw new UnsupportedOperationException();
+ }
@Override
public Subscription getBaseSubscription(UUID bundleId) {
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java b/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
index 10b5c70..c3779df 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
@@ -16,6 +16,8 @@
package com.ning.billing.analytics;
+import java.math.BigDecimal;
+
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.Duration;
@@ -25,17 +27,13 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.Price;
-import java.math.BigDecimal;
-
-public class MockPhase implements PlanPhase
-{
+public class MockPhase implements PlanPhase {
private final PhaseType cohort;
private final Plan plan;
private final Duration duration;
private final double price;
- public MockPhase(final PhaseType cohort, final Plan plan, final Duration duration, final double price)
- {
+ public MockPhase(final PhaseType cohort, final Plan plan, final Duration duration, final double price) {
this.cohort = cohort;
this.plan = plan;
this.duration = duration;
@@ -43,86 +41,72 @@ public class MockPhase implements PlanPhase
}
@Override
- public InternationalPrice getRecurringPrice()
- {
- return new InternationalPrice()
- {
+ public InternationalPrice getRecurringPrice() {
+ return new InternationalPrice() {
@Override
- public Price[] getPrices()
- {
+ public Price[] getPrices() {
throw new UnsupportedOperationException();
}
@Override
- public BigDecimal getPrice(final Currency currency)
- {
+ public BigDecimal getPrice(final Currency currency) {
return BigDecimal.valueOf(price);
}
- @Override
- public boolean isZero() {
- return price == 0.0;
- }
+ @Override
+ public boolean isZero() {
+ return price == 0.0;
+ }
- };
+ };
}
@Override
- public InternationalPrice getFixedPrice()
- {
- return new InternationalPrice()
- {
+ public InternationalPrice getFixedPrice() {
+ return new InternationalPrice() {
@Override
- public Price[] getPrices()
- {
+ public Price[] getPrices() {
throw new UnsupportedOperationException();
}
@Override
- public BigDecimal getPrice(final Currency currency)
- {
+ public BigDecimal getPrice(final Currency currency) {
return BigDecimal.valueOf(price);
}
-
- @Override
- public boolean isZero() {
- return price == 0.0;
- }
+
+ @Override
+ public boolean isZero() {
+ return price == 0.0;
+ }
};
}
@Override
- public BillingPeriod getBillingPeriod()
- {
+ public BillingPeriod getBillingPeriod() {
return null;
}
@Override
- public String getName()
- {
+ public String getName() {
if (plan == null) {
return null;
- }
- else {
+ } else {
return plan.getName() + "-" + cohort;
}
}
@Override
- public Plan getPlan()
- {
+ public Plan getPlan() {
return plan;
}
@Override
- public Duration getDuration()
- {
+ public Duration getDuration() {
return duration;
}
@Override
- public PhaseType getPhaseType()
- {
+ public PhaseType getPhaseType() {
return cohort;
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockPlan.java b/analytics/src/test/java/com/ning/billing/analytics/MockPlan.java
index d611eee..49dc993 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockPlan.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockPlan.java
@@ -16,95 +16,84 @@
package com.ning.billing.analytics;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.joda.time.DateTime;
+
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.CatalogApiException;
-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 java.util.Date;
-import java.util.Iterator;
-
-import org.joda.time.DateTime;
-
-public class MockPlan implements Plan
-{
+public class MockPlan implements Plan {
private final String name;
private final Product product;
- public MockPlan(final String name, final Product product)
- {
+ public MockPlan(final String name, final Product product) {
this.name = name;
this.product = product;
}
@Override
- public PlanPhase[] getInitialPhases()
- {
+ public PlanPhase[] getInitialPhases() {
throw new UnsupportedOperationException();
}
@Override
- public Product getProduct()
- {
+ public Product getProduct() {
return product;
}
@Override
- public String getName()
- {
+ public String getName() {
return name;
}
-
+
@Override
- public Date getEffectiveDateForExistingSubscriptons()
- {
+ public Date getEffectiveDateForExistingSubscriptons() {
return new Date();
}
@Override
- public Iterator<PlanPhase> getInitialPhaseIterator()
- {
+ public Iterator<PlanPhase> getInitialPhaseIterator() {
throw new UnsupportedOperationException();
}
@Override
- public PlanPhase getFinalPhase()
- {
+ public PlanPhase getFinalPhase() {
throw new UnsupportedOperationException();
}
@Override
- public BillingPeriod getBillingPeriod()
- {
+ public BillingPeriod getBillingPeriod() {
throw new UnsupportedOperationException();
}
@Override
- public int getPlansAllowedInBundle()
- {
+ public int getPlansAllowedInBundle() {
throw new UnsupportedOperationException();
}
- @Override
- public PlanPhase[] getAllPhases() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public PlanPhase findPhase(String name) throws CatalogApiException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isRetired() {
- return false;
- }
-
- @Override
- public DateTime dateOfFirstRecurringNonZeroCharge(
- DateTime subscriptionStartDate) {
- throw new UnsupportedOperationException();
- }
+ @Override
+ public PlanPhase[] getAllPhases() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public PlanPhase findPhase(String name) throws CatalogApiException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isRetired() {
+ return false;
+ }
+
+ @Override
+ public DateTime dateOfFirstRecurringNonZeroCharge(
+ DateTime subscriptionStartDate) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockProduct.java b/analytics/src/test/java/com/ning/billing/analytics/MockProduct.java
index 36fba0d..624768e 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockProduct.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockProduct.java
@@ -19,51 +19,44 @@ package com.ning.billing.analytics;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
-public class MockProduct implements Product
-{
+public class MockProduct implements Product {
private final String name;
private final String type;
private final ProductCategory category;
- public MockProduct(final String name, final String type, final ProductCategory category)
- {
+ public MockProduct(final String name, final String type, final ProductCategory category) {
this.name = name;
this.type = type;
this.category = category;
}
@Override
- public String getCatalogName()
- {
+ public String getCatalogName() {
return type;
}
@Override
- public String getName()
- {
+ public String getName() {
return name;
}
@Override
- public ProductCategory getCategory()
- {
+ public ProductCategory getCategory() {
return category;
}
@Override
- public Product[] getAvailable()
- {
+ public Product[] getAvailable() {
return null;
}
@Override
- public Product[] getIncluded()
- {
+ public Product[] getIncluded() {
return null;
}
- @Override
- public boolean isRetired() {
- return false;
- }
+ @Override
+ public boolean isRetired() {
+ return false;
+ }
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
index 9ce97a4..385599f 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
@@ -34,8 +34,7 @@ import com.ning.billing.entitlement.api.user.SubscriptionEvent;
import com.ning.billing.junction.api.BlockingState;
import com.ning.billing.util.callcontext.CallContext;
-public class MockSubscription implements Subscription
-{
+public class MockSubscription implements Subscription {
private static final UUID ID = UUID.randomUUID();
private static final UUID BUNDLE_ID = UUID.randomUUID();
private static final DateTime START_DATE = new DateTime(DateTimeZone.UTC);
@@ -44,71 +43,60 @@ public class MockSubscription implements Subscription
private final Plan plan;
private final PlanPhase phase;
- public MockSubscription(final SubscriptionState state, final Plan plan, final PlanPhase phase)
- {
+ public MockSubscription(final SubscriptionState state, final Plan plan, final PlanPhase phase) {
this.state = state;
this.plan = plan;
this.phase = phase;
}
@Override
- public boolean cancel(DateTime requestedDate, boolean eot, CallContext context)
- {
+ public boolean cancel(DateTime requestedDate, boolean eot, CallContext context) {
throw new UnsupportedOperationException();
}
@Override
- public boolean changePlan(final String productName, final BillingPeriod term, final String planSet, DateTime requestedDate, CallContext context)
- {
+ public boolean changePlan(final String productName, final BillingPeriod term, final String planSet, DateTime requestedDate, CallContext context) {
throw new UnsupportedOperationException();
}
@Override
- public UUID getId()
- {
+ public UUID getId() {
return ID;
}
@Override
- public UUID getBundleId()
- {
+ public UUID getBundleId() {
return BUNDLE_ID;
}
@Override
- public SubscriptionState getState()
- {
+ public SubscriptionState getState() {
return state;
}
@Override
- public DateTime getStartDate()
- {
+ public DateTime getStartDate() {
return START_DATE;
}
@Override
- public Plan getCurrentPlan()
- {
+ public Plan getCurrentPlan() {
return plan;
}
@Override
- public PlanPhase getCurrentPhase()
- {
+ public PlanPhase getCurrentPhase() {
return phase;
}
@Override
- public boolean uncancel(CallContext context) throws EntitlementUserApiException
- {
+ public boolean uncancel(CallContext context) throws EntitlementUserApiException {
throw new UnsupportedOperationException();
}
@Override
- public PriceList getCurrentPriceList()
- {
+ public PriceList getCurrentPriceList() {
return null;
}
@@ -122,15 +110,15 @@ public class MockSubscription implements Subscription
throw new UnsupportedOperationException();
}
- @Override
- public DateTime getChargedThroughDate() {
- throw new UnsupportedOperationException();
- }
+ @Override
+ public DateTime getChargedThroughDate() {
+ throw new UnsupportedOperationException();
+ }
- @Override
- public DateTime getPaidThroughDate() {
+ @Override
+ public DateTime getPaidThroughDate() {
throw new UnsupportedOperationException();
- }
+ }
@Override
public SubscriptionEvent getPreviousTransition() {
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 72aa146..6a03abc 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,19 @@
package com.ning.billing.analytics;
-import java.util.UUID;
-
import javax.annotation.Nullable;
+import java.util.UUID;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ning.billing.catalog.api.Catalog;
+import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
@@ -41,11 +42,8 @@ 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.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-public class TestAnalyticsListener
-{
+public class TestAnalyticsListener extends AnalyticsTestSuite {
private static final String KEY = "1234";
private static final String ACCOUNT_KEY = "pierre-1234";
private final Currency CURRENCY = Currency.BRL;
@@ -58,29 +56,26 @@ public class TestAnalyticsListener
private final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
private final PriceList priceList = null;
- private final CatalogService catalogService = BrainDeadProxyFactory.createBrainDeadProxyFor(CatalogService.class);
- private final Catalog catalog = BrainDeadProxyFactory.createBrainDeadProxyFor(Catalog.class);
-
-
+ private final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ private final Catalog catalog = Mockito.mock(Catalog.class);
+
private AnalyticsListener listener;
- @BeforeClass(alwaysRun = true)
- public void setupCatalog() {
- ((ZombieControl) catalog).addResult("findPlan", plan);
- ((ZombieControl) catalog).addResult("findPhase", phase);
- ((ZombieControl) catalogService).addResult("getFullCatalog", catalog);
-
+ @BeforeClass(groups = "fast")
+ public void setupCatalog() throws CatalogApiException {
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPhase(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(phase);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
}
- @BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception
- {
+
+ @BeforeMethod(groups = "fast")
+ public void setUp() throws Exception {
final BusinessSubscriptionTransitionRecorder recorder = new BusinessSubscriptionTransitionRecorder(dao, catalogService, new MockEntitlementUserApi(bundleUUID, KEY), new MockAccountUserApi(ACCOUNT_KEY, CURRENCY));
listener = new AnalyticsListener(recorder, null);
}
@Test(groups = "fast")
- public void testSubscriptionLifecycle() throws Exception
- {
+ public void testSubscriptionLifecycle() throws Exception {
// Create a subscription
final DateTime effectiveTransitionTime = new DateTime(DateTimeZone.UTC);
final DateTime requestedTransitionTime = effectiveTransitionTime;
@@ -99,7 +94,7 @@ public class TestAnalyticsListener
Assert.assertEquals(dao.getTransitions(KEY).size(), 2);
Assert.assertEquals(dao.getTransitions(KEY).get(1), cancelledBST);
- // Recreate it
+ // Recreate it
final DateTime effectiveRecreatedTransitionTime = new DateTime(DateTimeZone.UTC);
final DateTime requestedRecreatedTransitionTime = effectiveRecreatedTransitionTime;
final SubscriptionTransitionData recreatedSubscriptionTransition = createRecreatedSubscriptionTransition(requestedRecreatedTransitionTime, effectiveRecreatedTransitionTime, cancelledSubscriptionTransition.getNextState());
@@ -110,164 +105,123 @@ public class TestAnalyticsListener
}
- private BusinessSubscriptionTransition createExpectedFirstBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime)
- {
+ private BusinessSubscriptionTransition createExpectedFirstBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime) {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCreated(plan.getName(), catalog, effectiveTransitionTime, effectiveTransitionTime);
-
+
final Subscription.SubscriptionState subscriptionState = Subscription.SubscriptionState.ACTIVE;
return createExpectedBST(id, event, requestedTransitionTime, effectiveTransitionTime, null, subscriptionState);
}
- private BusinessSubscriptionTransition createExpectedCancelledBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription)
- {
+ private BusinessSubscriptionTransition createExpectedCancelledBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription) {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan.getName(), catalog, effectiveTransitionTime, effectiveTransitionTime);
return createExpectedBST(id, event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, null);
}
- private BusinessSubscriptionTransition createExpectedRecreatedBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription)
- {
+ private BusinessSubscriptionTransition createExpectedRecreatedBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription) {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionRecreated(plan.getName(), catalog, effectiveTransitionTime, effectiveTransitionTime);
final Subscription.SubscriptionState subscriptionState = Subscription.SubscriptionState.ACTIVE;
return createExpectedBST(id, event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, subscriptionState);
}
-
private BusinessSubscriptionTransition createExpectedBST(
- final UUID eventId,
- final BusinessSubscriptionEvent eventType,
- final DateTime requestedTransitionTime,
- final DateTime effectiveTransitionTime,
- @Nullable final BusinessSubscription previousSubscription,
- @Nullable final Subscription.SubscriptionState nextState
- )
- {
+ final UUID eventId,
+ final BusinessSubscriptionEvent eventType,
+ final DateTime requestedTransitionTime,
+ final DateTime effectiveTransitionTime,
+ @Nullable final BusinessSubscription previousSubscription,
+ @Nullable final Subscription.SubscriptionState nextState) {
return new BusinessSubscriptionTransition(
- eventId,
- KEY,
- ACCOUNT_KEY,
- requestedTransitionTime,
- eventType,
- previousSubscription,
- nextState == null ? null : new BusinessSubscription(
- null,
- plan.getName(),
- phase.getName(),
- CURRENCY,
- effectiveTransitionTime,
- nextState,
- subscriptionId,
- bundleUUID, catalog
- )
+ eventId,
+ KEY,
+ ACCOUNT_KEY,
+ requestedTransitionTime,
+ eventType,
+ previousSubscription,
+ nextState == null ? null : new BusinessSubscription(
+ null,
+ plan.getName(),
+ phase.getName(),
+ CURRENCY,
+ effectiveTransitionTime,
+ nextState,
+ subscriptionId,
+ bundleUUID, catalog
+ )
);
}
- private SubscriptionTransitionData createFirstSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime)
- {
+ private SubscriptionTransitionData createFirstSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime) {
final ApiEventType eventType = ApiEventType.CREATE;
final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.ACTIVE;
return new SubscriptionTransitionData(
- UUID.randomUUID(),
- subscriptionId,
- bundleUUID,
- EntitlementEvent.EventType.API_USER,
- eventType,
- requestedTransitionTime,
- effectiveTransitionTime,
- null,
- null,
- null,
- null,
- nextState,
- plan,
- phase,
- priceList,
- 1L,
- null,
- true
+ UUID.randomUUID(),
+ subscriptionId,
+ bundleUUID,
+ EntitlementEvent.EventType.API_USER,
+ eventType,
+ requestedTransitionTime,
+ effectiveTransitionTime,
+ null,
+ null,
+ null,
+ null,
+ nextState,
+ plan,
+ phase,
+ priceList,
+ 1L,
+ null,
+ true
);
}
-
- private SubscriptionTransitionData createCancelSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
- {
+ private SubscriptionTransitionData createCancelSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState) {
final ApiEventType eventType = ApiEventType.CANCEL;
// next state is null for canceled events
return new SubscriptionTransitionData(
- UUID.randomUUID(),
- subscriptionId,
- bundleUUID,
- EntitlementEvent.EventType.API_USER,
- eventType,
- requestedTransitionTime,
- effectiveTransitionTime,
- previousState,
- plan,
- phase,
- priceList,
- null,
- null,
- null,
- null,
- 1L,
- null,
- true
+ UUID.randomUUID(),
+ subscriptionId,
+ bundleUUID,
+ EntitlementEvent.EventType.API_USER,
+ eventType,
+ requestedTransitionTime,
+ effectiveTransitionTime,
+ previousState,
+ plan,
+ phase,
+ priceList,
+ null,
+ null,
+ null,
+ null,
+ 1L,
+ null,
+ true
);
}
- private SubscriptionTransitionData createRecreatedSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
- {
+ private SubscriptionTransitionData createRecreatedSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState) {
final ApiEventType eventType = ApiEventType.RE_CREATE;
final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.ACTIVE;
return new SubscriptionTransitionData(
- UUID.randomUUID(),
- subscriptionId,
- bundleUUID,
- EntitlementEvent.EventType.API_USER,
- eventType,
- requestedTransitionTime,
- effectiveTransitionTime,
- previousState,
- null,
- null,
- null,
- nextState,
- plan,
- phase,
- priceList,
- 1L,
- null,
- true
- );
- }
-
-
- private SubscriptionTransitionData createSubscriptionTransition(
- final ApiEventType eventType,
- final DateTime requestedTransitionTime,
- final DateTime effectiveTransitionTime,
- final Subscription.SubscriptionState previousState,
- final Subscription.SubscriptionState nextState
- )
- {
- return new SubscriptionTransitionData(
- UUID.randomUUID(),
- subscriptionId,
- bundleUUID,
- EntitlementEvent.EventType.API_USER,
- eventType,
- requestedTransitionTime,
- effectiveTransitionTime,
- previousState,
- plan,
- phase,
- priceList,
- nextState,
- plan,
- phase,
- priceList,
- 1L,
- null,
- true
+ UUID.randomUUID(),
+ subscriptionId,
+ bundleUUID,
+ EntitlementEvent.EventType.API_USER,
+ eventType,
+ requestedTransitionTime,
+ effectiveTransitionTime,
+ previousState,
+ null,
+ null,
+ null,
+ nextState,
+ plan,
+ phase,
+ priceList,
+ 1L,
+ null,
+ true
);
}
}
\ No newline at end of file
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java
index 35eb2f0..74cf66d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessAccount.java
@@ -16,29 +16,27 @@
package com.ning.billing.analytics;
-import com.ning.billing.mock.BrainDeadProxyFactory;
-import com.ning.billing.util.tag.Tag;
+import java.math.BigDecimal;
+import java.util.Collections;
+
import org.joda.time.DateTime;
+import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import java.math.BigDecimal;
-import java.util.Collections;
+import com.ning.billing.util.tag.Tag;
-public class TestBusinessAccount
-{
+public class TestBusinessAccount extends AnalyticsTestSuite {
private BusinessAccount account;
- @BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception
- {
+ @BeforeMethod(groups = "fast")
+ public void setUp() throws Exception {
account = new BusinessAccount("pierre", BigDecimal.ONE, Collections.singletonList(getMockTag("batch15")), new DateTime(), BigDecimal.TEN, "ERROR_NOT_ENOUGH_FUNDS", "CreditCard", "Visa", "");
}
- @Test(groups = "fast", enabled = false)
- public void testEquals() throws Exception
- {
+ @Test(groups = "fast")
+ public void testEquals() throws Exception {
Assert.assertSame(account, account);
Assert.assertEquals(account, account);
Assert.assertTrue(account.equals(account));
@@ -47,10 +45,10 @@ public class TestBusinessAccount
Assert.assertFalse(account.equals(otherAccount));
}
- private Tag getMockTag(String tagDefinitionName) {
- Tag tag = BrainDeadProxyFactory.createBrainDeadProxyFor(Tag.class);
- BrainDeadProxyFactory.ZombieControl zombie = (BrainDeadProxyFactory.ZombieControl) tag;
- zombie.addResult("getTagDefinitionName", tagDefinitionName);
+ private Tag getMockTag(final String tagDefinitionName) {
+ final Tag tag = Mockito.mock(Tag.class);
+ Mockito.when(tag.getTagDefinitionName()).thenReturn(tagDefinitionName);
+ Mockito.when(tag.toString()).thenReturn(tagDefinitionName);
return tag;
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
index 2df0aeb..7550af0 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
@@ -16,6 +16,14 @@
package com.ning.billing.analytics;
+import java.math.BigDecimal;
+
+import org.joda.time.DateTime;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Duration;
@@ -25,33 +33,23 @@ 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.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.math.BigDecimal;
import static com.ning.billing.catalog.api.Currency.USD;
-public class TestBusinessSubscription
-{
+public class TestBusinessSubscription extends AnalyticsTestSuite {
private final Duration MONTHLY = MockDuration.MONHTLY();
private final Duration YEARLY = MockDuration.YEARLY();
final Object[][] catalogMapping = {
- {MONTHLY, 229.0000, 229.0000},
- {MONTHLY, 19.9500, 19.9500},
- {MONTHLY, 14.9500, 14.9500},
- {MONTHLY, 12.9500, 12.9500},
- {YEARLY, 19.9500, 1.6625},
- {YEARLY, 399.0000, 33.2500},
- {YEARLY, 29.9500, 2.4958},
- {YEARLY, 59.0000, 4.9167},
- {YEARLY, 18.2900, 1.5242},
- {YEARLY, 49.0000, 4.0833}};
+ {MONTHLY, 229.0000, 229.0000},
+ {MONTHLY, 19.9500, 19.9500},
+ {MONTHLY, 14.9500, 14.9500},
+ {MONTHLY, 12.9500, 12.9500},
+ {YEARLY, 19.9500, 1.6625},
+ {YEARLY, 399.0000, 33.2500},
+ {YEARLY, 29.9500, 2.4958},
+ {YEARLY, 59.0000, 4.9167},
+ {YEARLY, 18.2900, 1.5242},
+ {YEARLY, 49.0000, 4.0833}};
private Product product;
private Plan plan;
@@ -59,28 +57,26 @@ public class TestBusinessSubscription
private Subscription isubscription;
private BusinessSubscription subscription;
- private final CatalogService catalogService = BrainDeadProxyFactory.createBrainDeadProxyFor(CatalogService.class);
- private final Catalog catalog = BrainDeadProxyFactory.createBrainDeadProxyFor(Catalog.class);
-
+ private final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ private final Catalog catalog = Mockito.mock(Catalog.class);
- @BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception
- {
+ @BeforeMethod(groups = "fast")
+ public void setUp() throws Exception {
product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
plan = new MockPlan("platinum-monthly", product);
phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- ((ZombieControl) catalog).addResult("findPlan", plan);
- ((ZombieControl) catalog).addResult("findPhase", phase);
- ((ZombieControl) catalogService).addResult("getFullCatalog", catalog);
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPhase(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(phase);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
isubscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
subscription = new BusinessSubscription(isubscription, USD, catalog);
}
@Test(groups = "fast")
- public void testMrrComputation() throws Exception
- {
+ public void testMrrComputation() throws Exception {
int i = 0;
for (final Object[] object : catalogMapping) {
final Duration duration = (Duration) object[0];
@@ -94,8 +90,7 @@ public class TestBusinessSubscription
}
@Test(groups = "fast")
- public void testConstructor() throws Exception
- {
+ public void testConstructor() throws Exception {
Assert.assertEquals(subscription.getRoundedMrr(), 0.0);
Assert.assertEquals(subscription.getSlug(), phase.getName());
Assert.assertEquals(subscription.getPhase(), phase.getPhaseType().toString());
@@ -108,8 +103,7 @@ public class TestBusinessSubscription
}
@Test(groups = "fast")
- public void testEquals() throws Exception
- {
+ public void testEquals() throws Exception {
Assert.assertSame(subscription, subscription);
Assert.assertEquals(subscription, subscription);
Assert.assertTrue(subscription.equals(subscription));
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
index e42c72f..1f61885 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
@@ -16,6 +16,12 @@
package com.ning.billing.analytics;
+import org.joda.time.DateTime;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.PhaseType;
@@ -24,42 +30,32 @@ 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.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-
-import org.joda.time.DateTime;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-public class TestBusinessSubscriptionEvent
-{
+public class TestBusinessSubscriptionEvent extends AnalyticsTestSuite {
private Product product;
private Plan plan;
private PlanPhase phase;
private Subscription subscription;
- private final CatalogService catalogService = BrainDeadProxyFactory.createBrainDeadProxyFor(CatalogService.class);
- private final Catalog catalog = BrainDeadProxyFactory.createBrainDeadProxyFor(Catalog.class);
-
- @BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception
- {
+ private final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ private final Catalog catalog = Mockito.mock(Catalog.class);
+
+ @BeforeMethod(groups = "fast")
+ public void setUp() throws Exception {
product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
plan = new MockPlan("platinum-monthly", product);
phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- ((ZombieControl) catalog).addResult("findPlan", plan);
- ((ZombieControl) catalog).addResult("findPhase", phase);
- ((ZombieControl) catalogService).addResult("getFullCatalog", catalog);
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPhase(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(phase);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
subscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
}
@Test(groups = "fast")
- public void testValueOf() throws Exception
- {
+ public void testValueOf() throws Exception {
BusinessSubscriptionEvent event;
event = BusinessSubscriptionEvent.valueOf("ADD_ADD_ON");
@@ -76,12 +72,11 @@ public class TestBusinessSubscriptionEvent
}
@Test(groups = "fast")
- public void testFromSubscription() throws Exception
- {
+ public void testFromSubscription() throws Exception {
BusinessSubscriptionEvent event;
- DateTime now = new DateTime();
-
+ final DateTime now = new DateTime();
+
event = BusinessSubscriptionEvent.subscriptionCreated(subscription.getCurrentPlan().getName(), catalog, now, now);
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.ADD);
Assert.assertEquals(event.getCategory(), product.getCategory());
@@ -112,9 +107,8 @@ public class TestBusinessSubscriptionEvent
}
@Test(groups = "fast")
- public void testEquals() throws Exception
- {
- DateTime now = new DateTime();
+ public void testEquals() throws Exception {
+ final DateTime now = new DateTime();
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionChanged(subscription.getCurrentPlan().getName(), catalog, now, now);
Assert.assertSame(event, event);
Assert.assertEquals(event, event);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
index be27a91..952f797 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
@@ -16,6 +16,15 @@
package com.ning.billing.analytics;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.PhaseType;
@@ -24,21 +33,10 @@ 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.mock.BrainDeadProxyFactory;
-import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
-
-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 static com.ning.billing.catalog.api.Currency.USD;
-public class TestBusinessSubscriptionTransition
-{
+public class TestBusinessSubscriptionTransition extends AnalyticsTestSuite {
private BusinessSubscription prevSubscription;
private BusinessSubscription nextSubscription;
private BusinessSubscriptionEvent event;
@@ -48,24 +46,23 @@ public class TestBusinessSubscriptionTransition
private String accountKey;
private BusinessSubscriptionTransition transition;
- private final CatalogService catalogService = BrainDeadProxyFactory.createBrainDeadProxyFor(CatalogService.class);
- private final Catalog catalog = BrainDeadProxyFactory.createBrainDeadProxyFor(Catalog.class);
-
+ private final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ private final Catalog catalog = Mockito.mock(Catalog.class);
+
@BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception
- {
+ public void setUp() throws Exception {
final Product product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
final Plan plan = new MockPlan("platinum-monthly", product);
final PlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
final Subscription prevISubscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
final Subscription nextISubscription = new MockSubscription(Subscription.SubscriptionState.CANCELLED, plan, phase);
- ((ZombieControl) catalog).addResult("findPlan", plan);
- ((ZombieControl) catalog).addResult("findPhase", phase);
- ((ZombieControl) catalogService).addResult("getFullCatalog", catalog);
-
- DateTime now = new DateTime();
-
+ Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any())).thenReturn(plan);
+ Mockito.when(catalog.findPhase(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(phase);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
+
+ final DateTime now = new DateTime();
+
prevSubscription = new BusinessSubscription(prevISubscription, USD, catalog);
nextSubscription = new BusinessSubscription(nextISubscription, USD, catalog);
event = BusinessSubscriptionEvent.subscriptionCancelled(prevISubscription.getCurrentPlan().getName(), catalog, now, now);
@@ -77,8 +74,7 @@ public class TestBusinessSubscriptionTransition
}
@Test(groups = "fast")
- public void testConstructor() throws Exception
- {
+ public void testConstructor() throws Exception {
Assert.assertEquals(transition.getEvent(), event);
Assert.assertEquals(transition.getPreviousSubscription(), prevSubscription);
Assert.assertEquals(transition.getNextSubscription(), nextSubscription);
@@ -86,8 +82,7 @@ public class TestBusinessSubscriptionTransition
}
@Test(groups = "fast")
- public void testEquals() throws Exception
- {
+ public void testEquals() throws Exception {
Assert.assertSame(transition, transition);
Assert.assertEquals(transition, transition);
Assert.assertTrue(transition.equals(transition));
@@ -111,37 +106,32 @@ public class TestBusinessSubscriptionTransition
}
@Test(groups = "fast")
- public void testRejectInvalidTransitions() throws Exception
- {
+ public void testRejectInvalidTransitions() throws Exception {
try {
new BusinessSubscriptionTransition(null, key, accountKey, requestedTimestamp, event, prevSubscription, nextSubscription);
Assert.fail();
- }
- catch (IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
Assert.assertTrue(true);
}
try {
new BusinessSubscriptionTransition(id, null, accountKey, requestedTimestamp, event, prevSubscription, nextSubscription);
Assert.fail();
- }
- catch (IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
Assert.assertTrue(true);
}
try {
new BusinessSubscriptionTransition(id, key, accountKey, null, event, prevSubscription, nextSubscription);
Assert.fail();
- }
- catch (IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
Assert.assertTrue(true);
}
try {
new BusinessSubscriptionTransition(id, key, accountKey, requestedTimestamp, null, prevSubscription, nextSubscription);
Assert.fail();
- }
- catch (IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
Assert.assertTrue(true);
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
new file mode 100644
index 0000000..b5cf557
--- /dev/null
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
@@ -0,0 +1,97 @@
+/*
+ * 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.analytics;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
+import com.ning.billing.catalog.api.Catalog;
+import com.ning.billing.catalog.api.CatalogService;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.api.user.SubscriptionEvent;
+
+public class TestBusinessSubscriptionTransitionRecorder extends AnalyticsTestSuite {
+ @Test(groups = "fast")
+ public void testCreateAddOn() throws Exception {
+ final UUID key = UUID.randomUUID();
+
+ // Setup the catalog
+ final CatalogService catalogService = Mockito.mock(CatalogService.class);
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(Mockito.mock(Catalog.class));
+
+ // Setup the dao
+ final BusinessSubscriptionTransitionDao dao = new MockBusinessSubscriptionTransitionDao();
+ // Add a previous subscription to make sure it doesn't impact the addon
+ final BusinessSubscription nextPrevSubscription = new BusinessSubscription(UUID.randomUUID().toString(),
+ UUID.randomUUID().toString(),
+ UUID.randomUUID().toString(),
+ Currency.USD,
+ new DateTime(DateTimeZone.UTC),
+ Subscription.SubscriptionState.ACTIVE,
+ UUID.randomUUID(),
+ UUID.randomUUID(),
+ catalogService.getFullCatalog());
+ dao.createTransition(new BusinessSubscriptionTransition(UUID.randomUUID(),
+ key.toString(),
+ UUID.randomUUID().toString(),
+ new DateTime(DateTimeZone.UTC),
+ BusinessSubscriptionEvent.valueOf("ADD_MISC"),
+ null,
+ nextPrevSubscription));
+
+ // Setup the entitlement API
+ final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
+ Mockito.when(bundle.getKey()).thenReturn(key.toString());
+ final EntitlementUserApi entitlementApi = Mockito.mock(EntitlementUserApi.class);
+ Mockito.when(entitlementApi.getBundleFromId(Mockito.<UUID>any())).thenReturn(bundle);
+
+ // Setup the account API
+ final Account account = Mockito.mock(Account.class);
+ Mockito.when(account.getExternalKey()).thenReturn(key.toString());
+ final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
+ Mockito.when(accountApi.getAccountById(bundle.getAccountId())).thenReturn(account);
+
+ final BusinessSubscriptionTransitionRecorder recorder = new BusinessSubscriptionTransitionRecorder(dao, catalogService, entitlementApi, accountApi);
+
+ // Create an new subscription event
+ final SubscriptionEvent event = Mockito.mock(SubscriptionEvent.class);
+ Mockito.when(event.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(event.getRequestedTransitionTime()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(event.getNextPlan()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(event.getEffectiveTransitionTime()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(event.getSubscriptionStartDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ recorder.subscriptionCreated(event);
+
+ Assert.assertEquals(dao.getTransitions(key.toString()).size(), 2);
+ final BusinessSubscriptionTransition transition = dao.getTransitions(key.toString()).get(1);
+ Assert.assertEquals(transition.getId(), event.getId());
+ Assert.assertEquals(transition.getAccountKey(), key.toString());
+ // Make sure all the prev_ columns are null
+ Assert.assertNull(transition.getPreviousSubscription());
+ }
+}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestWithEmbeddedDB.java b/analytics/src/test/java/com/ning/billing/analytics/TestWithEmbeddedDB.java
new file mode 100644
index 0000000..ad99469
--- /dev/null
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestWithEmbeddedDB.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.analytics;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.sql.SQLException;
+
+import org.apache.commons.io.IOUtils;
+import org.testng.annotations.AfterSuite;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeSuite;
+
+import com.google.common.io.Resources;
+import com.ning.billing.dbi.MysqlTestingHelper;
+
+public abstract class TestWithEmbeddedDB extends AnalyticsTestSuite {
+ protected static final MysqlTestingHelper helper = new MysqlTestingHelper();
+
+ public static MysqlTestingHelper getMysqlTestingHelper() {
+ return helper;
+ }
+
+ @BeforeSuite(groups = "slow")
+ public void startMysql() throws IOException, ClassNotFoundException, SQLException, URISyntaxException {
+ helper.startMysql();
+
+ for (final String pack : new String[]{"account", "analytics", "entitlement", "util", "payment", "invoice", "junction"}) {
+ final String ddl = IOUtils.toString(Resources.getResource("com/ning/billing/" + pack + "/ddl.sql").openStream());
+ helper.initDb(ddl);
+ }
+
+ helper.cleanupAllTables();
+ }
+
+ @BeforeMethod(alwaysRun = true)
+ public void cleanup() {
+ try {
+ helper.cleanupAllTables();
+ } catch (Exception ignored) {
+ }
+ }
+
+ @AfterSuite(groups = "slow")
+ public void shutdownMysql() throws IOException, ClassNotFoundException, SQLException, URISyntaxException {
+ try {
+ helper.cleanupAllTables();
+ helper.stopMysql();
+ } catch (Exception ignored) {
+ }
+ }
+}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java b/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java
index b3414d7..e685641 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/utils/TestRounder.java
@@ -16,16 +16,16 @@
package com.ning.billing.analytics.utils;
+import java.math.BigDecimal;
+
import org.testng.Assert;
import org.testng.annotations.Test;
-import java.math.BigDecimal;
+import com.ning.billing.analytics.AnalyticsTestSuite;
-public class TestRounder
-{
+public class TestRounder extends AnalyticsTestSuite {
@Test(groups = "fast")
- public void testRound() throws Exception
- {
+ public void testRound() throws Exception {
Assert.assertEquals(Rounder.round(null), 0.0);
Assert.assertEquals(Rounder.round(BigDecimal.ZERO), 0.0);
Assert.assertEquals(Rounder.round(BigDecimal.ONE), 1.0);
diff --git a/analytics/src/test/resources/log4j.xml b/analytics/src/test/resources/log4j.xml
index 82b5a26..292e955 100644
--- a/analytics/src/test/resources/log4j.xml
+++ b/analytics/src/test/resources/log4j.xml
@@ -14,7 +14,8 @@
~ License for the specific language governing permissions and limitations
~ under the License.
-->
-<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
+<!DOCTYPE log4j:configuration SYSTEM
+ "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
diff --git a/api/src/main/java/com/ning/billing/util/api/TagUserApi.java b/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
index fed7517..422221a 100644
--- a/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
+++ b/api/src/main/java/com/ning/billing/util/api/TagUserApi.java
@@ -20,9 +20,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.util.callcontext.CallContext;
-
import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
@@ -62,7 +60,7 @@ public interface TagUserApi {
public void deleteTagDefinition(String definitionName, CallContext context) throws TagDefinitionApiException;
/**
- *
+ *
* @param name
* @return the tag with this definition
* @throws TagDefinitionApiException
diff --git a/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java b/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java
index 8702b6f..6194d60 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/glue/CatalogModule.java
@@ -16,18 +16,36 @@
package com.ning.billing.catalog.glue;
+import java.util.Properties;
+
+import org.skife.config.ConfigSource;
+import org.skife.config.ConfigurationObjectFactory;
+import org.skife.config.SimplePropertyConfigSource;
+
import com.google.inject.AbstractModule;
import com.ning.billing.catalog.DefaultCatalogService;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.io.ICatalogLoader;
import com.ning.billing.catalog.io.VersionedCatalogLoader;
import com.ning.billing.config.CatalogConfig;
-import org.skife.config.ConfigurationObjectFactory;
public class CatalogModule extends AbstractModule {
+ final ConfigSource configSource;
+
+ public CatalogModule() {
+ this(System.getProperties());
+ }
+
+ public CatalogModule(final Properties properties) {
+ this(new SimplePropertyConfigSource(properties));
+ }
+
+ public CatalogModule(final ConfigSource configSource) {
+ this.configSource = configSource;
+ }
protected void installConfig() {
- final CatalogConfig config = new ConfigurationObjectFactory(System.getProperties()).build(CatalogConfig.class);
+ final CatalogConfig config = new ConfigurationObjectFactory(configSource).build(CatalogConfig.class);
bind(CatalogConfig.class).toInstance(config);
}
@@ -41,5 +59,4 @@ public class CatalogModule extends AbstractModule {
installConfig();
installCatalog();
}
-
}
jaxrs/pom.xml 11(+11 -0)
diff --git a/jaxrs/pom.xml b/jaxrs/pom.xml
index c8fc0cd..e0e04cb 100644
--- a/jaxrs/pom.xml
+++ b/jaxrs/pom.xml
@@ -45,6 +45,12 @@
<artifactId>killbill-api</artifactId>
</dependency>
<dependency>
+ <groupId>com.ning.billing</groupId>
+ <artifactId>killbill-util</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
@@ -61,6 +67,11 @@
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
index 22ae311..236b3bf 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJson.java
@@ -16,60 +16,59 @@
package com.ning.billing.jaxrs.json;
+import org.joda.time.DateTimeZone;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
-import org.joda.time.DateTimeZone;
-
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.catalog.api.Currency;
public class AccountJson extends AccountJsonSimple {
-
// STEPH Missing city, locale, postalCode from https://home.ninginc.com:8443/display/REVINFRA/Killbill+1.0+APIs
@JsonView(BundleTimelineViews.Base.class)
private final String name;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final Integer length;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String email;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final Integer billCycleDay;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String currency;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String paymentProvider;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String timeZone;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String address1;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String address2;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String company;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String state;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String country;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String phone;
- public AccountJson(Account account) {
+ public AccountJson(final Account account) {
super(account.getId().toString(), account.getExternalKey());
this.name = account.getName();
this.length = account.getFirstNameLength();
@@ -85,21 +84,24 @@ public class AccountJson extends AccountJsonSimple {
this.country = account.getCountry();
this.phone = account.getPhone();
}
-
+
public AccountData toAccountData() {
return new AccountData() {
@Override
public DateTimeZone getTimeZone() {
return (timeZone != null) ? DateTimeZone.forID(timeZone) : null;
}
+
@Override
public String getStateOrProvince() {
return state;
}
+
@Override
public String getPostalCode() {
return null;
}
+
@Override
public String getPhone() {
return phone;
@@ -119,51 +121,62 @@ public class AccountJson extends AccountJsonSimple {
public String getPaymentProviderName() {
return paymentProvider;
}
+
@Override
public String getName() {
return name;
}
+
@Override
public String getLocale() {
return null;
}
+
@Override
public int getFirstNameLength() {
return length;
}
+
@Override
public String getExternalKey() {
return externalKey;
}
+
@Override
public String getEmail() {
return email;
}
+
@Override
public Currency getCurrency() {
- Currency result = (currency != null) ? Currency.valueOf(currency) : Currency.USD;
- return result;
+ return (currency != null) ? Currency.valueOf(currency) : Currency.USD;
}
+
@Override
public String getCountry() {
return country;
}
+
@Override
public String getCompanyName() {
return company;
}
+
@Override
public String getCity() {
return null;
}
+
@Override
public int getBillCycleDay() {
return billCycleDay;
}
+
@Override
public String getAddress2() {
return address2;
}
+
@Override
public String getAddress1() {
return address1;
@@ -172,7 +185,7 @@ public class AccountJson extends AccountJsonSimple {
}
// Seems like Jackson (JacksonJsonProvider.readFrom(Class<Object>, Type, Annotation[], MediaType, MultivaluedMap<String,String>, InputStream) line: 443)
- // needs us to define a default CTOR to instanciate the class first.
+ // needs us to define a default CTOR to instantiate the class first.
public AccountJson() {
super();
this.name = null;
@@ -191,21 +204,21 @@ public class AccountJson extends AccountJsonSimple {
}
@JsonCreator
- public AccountJson(@JsonProperty("accountId") String accountId,
- @JsonProperty("name") String name,
- @JsonProperty("firstNameLength") Integer length,
- @JsonProperty("externalKey") String externalKey,
- @JsonProperty("email") String email,
- @JsonProperty("billingDay") Integer billCycleDay,
- @JsonProperty("currency") String currency,
- @JsonProperty("paymentProvider") String paymentProvider,
- @JsonProperty("timezone") String timeZone,
- @JsonProperty("address1") String address1,
- @JsonProperty("address2") String address2,
- @JsonProperty("company") String company,
- @JsonProperty("state") String state,
- @JsonProperty("country") String country,
- @JsonProperty("phone") String phone) {
+ public AccountJson(@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("billingDay") final Integer billCycleDay,
+ @JsonProperty("currency") final String currency,
+ @JsonProperty("paymentProvider") final String paymentProvider,
+ @JsonProperty("timezone") final String timeZone,
+ @JsonProperty("address1") final String address1,
+ @JsonProperty("address2") final String address2,
+ @JsonProperty("company") final String company,
+ @JsonProperty("state") final String state,
+ @JsonProperty("country") final String country,
+ @JsonProperty("phone") final String phone) {
super(accountId, externalKey);
this.name = name;
this.length = length;
@@ -274,130 +287,163 @@ public class AccountJson extends AccountJsonSimple {
return phone;
}
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((accountId == null) ? 0 : accountId.hashCode());
- result = prime * result
- + ((address1 == null) ? 0 : address1.hashCode());
- result = prime * result
- + ((address2 == null) ? 0 : address2.hashCode());
- result = prime * result
- + ((billCycleDay == null) ? 0 : billCycleDay.hashCode());
- result = prime * result + ((company == null) ? 0 : company.hashCode());
- result = prime * result + ((country == null) ? 0 : country.hashCode());
- result = prime * result
- + ((currency == null) ? 0 : currency.hashCode());
- result = prime * result + ((email == null) ? 0 : email.hashCode());
- result = prime * result
- + ((externalKey == null) ? 0 : externalKey.hashCode());
- result = prime * result + ((length == null) ? 0 : length.hashCode());
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result
- + ((paymentProvider == null) ? 0 : paymentProvider.hashCode());
- result = prime * result + ((phone == null) ? 0 : phone.hashCode());
- result = prime * result + ((state == null) ? 0 : state.hashCode());
- result = prime * result
- + ((timeZone == null) ? 0 : timeZone.hashCode());
- return result;
- }
-
- // Used to check POST versus GET
- public boolean equalsNoId(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- AccountJson other = (AccountJson) obj;
- if (address1 == null) {
- if (other.address1 != null)
- return false;
- } else if (!address1.equals(other.address1))
- return false;
- if (address2 == null) {
- if (other.address2 != null)
- return false;
- } else if (!address2.equals(other.address2))
- return false;
- if (billCycleDay == null) {
- if (other.billCycleDay != null)
- return false;
- } else if (!billCycleDay.equals(other.billCycleDay))
- return false;
- if (company == null) {
- if (other.company != null)
- return false;
- } else if (!company.equals(other.company))
- return false;
- if (country == null) {
- if (other.country != null)
- return false;
- } else if (!country.equals(other.country))
- return false;
- if (currency == null) {
- if (other.currency != null)
- return false;
- } else if (!currency.equals(other.currency))
- return false;
- if (email == null) {
- if (other.email != null)
- return false;
- } else if (!email.equals(other.email))
- return false;
- if (externalKey == null) {
- if (other.externalKey != null)
- return false;
- } else if (!externalKey.equals(other.externalKey))
- return false;
- if (length == null) {
- if (other.length != null)
- return false;
- } else if (!length.equals(other.length))
- return false;
- if (name == null) {
- if (other.name != null)
- return false;
- } else if (!name.equals(other.name))
- return false;
- if (paymentProvider == null) {
- if (other.paymentProvider != null)
- return false;
- } else if (!paymentProvider.equals(other.paymentProvider))
- return false;
- if (phone == null) {
- if (other.phone != null)
- return false;
- } else if (!phone.equals(other.phone))
- return false;
- if (state == null) {
- if (other.state != null)
- return false;
- } else if (!state.equals(other.state))
- return false;
- if (timeZone == null) {
- if (other.timeZone != null)
- return false;
- } else if (!timeZone.equals(other.timeZone))
- return false;
- return true;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (equalsNoId(obj) == false) {
- return false;
- } else {
- AccountJson other = (AccountJson) obj;
- if (accountId == null) {
- if (other.accountId != null)
- return false;
- } else if (!accountId.equals(other.accountId))
- return false;
- }
- return true;
- }
- }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((accountId == null) ? 0 : accountId.hashCode());
+ result = prime * result
+ + ((address1 == null) ? 0 : address1.hashCode());
+ result = prime * result
+ + ((address2 == null) ? 0 : address2.hashCode());
+ result = prime * result
+ + ((billCycleDay == null) ? 0 : billCycleDay.hashCode());
+ result = prime * result + ((company == null) ? 0 : company.hashCode());
+ result = prime * result + ((country == null) ? 0 : country.hashCode());
+ result = prime * result
+ + ((currency == null) ? 0 : currency.hashCode());
+ result = prime * result + ((email == null) ? 0 : email.hashCode());
+ result = prime * result
+ + ((externalKey == null) ? 0 : externalKey.hashCode());
+ result = prime * result + ((length == null) ? 0 : length.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result
+ + ((paymentProvider == null) ? 0 : paymentProvider.hashCode());
+ result = prime * result + ((phone == null) ? 0 : phone.hashCode());
+ result = prime * result + ((state == null) ? 0 : state.hashCode());
+ result = prime * result
+ + ((timeZone == null) ? 0 : timeZone.hashCode());
+ return result;
+ }
+
+ // Used to check POST versus GET
+ public boolean equalsNoId(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final AccountJson other = (AccountJson) obj;
+ if (address1 == null) {
+ if (other.address1 != null) {
+ return false;
+ }
+ } else if (!address1.equals(other.address1)) {
+ return false;
+ }
+ if (address2 == null) {
+ if (other.address2 != null) {
+ return false;
+ }
+ } else if (!address2.equals(other.address2)) {
+ return false;
+ }
+ if (billCycleDay == null) {
+ if (other.billCycleDay != null) {
+ return false;
+ }
+ } else if (!billCycleDay.equals(other.billCycleDay)) {
+ return false;
+ }
+ if (company == null) {
+ if (other.company != null) {
+ return false;
+ }
+ } else if (!company.equals(other.company)) {
+ return false;
+ }
+ if (country == null) {
+ if (other.country != null) {
+ return false;
+ }
+ } else if (!country.equals(other.country)) {
+ return false;
+ }
+ if (currency == null) {
+ if (other.currency != null) {
+ return false;
+ }
+ } else if (!currency.equals(other.currency)) {
+ return false;
+ }
+ if (email == null) {
+ if (other.email != null) {
+ return false;
+ }
+ } else if (!email.equals(other.email)) {
+ return false;
+ }
+ if (externalKey == null) {
+ if (other.externalKey != null) {
+ return false;
+ }
+ } else if (!externalKey.equals(other.externalKey)) {
+ return false;
+ }
+ if (length == null) {
+ if (other.length != null) {
+ return false;
+ }
+ } else if (!length.equals(other.length)) {
+ return false;
+ }
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ } else if (!name.equals(other.name)) {
+ return false;
+ }
+ if (paymentProvider == null) {
+ if (other.paymentProvider != null) {
+ return false;
+ }
+ } else if (!paymentProvider.equals(other.paymentProvider)) {
+ return false;
+ }
+ if (phone == null) {
+ if (other.phone != null) {
+ return false;
+ }
+ } else if (!phone.equals(other.phone)) {
+ return false;
+ }
+ if (state == null) {
+ if (other.state != null) {
+ return false;
+ }
+ } else if (!state.equals(other.state)) {
+ return false;
+ }
+ if (timeZone == null) {
+ if (other.timeZone != null) {
+ return false;
+ }
+ } else if (!timeZone.equals(other.timeZone)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (!equalsNoId(obj)) {
+ return false;
+ } else {
+ final AccountJson other = (AccountJson) obj;
+ if (accountId == null) {
+ if (other.accountId != null) {
+ return false;
+ }
+ } else if (!accountId.equals(other.accountId)) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonSimple.java
index eef25be..911ec1f 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountJsonSimple.java
@@ -15,26 +15,25 @@
*/
package com.ning.billing.jaxrs.json;
-import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonView;
public class AccountJsonSimple {
-
@JsonView(BundleTimelineViews.Base.class)
protected final String accountId;
-
+
@JsonView(BundleTimelineViews.Base.class)
protected final String externalKey;
-
+
public AccountJsonSimple() {
this.accountId = null;
this.externalKey = null;
}
@JsonCreator
- public AccountJsonSimple(@JsonProperty("accountId") String accountId,
- @JsonProperty("externalKey") String externalKey) {
+ public AccountJsonSimple(@JsonProperty("accountId") final String accountId,
+ @JsonProperty("externalKey") final String externalKey) {
this.accountId = accountId;
this.externalKey = externalKey;
}
@@ -46,4 +45,32 @@ public class AccountJsonSimple {
public String getExternalKey() {
return externalKey;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final AccountJsonSimple that = (AccountJsonSimple) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (externalKey != null ? !externalKey.equals(that.externalKey) : that.externalKey != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = accountId != null ? accountId.hashCode() : 0;
+ result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
index b3ca059..df726d4 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountTimelineJson.java
@@ -32,7 +32,6 @@ import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.payment.api.PaymentAttempt;
public class AccountTimelineJson {
-
@JsonView(BundleTimelineViews.ReadTimeline.class)
private final List<PaymentJsonWithBundleKeys> payments;
@@ -46,18 +45,18 @@ public class AccountTimelineJson {
private final List<BundleJsonWithSubscriptions> bundles;
@JsonCreator
- public AccountTimelineJson(@JsonProperty("account") AccountJsonSimple account,
- @JsonProperty("bundles") List<BundleJsonWithSubscriptions> bundles,
- @JsonProperty("invoices") List<InvoiceJsonWithBundleKeys> invoices,
- @JsonProperty("payments") List<PaymentJsonWithBundleKeys> payments) {
+ public AccountTimelineJson(@JsonProperty("account") final AccountJsonSimple account,
+ @JsonProperty("bundles") final List<BundleJsonWithSubscriptions> bundles,
+ @JsonProperty("invoices") final List<InvoiceJsonWithBundleKeys> invoices,
+ @JsonProperty("payments") final List<PaymentJsonWithBundleKeys> payments) {
this.account = account;
this.bundles = bundles;
this.invoices = invoices;
this.payments = payments;
}
- private String getBundleExternalKey(UUID invoiceId, List<Invoice> invoices, List<BundleTimeline> bundles) {
- for (Invoice cur : invoices) {
+ private String getBundleExternalKey(final UUID invoiceId, final List<Invoice> invoices, final List<BundleTimeline> bundles) {
+ for (final Invoice cur : invoices) {
if (cur.getId().equals(invoiceId)) {
return getBundleExternalKey(cur, bundles);
}
@@ -65,13 +64,13 @@ public class AccountTimelineJson {
return null;
}
- private String getBundleExternalKey(Invoice invoice, List<BundleTimeline> bundles) {
- Set<UUID> b = new HashSet<UUID>();
+ private String getBundleExternalKey(final Invoice invoice, final List<BundleTimeline> bundles) {
+ final Set<UUID> b = new HashSet<UUID>();
for (final InvoiceItem cur : invoice.getInvoiceItems()) {
b.add(cur.getBundleId());
}
boolean first = true;
- StringBuilder tmp = new StringBuilder();
+ final StringBuilder tmp = new StringBuilder();
for (final UUID cur : b) {
for (final BundleTimeline bt : bundles) {
if (bt.getBundleId().equals(cur)) {
@@ -87,14 +86,14 @@ public class AccountTimelineJson {
return tmp.toString();
}
- public AccountTimelineJson(Account account, List<Invoice> invoices, List<PaymentAttempt> payments, List<BundleTimeline> bundles) {
+ public AccountTimelineJson(final Account account, final List<Invoice> invoices, final List<PaymentAttempt> payments, final List<BundleTimeline> bundles) {
this.account = new AccountJsonSimple(account.getId().toString(), account.getExternalKey());
this.bundles = new LinkedList<BundleJsonWithSubscriptions>();
- for (BundleTimeline cur : bundles) {
+ for (final BundleTimeline cur : bundles) {
this.bundles.add(new BundleJsonWithSubscriptions(account.getId(), cur));
}
this.invoices = new LinkedList<InvoiceJsonWithBundleKeys>();
- for (Invoice cur : invoices) {
+ for (final Invoice cur : invoices) {
this.invoices.add(new InvoiceJsonWithBundleKeys(cur.getAmountPaid(),
cur.getAmountCredited(),
cur.getId().toString(),
@@ -105,12 +104,11 @@ public class AccountTimelineJson {
cur.getAccountId().toString(),
getBundleExternalKey(cur, bundles)));
}
- this.payments = new LinkedList<PaymentJsonWithBundleKeys>();
- for (PaymentAttempt cur : payments) {
-
- String status = cur.getPaymentId() != null ? "Success" : "Failed";
- BigDecimal paidAmount = cur.getPaymentId() != null ? cur.getAmount() : BigDecimal.ZERO;
+ this.payments = new LinkedList<PaymentJsonWithBundleKeys>();
+ for (final PaymentAttempt cur : payments) {
+ final String status = cur.getPaymentId() != null ? "Success" : "Failed";
+ final BigDecimal paidAmount = cur.getPaymentId() != null ? cur.getAmount() : BigDecimal.ZERO;
this.payments.add(new PaymentJsonWithBundleKeys(cur.getAmount(),
paidAmount,
@@ -123,7 +121,7 @@ public class AccountTimelineJson {
status,
cur.getAccountId(),
getBundleExternalKey(cur.getInvoiceId(), invoices, bundles)));
- }
+ }
}
public AccountTimelineJson() {
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
index 1ab9e42..09d7fe2 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
@@ -16,24 +16,23 @@
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
-
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
public class BundleJsonNoSubscriptions extends BundleJsonSimple {
@JsonView(BundleTimelineViews.Base.class)
private final String accountId;
-
@JsonCreator
- public BundleJsonNoSubscriptions(@JsonProperty("bundleId") String bundleId,
- @JsonProperty("accountId") String accountId,
- @JsonProperty("externalKey") String externalKey,
- @JsonProperty("subscriptions") List<SubscriptionJsonWithEvents> subscriptions) {
+ public BundleJsonNoSubscriptions(@JsonProperty("bundleId") final String bundleId,
+ @JsonProperty("accountId") final String accountId,
+ @JsonProperty("externalKey") final String externalKey,
+ @JsonProperty("subscriptions") @Nullable final List<SubscriptionJsonWithEvents> subscriptions) {
super(bundleId, externalKey);
this.accountId = accountId;
}
@@ -42,14 +41,13 @@ public class BundleJsonNoSubscriptions extends BundleJsonSimple {
return accountId;
}
-
- public BundleJsonNoSubscriptions(SubscriptionBundle bundle) {
+ public BundleJsonNoSubscriptions(final SubscriptionBundle bundle) {
super(bundle.getId().toString(), bundle.getKey());
this.accountId = bundle.getAccountId().toString();
}
-
+
public BundleJsonNoSubscriptions() {
- super(null, null);
+ super(null, null);
this.accountId = null;
}
@@ -67,39 +65,46 @@ public class BundleJsonNoSubscriptions extends BundleJsonSimple {
}
@Override
- public boolean equals(Object obj) {
- if (equalsNoId(obj) == false) {
+ public boolean equals(final Object obj) {
+ if (!equalsNoId(obj)) {
return false;
}
- BundleJsonNoSubscriptions other = (BundleJsonNoSubscriptions) obj;
+ final BundleJsonNoSubscriptions other = (BundleJsonNoSubscriptions) obj;
if (bundleId == null) {
- if (other.bundleId != null)
+ if (other.bundleId != null) {
return false;
- } else if (!bundleId.equals(other.bundleId))
+ }
+ } else if (!bundleId.equals(other.bundleId)) {
return false;
+ }
return true;
}
- public boolean equalsNoId(Object obj) {
- if (this == obj)
+ public boolean equalsNoId(final Object obj) {
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (getClass() != obj.getClass()) {
return false;
- BundleJsonNoSubscriptions other = (BundleJsonNoSubscriptions) obj;
+ }
+ final BundleJsonNoSubscriptions other = (BundleJsonNoSubscriptions) obj;
if (accountId == null) {
- if (other.accountId != null)
+ if (other.accountId != null) {
return false;
- } else if (!accountId.equals(other.accountId))
+ }
+ } else if (!accountId.equals(other.accountId)) {
return false;
+ }
if (externalKey == null) {
- if (other.externalKey != null)
+ if (other.externalKey != null) {
return false;
- } else if (!externalKey.equals(other.externalKey))
+ }
+ } else if (!externalKey.equals(other.externalKey)) {
return false;
+ }
return true;
}
-
-
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonSimple.java
index b20f435..f2735b3 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonSimple.java
@@ -15,12 +15,13 @@
*/
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
public class BundleJsonSimple {
-
@JsonView(BundleTimelineViews.Base.class)
protected final String bundleId;
@@ -28,16 +29,14 @@ public class BundleJsonSimple {
protected final String externalKey;
@JsonCreator
- public BundleJsonSimple(@JsonProperty("bundleId") String bundleId,
- @JsonProperty("externalKey") String externalKey) {
- super();
+ public BundleJsonSimple(@JsonProperty("bundleId") @Nullable final String bundleId,
+ @JsonProperty("externalKey") @Nullable final String externalKey) {
this.bundleId = bundleId;
this.externalKey = externalKey;
}
-
+
public BundleJsonSimple() {
- this.bundleId = null;
- this.externalKey = null;
+ this(null, null);
}
@JsonProperty("bundleId")
@@ -49,4 +48,32 @@ public class BundleJsonSimple {
public String getExternalKey() {
return externalKey;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final BundleJsonSimple that = (BundleJsonSimple) o;
+
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
+ return false;
+ }
+ if (externalKey != null ? !externalKey.equals(that.externalKey) : that.externalKey != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = bundleId != null ? bundleId.hashCode() : 0;
+ result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java
index 10c90db..364e1f5 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java
@@ -15,6 +15,7 @@
*/
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@@ -22,20 +23,18 @@ import java.util.UUID;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
-
import com.ning.billing.entitlement.api.timeline.BundleTimeline;
import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
public class BundleJsonWithSubscriptions extends BundleJsonSimple {
-
@JsonView(BundleTimelineViews.Timeline.class)
private final List<SubscriptionJsonWithEvents> subscriptions;
@JsonCreator
- public BundleJsonWithSubscriptions(@JsonProperty("bundleId") String bundleId,
- @JsonProperty("externalKey") String externalKey,
- @JsonProperty("subscriptions") List<SubscriptionJsonWithEvents> subscriptions) {
+ public BundleJsonWithSubscriptions(@JsonProperty("bundleId") @Nullable final String bundleId,
+ @JsonProperty("externalKey") @Nullable final String externalKey,
+ @JsonProperty("subscriptions") @Nullable final List<SubscriptionJsonWithEvents> subscriptions) {
super(bundleId, externalKey);
this.subscriptions = subscriptions;
}
@@ -45,22 +44,48 @@ public class BundleJsonWithSubscriptions extends BundleJsonSimple {
return subscriptions;
}
- public BundleJsonWithSubscriptions(final UUID accountId, final BundleTimeline bundle) {
+ public BundleJsonWithSubscriptions(@Nullable final UUID accountId, final BundleTimeline bundle) {
super(bundle.getBundleId().toString(), bundle.getExternalKey());
this.subscriptions = new LinkedList<SubscriptionJsonWithEvents>();
- for (SubscriptionTimeline cur : bundle.getSubscriptions()) {
- this.subscriptions.add(new SubscriptionJsonWithEvents(bundle.getBundleId(), cur));
+ for (final SubscriptionTimeline cur : bundle.getSubscriptions()) {
+ this.subscriptions.add(new SubscriptionJsonWithEvents(bundle.getBundleId(), cur));
}
}
-
- public BundleJsonWithSubscriptions(SubscriptionBundle bundle) {
+
+ public BundleJsonWithSubscriptions(final SubscriptionBundle bundle) {
super(bundle.getId().toString(), bundle.getKey());
this.subscriptions = null;
}
-
+
public BundleJsonWithSubscriptions() {
- super(null, null);
- this.subscriptions = null;
+ this(null, null, null);
}
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final BundleJsonWithSubscriptions that = (BundleJsonWithSubscriptions) o;
+
+ if (subscriptions != null ? !subscriptions.equals(that.subscriptions) : that.subscriptions != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (subscriptions != null ? subscriptions.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java
index 11fc814..c6f945a 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineJson.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
public class BundleTimelineJson {
-
@JsonView(BundleTimelineViews.Timeline.class)
private final String viewId;
@@ -37,19 +36,19 @@ public class BundleTimelineJson {
private final List<InvoiceJsonSimple> invoices;
@JsonView(BundleTimelineViews.WriteTimeline.class)
- private final String resonForChange;
+ private final String reasonForChange;
@JsonCreator
- public BundleTimelineJson(@JsonProperty("viewId") String viewId,
- @JsonProperty("bundle") BundleJsonWithSubscriptions bundle,
- @JsonProperty("payments") List<PaymentJsonSimple> payments,
- @JsonProperty("invoices") List<InvoiceJsonSimple> invoices,
- @JsonProperty("reasonForChange") String reason) {
+ public BundleTimelineJson(@JsonProperty("viewId") final String viewId,
+ @JsonProperty("bundle") final BundleJsonWithSubscriptions bundle,
+ @JsonProperty("payments") final List<PaymentJsonSimple> payments,
+ @JsonProperty("invoices") final List<InvoiceJsonSimple> invoices,
+ @JsonProperty("reasonForChange") final String reason) {
this.viewId = viewId;
this.bundle = bundle;
this.payments = payments;
this.invoices = invoices;
- this.resonForChange = reason;
+ this.reasonForChange = reason;
}
public String getViewId() {
@@ -68,7 +67,47 @@ public class BundleTimelineJson {
return invoices;
}
- public String getResonForChange() {
- return resonForChange;
+ public String getReasonForChange() {
+ return reasonForChange;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final BundleTimelineJson that = (BundleTimelineJson) o;
+
+ if (bundle != null ? !bundle.equals(that.bundle) : that.bundle != null) {
+ return false;
+ }
+ if (invoices != null ? !invoices.equals(that.invoices) : that.invoices != null) {
+ return false;
+ }
+ if (payments != null ? !payments.equals(that.payments) : that.payments != null) {
+ return false;
+ }
+ if (reasonForChange != null ? !reasonForChange.equals(that.reasonForChange) : that.reasonForChange != null) {
+ return false;
+ }
+ if (viewId != null ? !viewId.equals(that.viewId) : that.viewId != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = viewId != null ? viewId.hashCode() : 0;
+ result = 31 * result + (bundle != null ? bundle.hashCode() : 0);
+ result = 31 * result + (payments != null ? payments.hashCode() : 0);
+ result = 31 * result + (invoices != null ? invoices.hashCode() : 0);
+ result = 31 * result + (reasonForChange != null ? reasonForChange.hashCode() : 0);
+ return result;
}
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineViews.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineViews.java
index 0397bec..94c2ce9 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineViews.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleTimelineViews.java
@@ -18,8 +18,11 @@ package com.ning.billing.jaxrs.json;
public class BundleTimelineViews {
- public static class Base {};
- public static class Timeline extends Base {};
- public static class ReadTimeline extends Timeline {};
- public static class WriteTimeline extends Timeline {};
+ public static class Base {}
+
+ public static class Timeline extends Base {}
+
+ public static class ReadTimeline extends Timeline {}
+
+ public static class WriteTimeline extends Timeline {}
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackCollectionJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackCollectionJson.java
index 3da8e81..ae22f02 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackCollectionJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackCollectionJson.java
@@ -16,11 +16,11 @@
package com.ning.billing.jaxrs.json;
+import java.util.List;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.List;
-
public class ChargebackCollectionJson {
private final String accountId;
private final List<ChargebackJson> chargebacks;
@@ -39,4 +39,32 @@ public class ChargebackCollectionJson {
public List<ChargebackJson> getChargebacks() {
return chargebacks;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final ChargebackCollectionJson that = (ChargebackCollectionJson) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (chargebacks != null ? !chargebacks.equals(that.chargebacks) : that.chargebacks != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = accountId != null ? accountId.hashCode() : 0;
+ result = 31 * result + (chargebacks != null ? chargebacks.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackJson.java
index 071f971..22475d7 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/ChargebackJson.java
@@ -16,12 +16,13 @@
package com.ning.billing.jaxrs.json;
+import java.math.BigDecimal;
+
+import org.joda.time.DateTime;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.invoice.api.InvoicePayment;
-import org.joda.time.DateTime;
-
-import java.math.BigDecimal;
// TODO: populate reason code, requested date from audit log
public class ChargebackJson {
@@ -32,11 +33,11 @@ public class ChargebackJson {
private final String reason;
@JsonCreator
- public ChargebackJson(@JsonProperty("requestedDate") DateTime requestedDate,
- @JsonProperty("effectiveDate") DateTime effectiveDate,
- @JsonProperty("chargebackAmount") BigDecimal chargebackAmount,
- @JsonProperty("paymentId") String paymentId,
- @JsonProperty("reason") String reason) {
+ public ChargebackJson(@JsonProperty("requestedDate") final DateTime requestedDate,
+ @JsonProperty("effectiveDate") final DateTime effectiveDate,
+ @JsonProperty("chargebackAmount") final BigDecimal chargebackAmount,
+ @JsonProperty("paymentId") final String paymentId,
+ @JsonProperty("reason") final String reason) {
this.requestedDate = requestedDate;
this.effectiveDate = effectiveDate;
this.chargebackAmount = chargebackAmount;
@@ -44,7 +45,7 @@ public class ChargebackJson {
this.reason = reason;
}
- public ChargebackJson(InvoicePayment chargeback) {
+ public ChargebackJson(final InvoicePayment chargeback) {
this.requestedDate = null;
this.effectiveDate = chargeback.getPaymentAttemptDate();
this.chargebackAmount = chargeback.getAmount().negate();
@@ -72,4 +73,44 @@ public class ChargebackJson {
public String getReason() {
return reason;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final ChargebackJson that = (ChargebackJson) o;
+
+ if (chargebackAmount != null ? !chargebackAmount.equals(that.chargebackAmount) : that.chargebackAmount != null) {
+ return false;
+ }
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (paymentId != null ? !paymentId.equals(that.paymentId) : that.paymentId != null) {
+ return false;
+ }
+ if (reason != null ? !reason.equals(that.reason) : that.reason != null) {
+ return false;
+ }
+ if (requestedDate != null ? !requestedDate.equals(that.requestedDate) : that.requestedDate != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = requestedDate != null ? requestedDate.hashCode() : 0;
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ result = 31 * result + (chargebackAmount != null ? chargebackAmount.hashCode() : 0);
+ result = 31 * result + (paymentId != null ? paymentId.hashCode() : 0);
+ result = 31 * result + (reason != null ? reason.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditCollectionJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditCollectionJson.java
index 66f4d0c..2840e4d 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditCollectionJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditCollectionJson.java
@@ -16,12 +16,12 @@
package com.ning.billing.jaxrs.json;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
import java.util.List;
import java.util.UUID;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class CreditCollectionJson {
private final UUID accountId;
private final List<CreditJson> credits;
@@ -40,4 +40,32 @@ public class CreditCollectionJson {
public List<CreditJson> getCredits() {
return credits;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final CreditCollectionJson that = (CreditCollectionJson) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (credits != null ? !credits.equals(that.credits) : that.credits != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = accountId != null ? accountId.hashCode() : 0;
+ result = 31 * result + (credits != null ? credits.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
index ffd8fba..c4c24ad 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CreditJson.java
@@ -51,7 +51,7 @@ public class CreditJson {
this.accountId = accountId;
}
- public CreditJson(InvoiceItem credit) {
+ public CreditJson(final InvoiceItem credit) {
this.creditAmount = credit.getAmount();
this.invoiceId = credit.getInvoiceId();
this.invoiceNumber = null;
@@ -88,4 +88,48 @@ public class CreditJson {
public UUID getAccountId() {
return accountId;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final CreditJson that = (CreditJson) o;
+
+ if (creditAmount != null ? !creditAmount.equals(that.creditAmount) : that.creditAmount != null) {
+ return false;
+ }
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
+ return false;
+ }
+ if (invoiceNumber != null ? !invoiceNumber.equals(that.invoiceNumber) : that.invoiceNumber != null) {
+ return false;
+ }
+ if (reason != null ? !reason.equals(that.reason) : that.reason != null) {
+ return false;
+ }
+ if (requestedDate != null ? !requestedDate.equals(that.requestedDate) : that.requestedDate != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = creditAmount != null ? creditAmount.hashCode() : 0;
+ result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
+ result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0);
+ result = 31 * result + (requestedDate != null ? requestedDate.hashCode() : 0);
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ result = 31 * result + (reason != null ? reason.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CustomFieldJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CustomFieldJson.java
index 6ba6884..d6daf76 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CustomFieldJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/CustomFieldJson.java
@@ -15,30 +15,28 @@
*/
package com.ning.billing.jaxrs.json;
-import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.annotation.Nullable;
+import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.util.customfield.CustomField;
public class CustomFieldJson {
-
private final String name;
private final String value;
-
+
public CustomFieldJson() {
- this.name = null;
- this.value = null;
+ this(null, null);
}
-
+
@JsonCreator
- public CustomFieldJson(@JsonProperty("name") String name,
- @JsonProperty("value") String value) {
- super();
+ public CustomFieldJson(@JsonProperty("name") @Nullable final String name,
+ @JsonProperty("value") @Nullable final String value) {
this.name = name;
this.value = value;
}
-
- public CustomFieldJson(CustomField input) {
+
+ public CustomFieldJson(final CustomField input) {
this.name = input.getName();
this.value = input.getValue();
}
@@ -50,4 +48,32 @@ public class CustomFieldJson {
public String getValue() {
return value;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final CustomFieldJson that = (CustomFieldJson) o;
+
+ if (name != null ? !name.equals(that.name) : that.name != null) {
+ return false;
+ }
+ if (value != null ? !value.equals(that.value) : that.value != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = name != null ? name.hashCode() : 0;
+ result = 31 * result + (value != null ? value.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java
index e3011f3..cad2d8b 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java
@@ -38,17 +38,17 @@ public class InvoiceItemJsonSimple {
private final BigDecimal amount;
private final Currency currency;
- public InvoiceItemJsonSimple(@JsonProperty("invoiceId") UUID invoiceId,
- @JsonProperty("accountId") UUID accountId,
- @JsonProperty("bundleId") UUID bundleId,
- @JsonProperty("subscriptionId") UUID subscriptionId,
- @JsonProperty("planName") String planName,
- @JsonProperty("phaseName") String phaseName,
- @JsonProperty("description") String description,
- @JsonProperty("startDate") DateTime startDate,
- @JsonProperty("endDate") DateTime endDate,
- @JsonProperty("amount") BigDecimal amount,
- @JsonProperty("currency") Currency currency) {
+ public InvoiceItemJsonSimple(@JsonProperty("invoiceId") final UUID invoiceId,
+ @JsonProperty("accountId") final UUID accountId,
+ @JsonProperty("bundleId") final UUID bundleId,
+ @JsonProperty("subscriptionId") final UUID subscriptionId,
+ @JsonProperty("planName") final String planName,
+ @JsonProperty("phaseName") final String phaseName,
+ @JsonProperty("description") final String description,
+ @JsonProperty("startDate") final DateTime startDate,
+ @JsonProperty("endDate") final DateTime endDate,
+ @JsonProperty("amount") final BigDecimal amount,
+ @JsonProperty("currency") final Currency currency) {
this.invoiceId = invoiceId;
this.accountId = accountId;
this.bundleId = bundleId;
@@ -62,18 +62,10 @@ public class InvoiceItemJsonSimple {
this.currency = currency;
}
- public InvoiceItemJsonSimple(InvoiceItem item) {
- this.invoiceId = item.getInvoiceId();
- this.accountId = item.getAccountId();
- this.bundleId = item.getBundleId();
- this.subscriptionId = item.getSubscriptionId();
- this.planName = item.getPlanName();
- this.phaseName = item.getPhaseName();
- this.description = item.getDescription();
- this.startDate = item.getStartDate();
- this.endDate = item.getEndDate();
- this.amount = item.getAmount();
- this.currency = item.getCurrency();
+ public InvoiceItemJsonSimple(final InvoiceItem item) {
+ this(item.getInvoiceId(), item.getAccountId(), item.getBundleId(), item.getSubscriptionId(),
+ item.getPlanName(), item.getPhaseName(), item.getDescription(), item.getStartDate(), item.getEndDate(),
+ item.getAmount(), item.getCurrency());
}
public UUID getInvoiceId() {
@@ -119,4 +111,68 @@ public class InvoiceItemJsonSimple {
public Currency getCurrency() {
return currency;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final InvoiceItemJsonSimple that = (InvoiceItemJsonSimple) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (amount != null ? !amount.equals(that.amount) : that.amount != null) {
+ return false;
+ }
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
+ return false;
+ }
+ if (currency != that.currency) {
+ return false;
+ }
+ if (description != null ? !description.equals(that.description) : that.description != null) {
+ return false;
+ }
+ if (endDate != null ? !endDate.equals(that.endDate) : that.endDate != null) {
+ return false;
+ }
+ if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
+ return false;
+ }
+ if (phaseName != null ? !phaseName.equals(that.phaseName) : that.phaseName != null) {
+ return false;
+ }
+ if (planName != null ? !planName.equals(that.planName) : that.planName != null) {
+ return false;
+ }
+ if (startDate != null ? !startDate.equals(that.startDate) : that.startDate != null) {
+ return false;
+ }
+ if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = invoiceId != null ? invoiceId.hashCode() : 0;
+ result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
+ result = 31 * result + (subscriptionId != null ? subscriptionId.hashCode() : 0);
+ result = 31 * result + (planName != null ? planName.hashCode() : 0);
+ result = 31 * result + (phaseName != null ? phaseName.hashCode() : 0);
+ result = 31 * result + (description != null ? description.hashCode() : 0);
+ result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
+ result = 31 * result + (endDate != null ? endDate.hashCode() : 0);
+ result = 31 * result + (amount != null ? amount.hashCode() : 0);
+ result = 31 * result + (currency != null ? currency.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java
index 7b0d504..0c50fda 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonSimple.java
@@ -16,6 +16,7 @@
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
import java.math.BigDecimal;
import org.joda.time.DateTime;
@@ -35,26 +36,18 @@ public class InvoiceJsonSimple {
private final String accountId;
public InvoiceJsonSimple() {
- this.amount = BigDecimal.ZERO;
- this.credit = BigDecimal.ZERO;
- this.invoiceId = null;
- this.invoiceDate = null;
- this.targetDate = null;
- this.invoiceNumber = null;
- this.balance = BigDecimal.ZERO;
- this.accountId = null;
+ this(BigDecimal.ZERO, BigDecimal.ZERO, null, null, null, null, BigDecimal.ZERO, null);
}
@JsonCreator
- public InvoiceJsonSimple(@JsonProperty("amount") BigDecimal amount,
- @JsonProperty("credit") BigDecimal credit,
- @JsonProperty("invoiceId") String invoiceId,
- @JsonProperty("invoiceDate") DateTime invoiceDate,
- @JsonProperty("targetDate") DateTime targetDate,
- @JsonProperty("invoiceNumber") String invoiceNumber,
- @JsonProperty("balance") BigDecimal balance,
- @JsonProperty("accountId") String accountId) {
- super();
+ public InvoiceJsonSimple(@JsonProperty("amount") final BigDecimal amount,
+ @JsonProperty("credit") final BigDecimal credit,
+ @JsonProperty("invoiceId") @Nullable final String invoiceId,
+ @JsonProperty("invoiceDate") @Nullable final DateTime invoiceDate,
+ @JsonProperty("targetDate") @Nullable final DateTime targetDate,
+ @JsonProperty("invoiceNumber") @Nullable final String invoiceNumber,
+ @JsonProperty("balance") final BigDecimal balance,
+ @JsonProperty("accountId") @Nullable final String accountId) {
this.amount = amount;
this.credit = credit;
this.invoiceId = invoiceId;
@@ -65,15 +58,9 @@ public class InvoiceJsonSimple {
this.accountId = accountId;
}
- public InvoiceJsonSimple(Invoice input) {
- this.amount = input.getAmountCharged();
- this.credit = input.getAmountCredited();
- this.invoiceId = input.getId().toString();
- this.invoiceDate = input.getInvoiceDate();
- this.targetDate = input.getTargetDate();
- this.invoiceNumber = String.valueOf(input.getInvoiceNumber());
- this.balance = input.getBalance();
- this.accountId = input.getAccountId().toString();
+ public InvoiceJsonSimple(final Invoice input) {
+ this(input.getAmountCharged(), input.getAmountCredited(), input.getId().toString(), input.getInvoiceDate(),
+ input.getTargetDate(), String.valueOf(input.getInvoiceNumber()), input.getBalance(), input.getAccountId().toString());
}
public BigDecimal getAmount() {
@@ -109,72 +96,54 @@ public class InvoiceJsonSimple {
}
@Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((amount == null) ? 0 : amount.hashCode());
- result = prime * result + ((balance == null) ? 0 : balance.hashCode());
- result = prime * result + ((credit == null) ? 0 : credit.hashCode());
- result = prime * result
- + ((invoiceDate == null) ? 0 : invoiceDate.hashCode());
- result = prime * result
- + ((invoiceId == null) ? 0 : invoiceId.hashCode());
- result = prime * result
- + ((invoiceNumber == null) ? 0 : invoiceNumber.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object o) {
+ if (this == o) {
return true;
- if (obj == null)
+ }
+ if (o == null || getClass() != o.getClass()) {
return false;
- if (getClass() != obj.getClass())
+ }
+
+ final InvoiceJsonSimple that = (InvoiceJsonSimple) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
return false;
- InvoiceJsonSimple other = (InvoiceJsonSimple) obj;
- if (amount == null) {
- if (other.amount != null)
- return false;
- } else if (!amount.equals(other.amount))
+ }
+ if (amount != null ? !amount.equals(that.amount) : that.amount != null) {
return false;
-
- if (balance == null) {
- if (other.balance != null)
- return false;
- } else if (!balance.equals(other.balance))
+ }
+ if (balance != null ? !balance.equals(that.balance) : that.balance != null) {
return false;
-
- if (credit == null) {
- if (other.credit != null)
- return false;
- } else if (!credit.equals(other.credit))
+ }
+ if (credit != null ? !credit.equals(that.credit) : that.credit != null) {
return false;
-
- if (invoiceDate == null) {
- if (other.invoiceDate != null)
- return false;
- } else if (!invoiceDate.equals(other.invoiceDate))
+ }
+ if (invoiceDate != null ? !invoiceDate.equals(that.invoiceDate) : that.invoiceDate != null) {
return false;
-
- if (invoiceId == null) {
- if (other.invoiceId != null)
- return false;
- } else if (!invoiceId.equals(other.invoiceId))
+ }
+ if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
return false;
-
- if (invoiceNumber == null) {
- if (other.invoiceNumber != null)
- return false;
- } else if (!invoiceNumber.equals(other.invoiceNumber))
+ }
+ if (invoiceNumber != null ? !invoiceNumber.equals(that.invoiceNumber) : that.invoiceNumber != null) {
return false;
-
- if (accountId == null) {
- if (other.accountId != null)
- return false;
- } else if (!accountId.equals(other.accountId))
+ }
+ if (targetDate != null ? !targetDate.equals(that.targetDate) : that.targetDate != null) {
return false;
+ }
return true;
}
+
+ @Override
+ public int hashCode() {
+ int result = amount != null ? amount.hashCode() : 0;
+ result = 31 * result + (credit != null ? credit.hashCode() : 0);
+ result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
+ result = 31 * result + (invoiceDate != null ? invoiceDate.hashCode() : 0);
+ result = 31 * result + (targetDate != null ? targetDate.hashCode() : 0);
+ result = 31 * result + (invoiceNumber != null ? invoiceNumber.hashCode() : 0);
+ result = 31 * result + (balance != null ? balance.hashCode() : 0);
+ result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java
index da3ccf4..67d5e6a 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithBundleKeys.java
@@ -1,4 +1,5 @@
package com.ning.billing.jaxrs.json;
+
import java.math.BigDecimal;
import org.joda.time.DateTime;
@@ -32,20 +33,20 @@ public class InvoiceJsonWithBundleKeys extends InvoiceJsonSimple {
}
@JsonCreator
- public InvoiceJsonWithBundleKeys(@JsonProperty("amount") BigDecimal amount,
- @JsonProperty("credit") BigDecimal credit,
- @JsonProperty("invoiceId") String invoiceId,
- @JsonProperty("invoiceDate") DateTime invoiceDate,
- @JsonProperty("targetDate") DateTime targetDate,
- @JsonProperty("invoiceNumber") String invoiceNumber,
- @JsonProperty("balance") BigDecimal balance,
- @JsonProperty("accountId") String accountId,
- @JsonProperty("externalBundleKeys") String bundleKeys) {
+ public InvoiceJsonWithBundleKeys(@JsonProperty("amount") final BigDecimal amount,
+ @JsonProperty("credit") final BigDecimal credit,
+ @JsonProperty("invoiceId") final String invoiceId,
+ @JsonProperty("invoiceDate") final DateTime invoiceDate,
+ @JsonProperty("targetDate") final DateTime targetDate,
+ @JsonProperty("invoiceNumber") final String invoiceNumber,
+ @JsonProperty("balance") final BigDecimal balance,
+ @JsonProperty("accountId") final String accountId,
+ @JsonProperty("externalBundleKeys") final String bundleKeys) {
super(amount, credit, invoiceId, invoiceDate, targetDate, invoiceNumber, balance, accountId);
this.bundleKeys = bundleKeys;
}
- public InvoiceJsonWithBundleKeys(Invoice input, String bundleKeys) {
+ public InvoiceJsonWithBundleKeys(final Invoice input, final String bundleKeys) {
super(input);
this.bundleKeys = bundleKeys;
}
@@ -53,4 +54,32 @@ public class InvoiceJsonWithBundleKeys extends InvoiceJsonSimple {
public String getBundleKeys() {
return bundleKeys;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final InvoiceJsonWithBundleKeys that = (InvoiceJsonWithBundleKeys) o;
+
+ if (bundleKeys != null ? !bundleKeys.equals(that.bundleKeys) : that.bundleKeys != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (bundleKeys != null ? bundleKeys.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithItems.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithItems.java
index b68d34d..6c5445e 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithItems.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceJsonWithItems.java
@@ -32,23 +32,23 @@ public class InvoiceJsonWithItems extends InvoiceJsonSimple {
private final List<InvoiceItemJsonSimple> items;
@JsonCreator
- public InvoiceJsonWithItems(@JsonProperty("amount") BigDecimal amount,
- @JsonProperty("credit") BigDecimal credit,
- @JsonProperty("invoiceId") String invoiceId,
- @JsonProperty("invoiceDate") DateTime invoiceDate,
- @JsonProperty("targetDate") DateTime targetDate,
- @JsonProperty("invoiceNumber") String invoiceNumber,
- @JsonProperty("balance") BigDecimal balance,
- @JsonProperty("accountId") String accountId,
- @JsonProperty("items") List<InvoiceItemJsonSimple> items) {
+ public InvoiceJsonWithItems(@JsonProperty("amount") final BigDecimal amount,
+ @JsonProperty("credit") final BigDecimal credit,
+ @JsonProperty("invoiceId") final String invoiceId,
+ @JsonProperty("invoiceDate") final DateTime invoiceDate,
+ @JsonProperty("targetDate") final DateTime targetDate,
+ @JsonProperty("invoiceNumber") final String invoiceNumber,
+ @JsonProperty("balance") final BigDecimal balance,
+ @JsonProperty("accountId") final String accountId,
+ @JsonProperty("items") final List<InvoiceItemJsonSimple> items) {
super(amount, credit, invoiceId, invoiceDate, targetDate, invoiceNumber, balance, accountId);
this.items = new ArrayList<InvoiceItemJsonSimple>(items);
}
- public InvoiceJsonWithItems(Invoice input) {
+ public InvoiceJsonWithItems(final Invoice input) {
super(input);
this.items = new ArrayList<InvoiceItemJsonSimple>(input.getInvoiceItems().size());
- for (InvoiceItem item : input.getInvoiceItems()) {
+ for (final InvoiceItem item : input.getInvoiceItems()) {
this.items.add(new InvoiceItemJsonSimple(item));
}
}
@@ -56,4 +56,32 @@ public class InvoiceJsonWithItems extends InvoiceJsonSimple {
public List<InvoiceItemJsonSimple> getItems() {
return Collections.unmodifiableList(items);
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final InvoiceJsonWithItems that = (InvoiceJsonWithItems) o;
+
+ if (items != null ? !items.equals(that.items) : that.items != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (items != null ? items.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java
index 4c76e5b..86b8efd 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonSimple.java
@@ -26,7 +26,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.ning.billing.util.clock.DefaultClock;
public class PaymentJsonSimple {
-
private final BigDecimal paidAmount;
private final BigDecimal amount;
@@ -61,16 +60,16 @@ public class PaymentJsonSimple {
}
@JsonCreator
- public PaymentJsonSimple(@JsonProperty("amount") BigDecimal amount,
- @JsonProperty("paidAmount") BigDecimal paidAmount,
- @JsonProperty("invoiceId") UUID invoiceId,
- @JsonProperty("paymentId") UUID paymentId,
- @JsonProperty("requestedDate") DateTime requestedDate,
- @JsonProperty("effectiveDate") DateTime effectiveDate,
- @JsonProperty("retryCount") Integer retryCount,
- @JsonProperty("currency") String currency,
- @JsonProperty("status") String status,
- @JsonProperty("accountId") UUID accountId) {
+ public PaymentJsonSimple(@JsonProperty("amount") final BigDecimal amount,
+ @JsonProperty("paidAmount") final BigDecimal paidAmount,
+ @JsonProperty("invoiceId") final UUID invoiceId,
+ @JsonProperty("paymentId") final UUID paymentId,
+ @JsonProperty("requestedDate") final DateTime requestedDate,
+ @JsonProperty("effectiveDate") final DateTime effectiveDate,
+ @JsonProperty("retryCount") final Integer retryCount,
+ @JsonProperty("currency") final String currency,
+ @JsonProperty("status") final String status,
+ @JsonProperty("accountId") final UUID accountId) {
super();
this.amount = amount;
this.paidAmount = paidAmount;
@@ -123,4 +122,64 @@ public class PaymentJsonSimple {
public UUID getAccountId() {
return accountId;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final PaymentJsonSimple that = (PaymentJsonSimple) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (amount != null ? !amount.equals(that.amount) : that.amount != null) {
+ return false;
+ }
+ if (currency != null ? !currency.equals(that.currency) : that.currency != null) {
+ return false;
+ }
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
+ return false;
+ }
+ if (paidAmount != null ? !paidAmount.equals(that.paidAmount) : that.paidAmount != null) {
+ return false;
+ }
+ if (paymentId != null ? !paymentId.equals(that.paymentId) : that.paymentId != null) {
+ return false;
+ }
+ if (requestedDate != null ? !requestedDate.equals(that.requestedDate) : that.requestedDate != null) {
+ return false;
+ }
+ if (retryCount != null ? !retryCount.equals(that.retryCount) : that.retryCount != null) {
+ return false;
+ }
+ if (status != null ? !status.equals(that.status) : that.status != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = paidAmount != null ? paidAmount.hashCode() : 0;
+ result = 31 * result + (amount != null ? amount.hashCode() : 0);
+ result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
+ result = 31 * result + (paymentId != null ? paymentId.hashCode() : 0);
+ result = 31 * result + (requestedDate != null ? requestedDate.hashCode() : 0);
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ result = 31 * result + (retryCount != null ? retryCount.hashCode() : 0);
+ result = 31 * result + (currency != null ? currency.hashCode() : 0);
+ result = 31 * result + (status != null ? status.hashCode() : 0);
+ result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java
index 8430a1b..a751a21 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PaymentJsonWithBundleKeys.java
@@ -25,7 +25,6 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class PaymentJsonWithBundleKeys extends PaymentJsonSimple {
-
private final String bundleKeys;
public PaymentJsonWithBundleKeys() {
@@ -34,17 +33,17 @@ public class PaymentJsonWithBundleKeys extends PaymentJsonSimple {
}
@JsonCreator
- public PaymentJsonWithBundleKeys(@JsonProperty("amount") BigDecimal amount,
- @JsonProperty("paidAmount") BigDecimal paidAmount,
- @JsonProperty("invoiceId") UUID invoiceId,
- @JsonProperty("paymentId") UUID paymentId,
- @JsonProperty("requestedDt") DateTime requestedDate,
- @JsonProperty("effectiveDt") DateTime effectiveDate,
- @JsonProperty("retryCount") Integer retryCount,
- @JsonProperty("currency") String currency,
- @JsonProperty("status") String status,
- @JsonProperty("accountId") UUID accountId,
- @JsonProperty("externalBundleKeys") String bundleKeys) {
+ public PaymentJsonWithBundleKeys(@JsonProperty("amount") final BigDecimal amount,
+ @JsonProperty("paidAmount") final BigDecimal paidAmount,
+ @JsonProperty("invoiceId") final UUID invoiceId,
+ @JsonProperty("paymentId") final UUID paymentId,
+ @JsonProperty("requestedDt") final DateTime requestedDate,
+ @JsonProperty("effectiveDt") final DateTime effectiveDate,
+ @JsonProperty("retryCount") final Integer retryCount,
+ @JsonProperty("currency") final String currency,
+ @JsonProperty("status") final String status,
+ @JsonProperty("accountId") final UUID accountId,
+ @JsonProperty("externalBundleKeys") final String bundleKeys) {
super(amount, paidAmount, invoiceId, paymentId, requestedDate, effectiveDate, retryCount, currency, status, accountId);
this.bundleKeys = bundleKeys;
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PlanDetailJason.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PlanDetailJason.java
index 7474315..391a777 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PlanDetailJason.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/PlanDetailJason.java
@@ -22,32 +22,27 @@ import com.ning.billing.catalog.api.InternationalPrice;
import com.ning.billing.catalog.api.Listing;
public class PlanDetailJason {
-
final String productName;
- final String planName;
- final BillingPeriod billingPeriod;
- final String priceListName;
- final InternationalPrice finalPhasePrice;
- public PlanDetailJason(
- @JsonProperty("product") String productName,
- @JsonProperty("plan") String planName,
- @JsonProperty("final_phase_billing_period") BillingPeriod billingPeriod,
- @JsonProperty("priceList") String priceListName,
- @JsonProperty("final_phase_recurring_price") InternationalPrice finalPhasePrice
- ) {
+ final String planName;
+ final BillingPeriod billingPeriod;
+ final String priceListName;
+ final InternationalPrice finalPhasePrice;
+
+ public PlanDetailJason(@JsonProperty("product") final String productName,
+ @JsonProperty("plan") final String planName,
+ @JsonProperty("final_phase_billing_period") final BillingPeriod billingPeriod,
+ @JsonProperty("priceList") final String priceListName,
+ @JsonProperty("final_phase_recurring_price") final InternationalPrice finalPhasePrice) {
this.productName = productName;
this.planName = planName;
this.billingPeriod = billingPeriod;
this.priceListName = priceListName;
this.finalPhasePrice = finalPhasePrice;
}
-
- public PlanDetailJason(Listing listing) {
- this.productName = listing.getPlan().getProduct().getName();
- this.planName = listing.getPlan().getName();
- this.billingPeriod = listing.getPlan().getBillingPeriod();
- this.priceListName = listing.getPriceList().getName();
- this.finalPhasePrice = listing.getPlan().getFinalPhase().getRecurringPrice();
+
+ public PlanDetailJason(final Listing listing) {
+ this(listing.getPlan().getProduct().getName(), listing.getPlan().getName(), listing.getPlan().getBillingPeriod(),
+ listing.getPriceList().getName(), listing.getPlan().getFinalPhase().getRecurringPrice());
}
public String getProductName() {
@@ -69,6 +64,44 @@ public class PlanDetailJason {
public InternationalPrice getFinalPhasePrice() {
return finalPhasePrice;
}
-
-
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final PlanDetailJason that = (PlanDetailJason) o;
+
+ if (billingPeriod != that.billingPeriod) {
+ return false;
+ }
+ if (finalPhasePrice != null ? !finalPhasePrice.equals(that.finalPhasePrice) : that.finalPhasePrice != null) {
+ return false;
+ }
+ if (planName != null ? !planName.equals(that.planName) : that.planName != null) {
+ return false;
+ }
+ if (priceListName != null ? !priceListName.equals(that.priceListName) : that.priceListName != null) {
+ return false;
+ }
+ if (productName != null ? !productName.equals(that.productName) : that.productName != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = productName != null ? productName.hashCode() : 0;
+ result = 31 * result + (planName != null ? planName.hashCode() : 0);
+ result = 31 * result + (billingPeriod != null ? billingPeriod.hashCode() : 0);
+ result = 31 * result + (priceListName != null ? priceListName.hashCode() : 0);
+ result = 31 * result + (finalPhasePrice != null ? finalPhasePrice.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
index c28c6b4..27c6dc9 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
@@ -16,26 +16,19 @@
package com.ning.billing.jaxrs.json;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
+import javax.annotation.Nullable;
+
+import org.joda.time.DateTime;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
-import org.joda.time.DateTime;
-
-import com.ning.billing.catalog.api.PlanPhaseSpecifier;
-import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
-import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline.ExistingEvent;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.util.clock.DefaultClock;
public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
-
@JsonView(BundleTimelineViews.Base.class)
private final DateTime startDate;
-
+
@JsonView(BundleTimelineViews.Base.class)
private final String bundleId;
@@ -53,18 +46,16 @@ public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
@JsonView(BundleTimelineViews.Base.class)
private final DateTime chargedThroughDate;
-
-
@JsonCreator
- public SubscriptionJsonNoEvents(@JsonProperty("subscriptionId") String subscriptionId,
- @JsonProperty("bundleId") String bundleId,
- @JsonProperty("startDate") DateTime startDate,
- @JsonProperty("productName") String productName,
- @JsonProperty("productCategory") String productCategory,
- @JsonProperty("billingPeriod") String billingPeriod,
- @JsonProperty("priceList") String priceList,
- @JsonProperty("chargedThroughDate") DateTime chargedThroughDate) {
+ public SubscriptionJsonNoEvents(@JsonProperty("subscriptionId") @Nullable final String subscriptionId,
+ @JsonProperty("bundleId") @Nullable final String bundleId,
+ @JsonProperty("startDate") @Nullable final DateTime startDate,
+ @JsonProperty("productName") @Nullable final String productName,
+ @JsonProperty("productCategory") @Nullable final String productCategory,
+ @JsonProperty("billingPeriod") @Nullable final String billingPeriod,
+ @JsonProperty("priceList") @Nullable final String priceList,
+ @JsonProperty("chargedThroughDate") @Nullable final DateTime chargedThroughDate) {
super(subscriptionId);
this.bundleId = bundleId;
this.startDate = startDate;
@@ -74,29 +65,16 @@ public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
this.priceList = priceList;
this.chargedThroughDate = chargedThroughDate;
}
-
+
public SubscriptionJsonNoEvents() {
- super(null);
- this.bundleId = null;
- this.startDate = null;
- this.productName = null;
- this.productCategory = null;
- this.billingPeriod = null;
- this.priceList = null;
- this.chargedThroughDate = null;
+ this(null, null, null, null, null, null, null, null);
}
-
+
public SubscriptionJsonNoEvents(final Subscription data) {
- super(data.getId().toString());
- this.bundleId = data.getBundleId().toString();
- this.startDate = data.getStartDate();
- this.productName = data.getCurrentPlan().getProduct().getName();
- this.productCategory = data.getCurrentPlan().getProduct().getCategory().toString();
- this.billingPeriod = data.getCurrentPlan().getBillingPeriod().toString();
- this.priceList = data.getCurrentPriceList().getName();
- this.chargedThroughDate = data.getChargedThroughDate();
+ this(data.getId().toString(), data.getBundleId().toString(), data.getStartDate(), data.getCurrentPlan().getProduct().getName(),
+ data.getCurrentPlan().getProduct().getCategory().toString(), data.getCurrentPlan().getBillingPeriod().toString(),
+ data.getCurrentPriceList().getName(), data.getChargedThroughDate());
}
-
public String getSubscriptionId() {
return subscriptionId;
@@ -105,7 +83,7 @@ public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
public String getBundleId() {
return bundleId;
}
-
+
public DateTime getStartDate() {
return startDate;
}
@@ -125,12 +103,11 @@ public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
public String getPriceList() {
return priceList;
}
-
+
public DateTime getChargedThroughDate() {
return chargedThroughDate;
}
-
@Override
public String toString() {
return "SubscriptionJson [subscriptionId=" + subscriptionId
@@ -140,71 +117,55 @@ public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
}
@Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((billingPeriod == null) ? 0 : billingPeriod.hashCode());
- result = prime * result
- + ((bundleId == null) ? 0 : bundleId.hashCode());
- result = prime * result
- + ((priceList == null) ? 0 : priceList.hashCode());
- result = prime * result
- + ((productCategory == null) ? 0 : productCategory.hashCode());
- result = prime * result
- + ((productName == null) ? 0 : productName.hashCode());
- result = prime * result
- + ((subscriptionId == null) ? 0 : subscriptionId.hashCode());
- return result;
+ public boolean equals(final Object o) {
+ return equalsNoId(o) && super.equals(o);
}
- @Override
- public boolean equals(Object obj) {
- if (equalsNoId(obj) == false) {
- return false;
+ public boolean equalsNoId(final Object o) {
+ if (this == o) {
+ return true;
}
- SubscriptionJsonNoEvents other = (SubscriptionJsonNoEvents) obj;
- if (subscriptionId == null) {
- if (other.subscriptionId != null)
- return false;
- } else if (!subscriptionId.equals(other.subscriptionId))
+ if (o == null || getClass() != o.getClass()) {
return false;
- return true;
- }
+ }
- public boolean equalsNoId(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
+ final SubscriptionJsonNoEvents that = (SubscriptionJsonNoEvents) o;
+
+ if (billingPeriod != null ? !billingPeriod.equals(that.billingPeriod) : that.billingPeriod != null) {
return false;
- if (getClass() != obj.getClass())
+ }
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
return false;
- SubscriptionJsonNoEvents other = (SubscriptionJsonNoEvents) obj;
- if (billingPeriod == null) {
- if (other.billingPeriod != null)
- return false;
- } else if (!billingPeriod.equals(other.billingPeriod))
+ }
+ if (chargedThroughDate != null ? !chargedThroughDate.equals(that.chargedThroughDate) : that.chargedThroughDate != null) {
return false;
- if (bundleId == null) {
- if (other.bundleId != null)
- return false;
- } else if (!bundleId.equals(other.bundleId))
+ }
+ if (priceList != null ? !priceList.equals(that.priceList) : that.priceList != null) {
return false;
- if (priceList == null) {
- if (other.priceList != null)
- return false;
- } else if (!priceList.equals(other.priceList))
+ }
+ if (productCategory != null ? !productCategory.equals(that.productCategory) : that.productCategory != null) {
return false;
- if (productCategory == null) {
- if (other.productCategory != null)
- return false;
- } else if (!productCategory.equals(other.productCategory))
+ }
+ if (productName != null ? !productName.equals(that.productName) : that.productName != null) {
return false;
- if (productName == null) {
- if (other.productName != null)
- return false;
- } else if (!productName.equals(other.productName))
+ }
+ if (startDate != null ? !startDate.equals(that.startDate) : that.startDate != null) {
return false;
+ }
+
return true;
}
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
+ result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
+ result = 31 * result + (productName != null ? productName.hashCode() : 0);
+ result = 31 * result + (productCategory != null ? productCategory.hashCode() : 0);
+ result = 31 * result + (billingPeriod != null ? billingPeriod.hashCode() : 0);
+ result = 31 * result + (priceList != null ? priceList.hashCode() : 0);
+ result = 31 * result + (chargedThroughDate != null ? chargedThroughDate.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonSimple.java
index 7d1d018..9978312 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonSimple.java
@@ -15,25 +15,49 @@
*/
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
public class SubscriptionJsonSimple {
-
@JsonView(BundleTimelineViews.Base.class)
protected final String subscriptionId;
public SubscriptionJsonSimple() {
- this.subscriptionId = null;
+ this(null);
}
@JsonCreator
- public SubscriptionJsonSimple(@JsonProperty("subscriptionId") String subscriptionId) {
+ public SubscriptionJsonSimple(@JsonProperty("subscriptionId") @Nullable final String subscriptionId) {
this.subscriptionId = subscriptionId;
}
public String getSubscriptionId() {
return subscriptionId;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final SubscriptionJsonSimple that = (SubscriptionJsonSimple) o;
+
+ if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return subscriptionId != null ? subscriptionId.hashCode() : 0;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java
index 27f05e4..c68c387 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java
@@ -15,24 +15,23 @@
*/
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
+import org.joda.time.DateTime;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
-import org.joda.time.DateTime;
-
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline.ExistingEvent;
import com.ning.billing.entitlement.api.user.Subscription;
-
import com.ning.billing.util.clock.DefaultClock;
public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
-
@JsonView(BundleTimelineViews.ReadTimeline.class)
private final List<SubscriptionReadEventJson> events;
@@ -42,9 +41,7 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
@JsonView(BundleTimelineViews.WriteTimeline.class)
private final List<SubscriptionNewEventJson> newEvents;
-
public static class SubscriptionReadEventJson extends SubscriptionBaseEventJson {
-
@JsonView(BundleTimelineViews.Timeline.class)
private final String eventId;
@@ -56,16 +53,16 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
this.eventId = null;
this.effectiveDate = null;
}
-
+
@JsonCreator
- public SubscriptionReadEventJson(@JsonProperty("eventId") String eventId,
- @JsonProperty("billingPeriod") String billingPeriod,
- @JsonProperty("requestedDt") DateTime requestedDate,
- @JsonProperty("effectiveDt") DateTime effectiveDate,
- @JsonProperty("product") String product,
- @JsonProperty("priceList") String priceList,
- @JsonProperty("eventType") String eventType,
- @JsonProperty("phase") String phase) {
+ public SubscriptionReadEventJson(@JsonProperty("eventId") final String eventId,
+ @JsonProperty("billingPeriod") final String billingPeriod,
+ @JsonProperty("requestedDt") final DateTime requestedDate,
+ @JsonProperty("effectiveDt") final DateTime effectiveDate,
+ @JsonProperty("product") final String product,
+ @JsonProperty("priceList") final String priceList,
+ @JsonProperty("eventType") final String eventType,
+ @JsonProperty("phase") final String phase) {
super(billingPeriod, requestedDate, product, priceList, eventType, phase);
this.eventId = eventId;
this.effectiveDate = effectiveDate;
@@ -91,32 +88,58 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
+ getClass() + ", hashCode()=" + hashCode()
+ ", toString()=" + super.toString() + "]";
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final SubscriptionReadEventJson that = (SubscriptionReadEventJson) o;
+
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (eventId != null ? !eventId.equals(that.eventId) : that.eventId != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = eventId != null ? eventId.hashCode() : 0;
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ return result;
+ }
}
public static class SubscriptionDeletedEventJson extends SubscriptionReadEventJson {
@JsonCreator
- public SubscriptionDeletedEventJson(@JsonProperty("event_id") String eventId,
- @JsonProperty("billing_period") String billingPeriod,
- @JsonProperty("requested_date") DateTime requestedDate,
- @JsonProperty("effective_date") DateTime effectiveDate,
- @JsonProperty("product") String product,
- @JsonProperty("price_list") String priceList,
- @JsonProperty("event_type") String eventType,
- @JsonProperty("phase") String phase) {
+ public SubscriptionDeletedEventJson(@JsonProperty("event_id") final String eventId,
+ @JsonProperty("billing_period") final String billingPeriod,
+ @JsonProperty("requested_date") final DateTime requestedDate,
+ @JsonProperty("effective_date") final DateTime effectiveDate,
+ @JsonProperty("product") final String product,
+ @JsonProperty("price_list") final String priceList,
+ @JsonProperty("event_type") final String eventType,
+ @JsonProperty("phase") final String phase) {
super(eventId, billingPeriod, requestedDate, effectiveDate, product, priceList, eventType, phase);
-
}
}
-
public static class SubscriptionNewEventJson extends SubscriptionBaseEventJson {
@JsonCreator
- public SubscriptionNewEventJson(@JsonProperty("billing_period") String billingPeriod,
- @JsonProperty("requested_date") DateTime requestedDate,
- @JsonProperty("product") String product,
- @JsonProperty("price_list") String priceList,
- @JsonProperty("event_type") String eventType,
- @JsonProperty("phase") String phase) {
+ public SubscriptionNewEventJson(@JsonProperty("billing_period") final String billingPeriod,
+ @JsonProperty("requested_date") final DateTime requestedDate,
+ @JsonProperty("product") final String product,
+ @JsonProperty("price_list") final String priceList,
+ @JsonProperty("event_type") final String eventType,
+ @JsonProperty("phase") final String phase) {
super(billingPeriod, requestedDate, product, priceList, eventType, phase);
}
@@ -134,7 +157,6 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
}
public static class SubscriptionBaseEventJson {
-
@JsonView(BundleTimelineViews.Timeline.class)
private final String billingPeriod;
@@ -162,14 +184,14 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
this.eventType = null;
this.phase = null;
}
-
+
@JsonCreator
- public SubscriptionBaseEventJson(@JsonProperty("billing_period") String billingPeriod,
- @JsonProperty("requested_date") DateTime requestedDate,
- @JsonProperty("product") String product,
- @JsonProperty("price_list") String priceList,
- @JsonProperty("event_type") String eventType,
- @JsonProperty("phase") String phase) {
+ public SubscriptionBaseEventJson(@JsonProperty("billing_period") final String billingPeriod,
+ @JsonProperty("requested_date") final DateTime requestedDate,
+ @JsonProperty("product") final String product,
+ @JsonProperty("price_list") final String priceList,
+ @JsonProperty("event_type") final String eventType,
+ @JsonProperty("phase") final String phase) {
super();
this.billingPeriod = billingPeriod;
this.requestedDate = DefaultClock.toUTCDateTime(requestedDate);
@@ -202,45 +224,84 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
public String getPhase() {
return phase;
}
- }
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final SubscriptionBaseEventJson that = (SubscriptionBaseEventJson) o;
+
+ if (billingPeriod != null ? !billingPeriod.equals(that.billingPeriod) : that.billingPeriod != null) {
+ return false;
+ }
+ if (eventType != null ? !eventType.equals(that.eventType) : that.eventType != null) {
+ return false;
+ }
+ if (phase != null ? !phase.equals(that.phase) : that.phase != null) {
+ return false;
+ }
+ if (priceList != null ? !priceList.equals(that.priceList) : that.priceList != null) {
+ return false;
+ }
+ if (product != null ? !product.equals(that.product) : that.product != null) {
+ return false;
+ }
+ if (requestedDate != null ? !requestedDate.equals(that.requestedDate) : that.requestedDate != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = billingPeriod != null ? billingPeriod.hashCode() : 0;
+ result = 31 * result + (requestedDate != null ? requestedDate.hashCode() : 0);
+ result = 31 * result + (product != null ? product.hashCode() : 0);
+ result = 31 * result + (priceList != null ? priceList.hashCode() : 0);
+ result = 31 * result + (eventType != null ? eventType.hashCode() : 0);
+ result = 31 * result + (phase != null ? phase.hashCode() : 0);
+ return result;
+ }
+ }
@JsonCreator
- public SubscriptionJsonWithEvents(@JsonProperty("subscription_id") String subscriptionId,
- @JsonProperty("events") List<SubscriptionReadEventJson> events,
- @JsonProperty("new_events") List<SubscriptionNewEventJson> newEvents,
- @JsonProperty("deleted_events") List<SubscriptionDeletedEventJson> deletedEvents) {
+ public SubscriptionJsonWithEvents(@JsonProperty("subscription_id") @Nullable final String subscriptionId,
+ @JsonProperty("events") @Nullable final List<SubscriptionReadEventJson> events,
+ @JsonProperty("new_events") @Nullable final List<SubscriptionNewEventJson> newEvents,
+ @JsonProperty("deleted_events") @Nullable final List<SubscriptionDeletedEventJson> deletedEvents) {
super(subscriptionId);
this.events = events;
this.deletedEvents = deletedEvents;
this.newEvents = newEvents;
}
-
+
public SubscriptionJsonWithEvents() {
- super(null);
- this.events = null;
- this.deletedEvents = null;
- this.newEvents = null;
+ this((String) null, null, null, null);
}
-
+
public SubscriptionJsonWithEvents(final Subscription data,
- List<SubscriptionReadEventJson> events, List<SubscriptionDeletedEventJson> deletedEvents, List<SubscriptionNewEventJson> newEvents) {
- super(data.getId().toString());
- this.events = events;
- this.deletedEvents = deletedEvents;
- this.newEvents = newEvents;
+ @Nullable final List<SubscriptionReadEventJson> events,
+ @Nullable final List<SubscriptionNewEventJson> newEvents,
+ @Nullable final List<SubscriptionDeletedEventJson> deletedEvents) {
+ this(data.getId().toString(), events, newEvents, deletedEvents);
}
-
- public SubscriptionJsonWithEvents(final UUID bundleId, final SubscriptionTimeline input) {
+
+ public SubscriptionJsonWithEvents(@Nullable final UUID bundleId, final SubscriptionTimeline input) {
super(input.getId().toString());
this.events = new LinkedList<SubscriptionReadEventJson>();
- for (ExistingEvent cur : input.getExistingEvents()) {
- PlanPhaseSpecifier spec = cur.getPlanPhaseSpecifier();
+ for (final ExistingEvent cur : input.getExistingEvents()) {
+ final PlanPhaseSpecifier spec = cur.getPlanPhaseSpecifier();
this.events.add(new SubscriptionReadEventJson(cur.getEventId().toString(), spec.getBillingPeriod().toString(), cur.getRequestedDate(), cur.getEffectiveDate(),
- spec.getProductName(), spec.getPriceListName(), cur.getSubscriptionTransitionType().toString(), spec.getPhaseType().toString()));
+ spec.getProductName(), spec.getPriceListName(), cur.getSubscriptionTransitionType().toString(), spec.getPhaseType().toString()));
}
- this.deletedEvents = null;
this.newEvents = null;
+ this.deletedEvents = null;
}
public String getSubscriptionId() {
@@ -258,4 +319,36 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
public List<SubscriptionDeletedEventJson> getDeletedEvents() {
return deletedEvents;
}
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final SubscriptionJsonWithEvents that = (SubscriptionJsonWithEvents) o;
+
+ if (deletedEvents != null ? !deletedEvents.equals(that.deletedEvents) : that.deletedEvents != null) {
+ return false;
+ }
+ if (events != null ? !events.equals(that.events) : that.events != null) {
+ return false;
+ }
+ if (newEvents != null ? !newEvents.equals(that.newEvents) : that.newEvents != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = events != null ? events.hashCode() : 0;
+ result = 31 * result + (deletedEvents != null ? deletedEvents.hashCode() : 0);
+ result = 31 * result + (newEvents != null ? newEvents.hashCode() : 0);
+ return result;
+ }
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
index d620d0f..908f6a0 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
@@ -15,63 +15,60 @@
*/
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TagDefinitionJson {
-
private final String name;
private final String description;
- public TagDefinitionJson() {
- this.name = null;
- this.description = null;
+ public TagDefinitionJson() {
+ this(null, null);
}
-
+
@JsonCreator
- public TagDefinitionJson(@JsonProperty("name") String name,
- @JsonProperty("description") String description) {
+ public TagDefinitionJson(@JsonProperty("name") @Nullable final String name,
+ @JsonProperty("description") @Nullable final String description) {
super();
this.name = name;
this.description = description;
}
-
+
public String getName() {
return name;
}
+
public String getDescription() {
return description;
}
@Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((description == null) ? 0 : description.hashCode());
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
+ public boolean equals(final Object o) {
+ if (this == o) {
return true;
- if (obj == null)
+ }
+ if (o == null || getClass() != o.getClass()) {
return false;
- if (getClass() != obj.getClass())
- return false;
- TagDefinitionJson other = (TagDefinitionJson) obj;
- if (description == null) {
- if (other.description != null)
- return false;
- } else if (!description.equals(other.description))
+ }
+
+ final TagDefinitionJson that = (TagDefinitionJson) o;
+
+ if (description != null ? !description.equals(that.description) : that.description != null) {
return false;
- if (name == null) {
- if (other.name != null)
- return false;
- } else if (!name.equals(other.name))
+ }
+ if (name != null ? !name.equals(that.name) : that.name != null) {
return false;
+ }
+
return true;
}
+
+ @Override
+ public int hashCode() {
+ int result = name != null ? name.hashCode() : 0;
+ result = 31 * result + (description != null ? description.hashCode() : 0);
+ return result;
+ }
}
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 3eee26e..41556a9 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
@@ -18,8 +18,6 @@ package com.ning.billing.jaxrs.resources;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-
-import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -38,8 +36,6 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import com.ning.billing.util.api.CustomFieldUserApi;
-import com.ning.billing.util.dao.ObjectType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,7 +65,9 @@ import com.ning.billing.jaxrs.util.TagHelper;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.api.PaymentAttempt;
+import com.ning.billing.util.api.CustomFieldUserApi;
import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.dao.ObjectType;
@Singleton
@Path(JaxrsResource.ACCOUNTS_PATH)
@@ -91,7 +89,7 @@ public class AccountResource extends JaxRsResourceBase {
@Inject
public AccountResource(final JaxrsUriBuilder uriBuilder,
final AccountUserApi accountApi,
- final EntitlementUserApi entitlementApi,
+ final EntitlementUserApi entitlementApi,
final InvoiceUserApi invoiceApi,
final PaymentApi paymentApi,
final EntitlementTimelineApi timelineApi,
@@ -119,9 +117,9 @@ public class AccountResource extends JaxRsResourceBase {
AccountJson json = new AccountJson(account);
return Response.status(Status.OK).entity(json).build();
} catch (AccountApiException e) {
- return Response.status(Status.NO_CONTENT).build();
+ return Response.status(Status.NO_CONTENT).build();
}
-
+
}
@GET
@@ -145,7 +143,7 @@ public class AccountResource extends JaxRsResourceBase {
}
}
-
+
@GET
@Produces(APPLICATION_JSON)
public Response getAccountByKey(@QueryParam(QUERY_EXTERNAL_KEY) String externalKey) {
@@ -164,7 +162,7 @@ public class AccountResource extends JaxRsResourceBase {
}
}
-
+
@POST
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@@ -202,7 +200,7 @@ public class AccountResource extends JaxRsResourceBase {
return getAccount(accountId);
} catch (AccountApiException e) {
if (e.getCode() == ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_ID.getCode()) {
- return Response.status(Status.NO_CONTENT).build();
+ return Response.status(Status.NO_CONTENT).build();
} else {
log.info(String.format("Failed to update account %s with %s", accountId, json), e);
return Response.status(Status.BAD_REQUEST).build();
@@ -234,11 +232,11 @@ public class AccountResource extends JaxRsResourceBase {
@Produces(APPLICATION_JSON)
public Response getAccountTimeline(@PathParam("accountId") String accountId) {
try {
-
+
Account account = accountApi.getAccountById(UUID.fromString(accountId));
-
+
List<Invoice> invoices = invoiceApi.getInvoicesByAccount(account.getId());
- List<PaymentAttempt> payments = new LinkedList<PaymentAttempt>();
+ List<PaymentAttempt> payments = new LinkedList<PaymentAttempt>();
if (invoices.size() > 0) {
for (Invoice cur : invoices) {
payments.addAll(paymentApi.getPaymentAttemptsForInvoiceId(cur.getId()));
@@ -262,7 +260,7 @@ public class AccountResource extends JaxRsResourceBase {
return Response.status(Status.INTERNAL_SERVER_ERROR).build();
}
}
-
+
@GET
@Path(CUSTOM_FIELD_URI)
@Produces(APPLICATION_JSON)
@@ -282,7 +280,7 @@ public class AccountResource extends JaxRsResourceBase {
return super.createCustomFields(UUID.fromString(id), customFields,
context.createContext(createdBy, reason, comment));
}
-
+
@DELETE
@Path(CUSTOM_FIELD_URI)
@Consumes(APPLICATION_JSON)
@@ -305,7 +303,6 @@ public class AccountResource extends JaxRsResourceBase {
@POST
@Path(TAG_URI)
- @Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
public Response createTags(@PathParam(ID_PARAM_NAME) final String id,
@QueryParam(QUERY_TAGS) final String tagList,
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
index 226457e..85cae69 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/CreditResource.java
@@ -79,7 +79,6 @@ public class CreditResource implements JaxrsResource {
}
@POST
- @Path("/accounts/{accountId:" + UUID_PATTERN + "}")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
public Response createCredit(final CreditJson json,
@@ -106,33 +105,4 @@ public class CreditResource implements JaxrsResource {
return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
}
}
-
-
}
-
-
-//POST /1.0/accounts/<account_id>/credits Creates a credit for that account 201 (CREATED), 400 (BAD_REQUEST), 404 (NOT_FOUND)
-//Semantics:
-//
-//All operations are synchronous
-//JSON Credit GET:
-// {
-// "accountId" : "theAccountId",
-// "credits" : [{
-// "requestedDate" : "2012-05-12T15:34:22.000Z",
-// "effectiveDate" : "2012-05-12T15:34:22.000Z",
-// "creditAmount" : 54.32,
-// "invoiceId" : "theInvoiceId",
-// "invoiceNumber" : "TheInvoiceNumber",
-// "reason" : "whatever"
-// }]
-// }
-//
-//JSON Credit POST:
-// {
-// "creditAmount" : 54.32,
-// "reason" : "whatever",
-// "requestedDate" : "2012-05-12T15:34:22.000Z",
-// "invoiceId" : "theInvoiceId",
-// "invoiceNumber" : "TheInvoiceNumber"
-// }
\ No newline at end of file
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
new file mode 100644
index 0000000..901a8e4
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJson.java
@@ -0,0 +1,123 @@
+/*
+ * 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.util.UUID;
+
+import org.joda.time.DateTimeZone;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.mock.MockAccountBuilder;
+
+public class TestAccountJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String accountId = UUID.randomUUID().toString();
+ final String name = UUID.randomUUID().toString();
+ final Integer length = 12;
+ final String externalKey = UUID.randomUUID().toString();
+ final String email = UUID.randomUUID().toString();
+ final Integer billCycleDay = 6;
+ final String currency = UUID.randomUUID().toString();
+ final String paymentProvider = UUID.randomUUID().toString();
+ final String timeZone = UUID.randomUUID().toString();
+ final String address1 = UUID.randomUUID().toString();
+ final String address2 = UUID.randomUUID().toString();
+ final String company = UUID.randomUUID().toString();
+ final String state = UUID.randomUUID().toString();
+ final String country = UUID.randomUUID().toString();
+ final String phone = UUID.randomUUID().toString();
+
+ final AccountJson accountJson = new AccountJson(accountId, name, length, externalKey,
+ email, billCycleDay, currency, paymentProvider,
+ timeZone, address1, address2, company, state,
+ country, phone);
+ Assert.assertEquals(accountJson.getAccountId(), accountId);
+ Assert.assertEquals(accountJson.getName(), name);
+ Assert.assertEquals(accountJson.getLength(), length);
+ Assert.assertEquals(accountJson.getExternalKey(), externalKey);
+ Assert.assertEquals(accountJson.getEmail(), email);
+ Assert.assertEquals(accountJson.getBillCycleDay(), billCycleDay);
+ Assert.assertEquals(accountJson.getCurrency(), currency);
+ Assert.assertEquals(accountJson.getPaymentProvider(), paymentProvider);
+ Assert.assertEquals(accountJson.getTimeZone(), timeZone);
+ Assert.assertEquals(accountJson.getAddress1(), address1);
+ Assert.assertEquals(accountJson.getAddress2(), address2);
+ Assert.assertEquals(accountJson.getCompany(), company);
+ Assert.assertEquals(accountJson.getState(), state);
+ Assert.assertEquals(accountJson.getCountry(), country);
+ Assert.assertEquals(accountJson.getPhone(), phone);
+
+ final String asJson = mapper.writeValueAsString(accountJson);
+ Assert.assertEquals(asJson, "{\"accountId\":\"" + accountJson.getAccountId() + "\",\"name\":\"" + accountJson.getName() + "\"," +
+ "\"externalKey\":\"" + accountJson.getExternalKey() + "\",\"email\":\"" + accountJson.getEmail() + "\"," +
+ "\"currency\":\"" + accountJson.getCurrency() + "\",\"paymentProvider\":\"" + accountJson.getPaymentProvider() + "\"," +
+ "\"address1\":\"" + accountJson.getAddress1() + "\",\"address2\":\"" + accountJson.getAddress2() + "\"," +
+ "\"company\":\"" + accountJson.getCompany() + "\",\"state\":\"" + accountJson.getState() + "\"," +
+ "\"country\":\"" + accountJson.getCountry() + "\",\"phone\":\"" + accountJson.getPhone() + "\"," +
+ "\"length\":" + accountJson.getLength() + ",\"billCycleDay\":" + accountJson.getBillCycleDay() + "," +
+ "\"timeZone\":\"" + accountJson.getTimeZone() + "\"}");
+
+ final AccountJson fromJson = mapper.readValue(asJson, AccountJson.class);
+ Assert.assertEquals(fromJson, accountJson);
+ }
+
+ @Test(groups = "fast")
+ public void testFromAccount() throws Exception {
+ final MockAccountBuilder accountBuilder = new MockAccountBuilder();
+ accountBuilder.address1(UUID.randomUUID().toString());
+ accountBuilder.address2(UUID.randomUUID().toString());
+ accountBuilder.billingCycleDay(4);
+ accountBuilder.city(UUID.randomUUID().toString());
+ accountBuilder.companyName(UUID.randomUUID().toString());
+ accountBuilder.country(UUID.randomUUID().toString());
+ accountBuilder.currency(Currency.GBP);
+ accountBuilder.email(UUID.randomUUID().toString());
+ accountBuilder.externalKey(UUID.randomUUID().toString());
+ accountBuilder.firstNameLength(12);
+ accountBuilder.isNotifiedForInvoices(true);
+ accountBuilder.locale(UUID.randomUUID().toString());
+ accountBuilder.migrated(true);
+ accountBuilder.name(UUID.randomUUID().toString());
+ accountBuilder.paymentProviderName(UUID.randomUUID().toString());
+ accountBuilder.phone(UUID.randomUUID().toString());
+ accountBuilder.postalCode(UUID.randomUUID().toString());
+ accountBuilder.stateOrProvince(UUID.randomUUID().toString());
+ accountBuilder.timeZone(DateTimeZone.UTC);
+ final Account account = accountBuilder.build();
+
+ final AccountJson accountJson = new AccountJson(account);
+ Assert.assertEquals(accountJson.getAddress1(), account.getAddress1());
+ Assert.assertEquals(accountJson.getAddress2(), account.getAddress2());
+ Assert.assertEquals((int) accountJson.getBillCycleDay(), (int) account.getBillCycleDay());
+ Assert.assertEquals(accountJson.getCountry(), account.getCountry());
+ Assert.assertEquals(accountJson.getCompany(), account.getCompanyName());
+ Assert.assertEquals(accountJson.getCurrency(), account.getCurrency().toString());
+ Assert.assertEquals(accountJson.getEmail(), account.getEmail());
+ Assert.assertEquals(accountJson.getExternalKey(), account.getExternalKey());
+ Assert.assertEquals(accountJson.getName(), account.getName());
+ Assert.assertEquals(accountJson.getPaymentProvider(), account.getPaymentProviderName());
+ Assert.assertEquals(accountJson.getPhone(), account.getPhone());
+ Assert.assertEquals(accountJson.getState(), account.getStateOrProvince());
+ Assert.assertEquals(accountJson.getTimeZone(), account.getTimeZone().toString());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJsonSimple.java
new file mode 100644
index 0000000..99ff73b
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountJsonSimple.java
@@ -0,0 +1,42 @@
+/*
+ * 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 com.fasterxml.jackson.databind.ObjectMapper;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.UUID;
+
+public class TestAccountJsonSimple {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String accountId = UUID.randomUUID().toString();
+ final String externalKey = UUID.randomUUID().toString();
+ final AccountJsonSimple accountJsonSimple = new AccountJsonSimple(accountId, externalKey);
+ Assert.assertEquals(accountJsonSimple.getAccountId(), accountId);
+ Assert.assertEquals(accountJsonSimple.getExternalKey(), externalKey);
+
+ final String asJson = mapper.writeValueAsString(accountJsonSimple);
+ Assert.assertEquals(asJson, "{\"accountId\":\"" + accountJsonSimple.getAccountId() + "\"," +
+ "\"externalKey\":\"" + accountJsonSimple.getExternalKey() + "\"}");
+
+ final AccountJsonSimple fromJson = mapper.readValue(asJson, AccountJsonSimple.class);
+ Assert.assertEquals(fromJson, accountJsonSimple);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java
new file mode 100644
index 0000000..50b9a4f
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java
@@ -0,0 +1,20 @@
+/*
+ * 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;
+
+public class TestAccountTimelineJson {
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
new file mode 100644
index 0000000..e0e89ea
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
@@ -0,0 +1,65 @@
+/*
+ * 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.util.UUID;
+
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+
+public class TestBundleJsonNoSubscriptions {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String bundleId = UUID.randomUUID().toString();
+ final String accountId = UUID.randomUUID().toString();
+ final String externalKey = UUID.randomUUID().toString();
+ final BundleJsonNoSubscriptions bundleJsonNoSubscriptions = new BundleJsonNoSubscriptions(bundleId, accountId, externalKey, null);
+ Assert.assertEquals(bundleJsonNoSubscriptions.getBundleId(), bundleId);
+ Assert.assertEquals(bundleJsonNoSubscriptions.getAccountId(), accountId);
+ Assert.assertEquals(bundleJsonNoSubscriptions.getExternalKey(), externalKey);
+
+ final String asJson = mapper.writeValueAsString(bundleJsonNoSubscriptions);
+ Assert.assertEquals(asJson, "{\"bundleId\":\"" + bundleJsonNoSubscriptions.getBundleId() + "\"," +
+ "\"accountId\":\"" + bundleJsonNoSubscriptions.getAccountId() + "\"," +
+ "\"externalKey\":\"" + bundleJsonNoSubscriptions.getExternalKey() + "\"}");
+
+ final BundleJsonNoSubscriptions fromJson = mapper.readValue(asJson, BundleJsonNoSubscriptions.class);
+ Assert.assertEquals(fromJson, bundleJsonNoSubscriptions);
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscriptionBundle() throws Exception {
+ final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ final UUID accountId = UUID.randomUUID();
+ Mockito.when(bundle.getId()).thenReturn(bundleId);
+ Mockito.when(bundle.getKey()).thenReturn(externalKey);
+ Mockito.when(bundle.getAccountId()).thenReturn(accountId);
+
+ final BundleJsonNoSubscriptions bundleJsonNoSubscriptions = new BundleJsonNoSubscriptions(bundle);
+ Assert.assertEquals(bundleJsonNoSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonNoSubscriptions.getExternalKey(), externalKey);
+ Assert.assertEquals(bundleJsonNoSubscriptions.getAccountId(), accountId.toString());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java
new file mode 100644
index 0000000..7ac93ed
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java
@@ -0,0 +1,44 @@
+/*
+ * 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.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class TestBundleJsonSimple {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String bundleId = UUID.randomUUID().toString();
+ final String externalKey = UUID.randomUUID().toString();
+ final BundleJsonSimple bundleJsonSimple = new BundleJsonSimple(bundleId, externalKey);
+ Assert.assertEquals(bundleJsonSimple.getBundleId(), bundleId);
+ Assert.assertEquals(bundleJsonSimple.getExternalKey(), externalKey);
+
+ final String asJson = mapper.writeValueAsString(bundleJsonSimple);
+ Assert.assertEquals(asJson, "{\"bundleId\":\"" + bundleJsonSimple.getBundleId() + "\"," +
+ "\"externalKey\":\"" + bundleJsonSimple.getExternalKey() + "\"}");
+
+ final BundleJsonSimple fromJson = mapper.readValue(asJson, BundleJsonSimple.class);
+ Assert.assertEquals(fromJson, bundleJsonSimple);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
new file mode 100644
index 0000000..5c65a7d
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
@@ -0,0 +1,141 @@
+/*
+ * 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.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.PhaseType;
+import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.timeline.BundleTimeline;
+import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.util.clock.DefaultClock;
+
+public class TestBundleJsonWithSubscriptions {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final PlanPhaseSpecifier planPhaseSpecifier = new PlanPhaseSpecifier(UUID.randomUUID().toString(), ProductCategory.BASE,
+ BillingPeriod.NO_BILLING_PERIOD, UUID.randomUUID().toString(),
+ PhaseType.EVERGREEN);
+ Mockito.when(event.getEffectiveDate()).thenReturn(effectiveDate);
+ Mockito.when(event.getEventId()).thenReturn(eventId);
+ Mockito.when(event.getSubscriptionTransitionType()).thenReturn(SubscriptionTransitionType.CREATE);
+ Mockito.when(event.getPlanPhaseSpecifier()).thenReturn(planPhaseSpecifier);
+
+ final SubscriptionTimeline subscriptionTimeline = Mockito.mock(SubscriptionTimeline.class);
+ Mockito.when(subscriptionTimeline.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscriptionTimeline.getExistingEvents()).thenReturn(ImmutableList.<SubscriptionTimeline.ExistingEvent>of(event));
+
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ final SubscriptionJsonWithEvents subscription = new SubscriptionJsonWithEvents(bundleId, subscriptionTimeline);
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(subscription));
+ Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getSubscriptions().size(), 1);
+
+ final String asJson = mapper.writeValueAsString(bundleJsonWithSubscriptions);
+ Assert.assertEquals(asJson, "{\"bundleId\":\"" + bundleJsonWithSubscriptions.getBundleId() + "\"," +
+ "\"externalKey\":\"" + bundleJsonWithSubscriptions.getExternalKey() + "\"," +
+ "\"subscriptions\":[{\"events\":[{\"eventId\":\"" + event.getEventId().toString() + "\"," +
+ "\"billingPeriod\":\"" + event.getPlanPhaseSpecifier().getBillingPeriod().toString() + "\"," +
+ "\"product\":\"" + event.getPlanPhaseSpecifier().getProductName() + "\"," +
+ "\"priceList\":\"" + event.getPlanPhaseSpecifier().getPriceListName() + "\"," +
+ "\"eventType\":\"" + event.getSubscriptionTransitionType().toString() + "\"," +
+ "\"phase\":\"" + event.getPlanPhaseSpecifier().getPhaseType() + "\"," +
+ "\"requestedDate\":null," +
+ "\"effectiveDate\":\"" + event.getEffectiveDate().toDateTimeISO().toString() + "\"}]," +
+ "\"subscriptionId\":\"" + subscriptionTimeline.getId().toString() + "\",\"deletedEvents\":null,\"newEvents\":null}]}");
+
+ final BundleJsonWithSubscriptions fromJson = mapper.readValue(asJson, BundleJsonWithSubscriptions.class);
+ Assert.assertEquals(fromJson, bundleJsonWithSubscriptions);
+ }
+
+ @Test(groups = "fast")
+ public void testFromBundleTimeline() throws Exception {
+ final SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final PlanPhaseSpecifier planPhaseSpecifier = new PlanPhaseSpecifier(UUID.randomUUID().toString(), ProductCategory.BASE,
+ BillingPeriod.NO_BILLING_PERIOD, UUID.randomUUID().toString(),
+ PhaseType.EVERGREEN);
+ Mockito.when(event.getEffectiveDate()).thenReturn(effectiveDate);
+ Mockito.when(event.getEventId()).thenReturn(eventId);
+ Mockito.when(event.getSubscriptionTransitionType()).thenReturn(SubscriptionTransitionType.CREATE);
+ Mockito.when(event.getPlanPhaseSpecifier()).thenReturn(planPhaseSpecifier);
+
+ final SubscriptionTimeline subscriptionTimeline = Mockito.mock(SubscriptionTimeline.class);
+ Mockito.when(subscriptionTimeline.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscriptionTimeline.getExistingEvents()).thenReturn(ImmutableList.<SubscriptionTimeline.ExistingEvent>of(event));
+
+ final BundleTimeline bundleTimeline = Mockito.mock(BundleTimeline.class);
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ Mockito.when(bundleTimeline.getBundleId()).thenReturn(bundleId);
+ Mockito.when(bundleTimeline.getExternalKey()).thenReturn(externalKey);
+ Mockito.when(bundleTimeline.getSubscriptions()).thenReturn(ImmutableList.<SubscriptionTimeline>of(subscriptionTimeline));
+
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(null, bundleTimeline);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getSubscriptions().size(), 1);
+ final SubscriptionJsonWithEvents events = bundleJsonWithSubscriptions.getSubscriptions().get(0);
+ Assert.assertNull(events.getDeletedEvents());
+ Assert.assertNull(events.getNewEvents());
+ Assert.assertEquals(events.getEvents().size(), 1);
+ // Note - ms are truncated
+ Assert.assertEquals(events.getEvents().get(0).getEffectiveDate(), DefaultClock.toUTCDateTime(effectiveDate));
+ Assert.assertEquals(events.getEvents().get(0).getEventId(), eventId.toString());
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscriptionBundle() throws Exception {
+ final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ Mockito.when(bundle.getId()).thenReturn(bundleId);
+ Mockito.when(bundle.getKey()).thenReturn(externalKey);
+
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundle);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
+ Assert.assertNull(bundleJsonWithSubscriptions.getSubscriptions());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
new file mode 100644
index 0000000..180e816
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
@@ -0,0 +1,161 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.PhaseType;
+import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
+import com.ning.billing.util.clock.DefaultClock;
+
+public class TestBundleTimelineJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String viewId = UUID.randomUUID().toString();
+ final String reason = UUID.randomUUID().toString();
+
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = createBundleWithSubscriptions();
+ final InvoiceJsonSimple invoiceJsonSimple = createInvoice();
+ final PaymentJsonSimple paymentJsonSimple = createPayment(UUID.fromString(invoiceJsonSimple.getAccountId()),
+ UUID.fromString(invoiceJsonSimple.getInvoiceId()));
+
+ final BundleTimelineJson bundleTimelineJson = new BundleTimelineJson(viewId,
+ bundleJsonWithSubscriptions,
+ ImmutableList.<PaymentJsonSimple>of(paymentJsonSimple),
+ ImmutableList.<InvoiceJsonSimple>of(invoiceJsonSimple),
+ reason);
+
+ final String asJson = mapper.writeValueAsString(bundleTimelineJson);
+
+ final SubscriptionJsonWithEvents subscription = bundleTimelineJson.getBundle().getSubscriptions().get(0);
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson event = subscription.getEvents().get(0);
+ final PaymentJsonSimple payment = bundleTimelineJson.getPayments().get(0);
+ final InvoiceJsonSimple invoice = bundleTimelineJson.getInvoices().get(0);
+
+ Assert.assertEquals(asJson, "{\"viewId\":\"" + bundleTimelineJson.getViewId() + "\"," +
+ "\"bundle\":{\"bundleId\":\"" + bundleTimelineJson.getBundle().getBundleId() + "\"," +
+ "\"externalKey\":\"" + bundleTimelineJson.getBundle().getExternalKey() + "\"," +
+ "\"subscriptions\":" +
+ "[{\"events\":[{\"eventId\":\"" + event.getEventId() + "\"," +
+ "\"billingPeriod\":\"" + event.getBillingPeriod() + "\"," +
+ "\"product\":\"" + event.getProduct() + "\"," +
+ "\"priceList\":\"" + event.getPriceList() + "\"," +
+ "\"eventType\":\"" + event.getEventType() + "\"," +
+ "\"phase\":\"" + event.getPhase() + "\"," +
+ "\"requestedDate\":null," +
+ "\"effectiveDate\":\"" + event.getEffectiveDate().toDateTimeISO().toString() + "\"}]," +
+ "\"subscriptionId\":\"" + subscription.getSubscriptionId() + "\"," +
+ "\"deletedEvents\":null," +
+ "\"newEvents\":null}]}," +
+ "\"payments\":[{\"amount\":" + payment.getAmount() + "," +
+ "\"paidAmount\":" + payment.getPaidAmount() + "," +
+ "\"invoiceId\":\"" + payment.getInvoiceId() + "\"," +
+ "\"paymentId\":\"" + payment.getPaymentId() + "\"," +
+ "\"requestedDate\":\"" + payment.getRequestedDate().toDateTimeISO().toString() + "\"," +
+ "\"effectiveDate\":\"" + payment.getEffectiveDate().toDateTimeISO().toString() + "\"," +
+ "\"retryCount\":" + payment.getRetryCount() + "," +
+ "\"currency\":\"" + payment.getCurrency() + "\"," +
+ "\"status\":\"" + payment.getStatus() + "\"," +
+ "\"accountId\":\"" + payment.getAccountId() + "\"}]," +
+ "\"invoices\":[{\"amount\":" + invoice.getAmount() + "," +
+ "\"credit\":" + invoice.getCredit() + "," +
+ "\"invoiceId\":\"" + invoice.getInvoiceId() + "\"," +
+ "\"invoiceDate\":\"" + invoice.getInvoiceDate().toDateTimeISO().toString() + "\"," +
+ "\"targetDate\":\"" + invoice.getTargetDate() + "\"," +
+ "\"invoiceNumber\":\"" + invoice.getInvoiceNumber() + "\"," +
+ "\"balance\":" + invoice.getBalance() + "," +
+ "\"accountId\":\"" + invoice.getAccountId() + "\"}]," +
+ "\"reasonForChange\":\"" + reason + "\"}");
+
+ final BundleTimelineJson fromJson = mapper.readValue(asJson, BundleTimelineJson.class);
+ Assert.assertEquals(fromJson, bundleTimelineJson);
+ }
+
+ private BundleJsonWithSubscriptions createBundleWithSubscriptions() {
+ final SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final PlanPhaseSpecifier planPhaseSpecifier = new PlanPhaseSpecifier(UUID.randomUUID().toString(), ProductCategory.BASE,
+ BillingPeriod.NO_BILLING_PERIOD, UUID.randomUUID().toString(),
+ PhaseType.EVERGREEN);
+ Mockito.when(event.getEffectiveDate()).thenReturn(effectiveDate);
+ Mockito.when(event.getEventId()).thenReturn(eventId);
+ Mockito.when(event.getSubscriptionTransitionType()).thenReturn(SubscriptionTransitionType.CREATE);
+ Mockito.when(event.getPlanPhaseSpecifier()).thenReturn(planPhaseSpecifier);
+
+ final SubscriptionTimeline subscriptionTimeline = Mockito.mock(SubscriptionTimeline.class);
+ Mockito.when(subscriptionTimeline.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscriptionTimeline.getExistingEvents()).thenReturn(ImmutableList.<SubscriptionTimeline.ExistingEvent>of(event));
+
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ final SubscriptionJsonWithEvents subscription = new SubscriptionJsonWithEvents(bundleId, subscriptionTimeline);
+
+ return new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(subscription));
+ }
+
+ private InvoiceJsonSimple createInvoice() {
+ final UUID accountId = UUID.randomUUID();
+ final UUID invoiceId = UUID.randomUUID();
+ final BigDecimal invoiceAmount = BigDecimal.TEN;
+ final BigDecimal credit = BigDecimal.ONE;
+ final DateTime invoiceDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final DateTime targetDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final BigDecimal balance = BigDecimal.ZERO;
+
+ return new InvoiceJsonSimple(invoiceAmount, credit, invoiceId.toString(), invoiceDate,
+ targetDate, invoiceNumber, balance, accountId.toString());
+ }
+
+ private PaymentJsonSimple createPayment(final UUID accountId, final UUID invoiceId) {
+ final UUID paymentId = UUID.randomUUID();
+ final BigDecimal paidAmount = BigDecimal.TEN;
+ final BigDecimal amount = BigDecimal.ZERO;
+ final DateTime paymentRequestedDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final DateTime paymentEffectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final Integer retryCount = Integer.MAX_VALUE;
+ final String currency = "USD";
+ final String status = UUID.randomUUID().toString();
+
+ return new PaymentJsonSimple(amount, paidAmount, invoiceId, paymentId,
+ paymentRequestedDate, paymentEffectiveDate, retryCount,
+ currency, status, accountId);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestChargebackCollectionJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestChargebackCollectionJson.java
new file mode 100644
index 0000000..b9a7612
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestChargebackCollectionJson.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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+
+public class TestChargebackCollectionJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final DateTime requestedDate = new DateTime(DateTimeZone.UTC);
+ final DateTime effectiveDate = new DateTime(DateTimeZone.UTC);
+ final BigDecimal chargebackAmount = BigDecimal.TEN;
+ final String paymentId = UUID.randomUUID().toString();
+ final String reason = UUID.randomUUID().toString();
+ final ChargebackJson chargebackJson = new ChargebackJson(requestedDate, effectiveDate, chargebackAmount, paymentId, reason);
+
+ final String accountId = UUID.randomUUID().toString();
+ final ChargebackCollectionJson chargebackCollectionJson = new ChargebackCollectionJson(accountId, ImmutableList.<ChargebackJson>of(chargebackJson));
+ Assert.assertEquals(chargebackCollectionJson.getAccountId(), accountId);
+ Assert.assertEquals(chargebackCollectionJson.getChargebacks().size(), 1);
+ Assert.assertEquals(chargebackCollectionJson.getChargebacks().get(0), chargebackJson);
+
+ final String asJson = mapper.writeValueAsString(chargebackCollectionJson);
+ Assert.assertEquals(asJson, "{\"accountId\":\"" + accountId + "\",\"chargebacks\":[" +
+ "{\"requestedDate\":\"" + chargebackJson.getRequestedDate() + "\"," +
+ "\"effectiveDate\":\"" + chargebackJson.getEffectiveDate() + "\"," +
+ "\"chargebackAmount\":" + chargebackJson.getChargebackAmount() + "," +
+ "\"paymentId\":\"" + chargebackJson.getPaymentId() + "\"," +
+ "\"reason\":\"" + chargebackJson.getReason() + "\"}]}");
+
+ final ChargebackCollectionJson fromJson = mapper.readValue(asJson, ChargebackCollectionJson.class);
+ Assert.assertEquals(fromJson, chargebackCollectionJson);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestChargebackJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestChargebackJson.java
new file mode 100644
index 0000000..3806741
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestChargebackJson.java
@@ -0,0 +1,63 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+
+public class TestChargebackJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final DateTime requestedDate = new DateTime(DateTimeZone.UTC);
+ final DateTime effectiveDate = new DateTime(DateTimeZone.UTC);
+ final BigDecimal chargebackAmount = BigDecimal.TEN;
+ final String paymentId = UUID.randomUUID().toString();
+ final String reason = UUID.randomUUID().toString();
+ final ChargebackJson chargebackJson = new ChargebackJson(requestedDate, effectiveDate, chargebackAmount, paymentId, reason);
+ Assert.assertEquals(chargebackJson.getRequestedDate(), requestedDate);
+ Assert.assertEquals(chargebackJson.getEffectiveDate(), effectiveDate);
+ Assert.assertEquals(chargebackJson.getChargebackAmount(), chargebackAmount);
+ Assert.assertEquals(chargebackJson.getPaymentId(), paymentId);
+ Assert.assertEquals(chargebackJson.getReason(), reason);
+
+ final String asJson = mapper.writeValueAsString(chargebackJson);
+ Assert.assertEquals(asJson, "{\"requestedDate\":\"" + chargebackJson.getRequestedDate() + "\"," +
+ "\"effectiveDate\":\"" + chargebackJson.getEffectiveDate() + "\"," +
+ "\"chargebackAmount\":" + chargebackJson.getChargebackAmount() + "," +
+ "\"paymentId\":\"" + chargebackJson.getPaymentId() + "\"," +
+ "\"reason\":\"" + chargebackJson.getReason() + "\"}");
+
+ final ChargebackJson fromJson = mapper.readValue(asJson, ChargebackJson.class);
+ Assert.assertEquals(fromJson, chargebackJson);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java
new file mode 100644
index 0000000..a1382cd
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditCollectionJson.java
@@ -0,0 +1,69 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+
+public class TestCreditCollectionJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final UUID accountId = UUID.randomUUID();
+
+ final BigDecimal creditAmount = BigDecimal.TEN;
+ final UUID invoiceId = UUID.randomUUID();
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final DateTime requestedDate = new DateTime(DateTimeZone.UTC);
+ final DateTime effectiveDate = new DateTime(DateTimeZone.UTC);
+ final String reason = UUID.randomUUID().toString();
+ final CreditJson creditJson = new CreditJson(creditAmount, invoiceId, invoiceNumber, requestedDate, effectiveDate, reason);
+
+ final CreditCollectionJson creditCollectionJson = new CreditCollectionJson(accountId, ImmutableList.<CreditJson>of(creditJson));
+ Assert.assertEquals(creditCollectionJson.getAccountId(), accountId);
+ Assert.assertEquals(creditCollectionJson.getCredits().size(), 1);
+ Assert.assertEquals(creditCollectionJson.getCredits().get(0), creditJson);
+
+ final String asJson = mapper.writeValueAsString(creditCollectionJson);
+ Assert.assertEquals(asJson, "{\"accountId\":\"" + accountId.toString() + "\"," +
+ "\"credits\":[{\"creditAmount\":" + creditJson.getCreditAmount() + "," +
+ "\"invoiceId\":\"" + creditJson.getInvoiceId().toString() + "\"," +
+ "\"invoiceNumber\":\"" + creditJson.getInvoiceNumber() + "\"," +
+ "\"requestedDate\":\"" + creditJson.getRequestedDate() + "\"," +
+ "\"effectiveDate\":\"" + creditJson.getEffectiveDate() + "\"," +
+ "\"reason\":\"" + creditJson.getReason() + "\"}]}");
+
+ final CreditCollectionJson fromJson = mapper.readValue(asJson, CreditCollectionJson.class);
+ Assert.assertEquals(fromJson, creditCollectionJson);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.java
new file mode 100644
index 0000000..a182d2d
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCreditJson.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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+
+public class TestCreditJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final BigDecimal creditAmount = BigDecimal.TEN;
+ final UUID invoiceId = UUID.randomUUID();
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final DateTime requestedDate = new DateTime(DateTimeZone.UTC);
+ final DateTime effectiveDate = new DateTime(DateTimeZone.UTC);
+ final String reason = UUID.randomUUID().toString();
+ final CreditJson creditJson = new CreditJson(creditAmount, invoiceId, invoiceNumber, requestedDate, effectiveDate, reason);
+ Assert.assertEquals(creditJson.getRequestedDate(), requestedDate);
+ Assert.assertEquals(creditJson.getEffectiveDate(), effectiveDate);
+ Assert.assertEquals(creditJson.getCreditAmount(), creditAmount);
+ Assert.assertEquals(creditJson.getInvoiceId(), invoiceId);
+ Assert.assertEquals(creditJson.getInvoiceNumber(), invoiceNumber);
+ Assert.assertEquals(creditJson.getReason(), reason);
+
+ final String asJson = mapper.writeValueAsString(creditJson);
+ Assert.assertEquals(asJson, "{\"creditAmount\":" + creditJson.getCreditAmount() + "," +
+ "\"invoiceId\":\"" + creditJson.getInvoiceId().toString() + "\"," +
+ "\"invoiceNumber\":\"" + creditJson.getInvoiceNumber() + "\"," +
+ "\"requestedDate\":\"" + creditJson.getRequestedDate() + "\"," +
+ "\"effectiveDate\":\"" + creditJson.getEffectiveDate() + "\"," +
+ "\"reason\":\"" + creditJson.getReason() + "\"}");
+
+ final CreditJson fromJson = mapper.readValue(asJson, CreditJson.class);
+ Assert.assertEquals(fromJson, creditJson);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCustomFieldJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCustomFieldJson.java
new file mode 100644
index 0000000..ab7af78
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestCustomFieldJson.java
@@ -0,0 +1,44 @@
+/*
+ * 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.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class TestCustomFieldJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String name = UUID.randomUUID().toString();
+ final String value = UUID.randomUUID().toString();
+ final CustomFieldJson customFieldJson = new CustomFieldJson(name, value);
+ Assert.assertEquals(customFieldJson.getName(), name);
+ Assert.assertEquals(customFieldJson.getValue(), value);
+
+ final String asJson = mapper.writeValueAsString(customFieldJson);
+ Assert.assertEquals(asJson, "{\"name\":\"" + customFieldJson.getName() + "\"," +
+ "\"value\":\"" + customFieldJson.getValue() + "\"}");
+
+ final CustomFieldJson fromJson = mapper.readValue(asJson, CustomFieldJson.class);
+ Assert.assertEquals(fromJson, customFieldJson);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java
new file mode 100644
index 0000000..ec9fc54
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java
@@ -0,0 +1,115 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.InvoiceItem;
+
+public class TestInvoiceItemJsonSimple {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
+ final String planName = UUID.randomUUID().toString();
+ final String phaseName = UUID.randomUUID().toString();
+ final String description = UUID.randomUUID().toString();
+ final DateTime startDate = new DateTime(DateTimeZone.UTC);
+ final DateTime endDate = new DateTime(DateTimeZone.UTC);
+ final BigDecimal amount = BigDecimal.TEN;
+ final Currency currency = Currency.MXN;
+ final InvoiceItemJsonSimple invoiceItemJsonSimple = new InvoiceItemJsonSimple(invoiceId, accountId, bundleId, subscriptionId,
+ planName, phaseName, description, startDate, endDate,
+ amount, currency);
+ Assert.assertEquals(invoiceItemJsonSimple.getInvoiceId(), invoiceId);
+ Assert.assertEquals(invoiceItemJsonSimple.getAccountId(), accountId);
+ Assert.assertEquals(invoiceItemJsonSimple.getBundleId(), bundleId);
+ Assert.assertEquals(invoiceItemJsonSimple.getSubscriptionId(), subscriptionId);
+ Assert.assertEquals(invoiceItemJsonSimple.getPlanName(), planName);
+ Assert.assertEquals(invoiceItemJsonSimple.getPhaseName(), phaseName);
+ Assert.assertEquals(invoiceItemJsonSimple.getDescription(), description);
+ Assert.assertEquals(invoiceItemJsonSimple.getStartDate(), startDate);
+ Assert.assertEquals(invoiceItemJsonSimple.getEndDate(), endDate);
+ Assert.assertEquals(invoiceItemJsonSimple.getAmount(), amount);
+ Assert.assertEquals(invoiceItemJsonSimple.getCurrency(), currency);
+
+ final String asJson = mapper.writeValueAsString(invoiceItemJsonSimple);
+ Assert.assertEquals(asJson, "{\"invoiceId\":\"" + invoiceItemJsonSimple.getInvoiceId().toString() + "\"," +
+ "\"accountId\":\"" + invoiceItemJsonSimple.getAccountId().toString() + "\"," +
+ "\"bundleId\":\"" + invoiceItemJsonSimple.getBundleId().toString() + "\"," +
+ "\"subscriptionId\":\"" + invoiceItemJsonSimple.getSubscriptionId().toString() + "\"," +
+ "\"planName\":\"" + invoiceItemJsonSimple.getPlanName() + "\"," +
+ "\"phaseName\":\"" + invoiceItemJsonSimple.getPhaseName() + "\"," +
+ "\"description\":\"" + invoiceItemJsonSimple.getDescription() + "\"," +
+ "\"startDate\":\"" + invoiceItemJsonSimple.getStartDate().toDateTimeISO().toString() + "\"," +
+ "\"endDate\":\"" + invoiceItemJsonSimple.getEndDate().toDateTimeISO().toString() + "\"," +
+ "\"amount\":" + invoiceItemJsonSimple.getAmount().toString() + "," +
+ "\"currency\":\"" + invoiceItemJsonSimple.getCurrency().toString() + "\"}");
+
+ final InvoiceItemJsonSimple fromJson = mapper.readValue(asJson, InvoiceItemJsonSimple.class);
+ Assert.assertEquals(fromJson, invoiceItemJsonSimple);
+ }
+
+ @Test(groups = "fast")
+ public void testFromInvoiceItem() throws Exception {
+ final InvoiceItem invoiceItem = Mockito.mock(InvoiceItem.class);
+ Mockito.when(invoiceItem.getInvoiceId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getAccountId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getBundleId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getSubscriptionId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getPlanName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(invoiceItem.getPhaseName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(invoiceItem.getDescription()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(invoiceItem.getStartDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoiceItem.getEndDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoiceItem.getAmount()).thenReturn(BigDecimal.TEN);
+ Mockito.when(invoiceItem.getCurrency()).thenReturn(Currency.EUR);
+
+ final InvoiceItemJsonSimple invoiceItemJsonSimple = new InvoiceItemJsonSimple(invoiceItem);
+ Assert.assertEquals(invoiceItemJsonSimple.getInvoiceId(), invoiceItem.getInvoiceId());
+ Assert.assertEquals(invoiceItemJsonSimple.getAccountId(), invoiceItem.getAccountId());
+ Assert.assertEquals(invoiceItemJsonSimple.getBundleId(), invoiceItem.getBundleId());
+ Assert.assertEquals(invoiceItemJsonSimple.getSubscriptionId(), invoiceItem.getSubscriptionId());
+ Assert.assertEquals(invoiceItemJsonSimple.getPlanName(), invoiceItem.getPlanName());
+ Assert.assertEquals(invoiceItemJsonSimple.getPhaseName(), invoiceItem.getPhaseName());
+ Assert.assertEquals(invoiceItemJsonSimple.getDescription(), invoiceItem.getDescription());
+ Assert.assertEquals(invoiceItemJsonSimple.getStartDate(), invoiceItem.getStartDate());
+ Assert.assertEquals(invoiceItemJsonSimple.getEndDate(), invoiceItem.getEndDate());
+ Assert.assertEquals(invoiceItemJsonSimple.getAmount(), invoiceItem.getAmount());
+ Assert.assertEquals(invoiceItemJsonSimple.getCurrency(), invoiceItem.getCurrency());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonSimple.java
new file mode 100644
index 0000000..64f0ac0
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonSimple.java
@@ -0,0 +1,98 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.ning.billing.invoice.api.Invoice;
+
+public class TestInvoiceJsonSimple {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final BigDecimal amount = BigDecimal.TEN;
+ final BigDecimal credit = BigDecimal.ONE;
+ final String invoiceId = UUID.randomUUID().toString();
+ final DateTime invoiceDate = new DateTime(DateTimeZone.UTC);
+ final DateTime targetDate = new DateTime(DateTimeZone.UTC);
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final BigDecimal balance = BigDecimal.ZERO;
+ final String accountId = UUID.randomUUID().toString();
+ final InvoiceJsonSimple invoiceJsonSimple = new InvoiceJsonSimple(amount, credit, invoiceId, invoiceDate,
+ targetDate, invoiceNumber, balance, accountId);
+ Assert.assertEquals(invoiceJsonSimple.getAmount(), amount);
+ Assert.assertEquals(invoiceJsonSimple.getCredit(), credit);
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceId(), invoiceId);
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceDate(), invoiceDate);
+ Assert.assertEquals(invoiceJsonSimple.getTargetDate(), targetDate);
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceNumber(), invoiceNumber);
+ Assert.assertEquals(invoiceJsonSimple.getBalance(), balance);
+ Assert.assertEquals(invoiceJsonSimple.getAccountId(), accountId);
+
+ final String asJson = mapper.writeValueAsString(invoiceJsonSimple);
+ Assert.assertEquals(asJson, "{\"amount\":" + invoiceJsonSimple.getAmount().toString() + "," +
+ "\"credit\":" + invoiceJsonSimple.getCredit().toString() + "," +
+ "\"invoiceId\":\"" + invoiceJsonSimple.getInvoiceId() + "\"," +
+ "\"invoiceDate\":\"" + invoiceJsonSimple.getInvoiceDate().toDateTimeISO().toString() + "\"," +
+ "\"targetDate\":\"" + invoiceJsonSimple.getTargetDate().toDateTimeISO().toString() + "\"," +
+ "\"invoiceNumber\":\"" + invoiceJsonSimple.getInvoiceNumber() + "\"," +
+ "\"balance\":" + invoiceJsonSimple.getBalance().toString() + "," +
+ "\"accountId\":\"" + invoiceJsonSimple.getAccountId() + "\"}");
+
+ final InvoiceJsonSimple fromJson = mapper.readValue(asJson, InvoiceJsonSimple.class);
+ Assert.assertEquals(fromJson, invoiceJsonSimple);
+ }
+
+ @Test(groups = "fast")
+ public void testFromInvoice() throws Exception {
+ final Invoice invoice = Mockito.mock(Invoice.class);
+ Mockito.when(invoice.getAmountCharged()).thenReturn(BigDecimal.TEN);
+ Mockito.when(invoice.getAmountCredited()).thenReturn(BigDecimal.ONE);
+ Mockito.when(invoice.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoice.getInvoiceDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoice.getTargetDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoice.getInvoiceNumber()).thenReturn(Integer.MAX_VALUE);
+ Mockito.when(invoice.getBalance()).thenReturn(BigDecimal.ZERO);
+ Mockito.when(invoice.getAccountId()).thenReturn(UUID.randomUUID());
+
+ final InvoiceJsonSimple invoiceJsonSimple = new InvoiceJsonSimple(invoice);
+ Assert.assertEquals(invoiceJsonSimple.getAmount(), invoice.getAmountCharged());
+ Assert.assertEquals(invoiceJsonSimple.getCredit(), invoice.getAmountCredited());
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceId(), invoice.getId().toString());
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceDate(), invoice.getInvoiceDate());
+ Assert.assertEquals(invoiceJsonSimple.getTargetDate(), invoice.getTargetDate());
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceNumber(), String.valueOf(invoice.getInvoiceNumber()));
+ Assert.assertEquals(invoiceJsonSimple.getBalance(), invoice.getBalance());
+ Assert.assertEquals(invoiceJsonSimple.getAccountId(), invoice.getAccountId().toString());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
new file mode 100644
index 0000000..8603492
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithBundleKeys.java
@@ -0,0 +1,104 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.ning.billing.invoice.api.Invoice;
+
+public class TestInvoiceJsonWithBundleKeys {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final BigDecimal amount = BigDecimal.TEN;
+ final BigDecimal credit = BigDecimal.ONE;
+ final String invoiceId = UUID.randomUUID().toString();
+ final DateTime invoiceDate = new DateTime(DateTimeZone.UTC);
+ final DateTime targetDate = new DateTime(DateTimeZone.UTC);
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final BigDecimal balance = BigDecimal.ZERO;
+ final String accountId = UUID.randomUUID().toString();
+ final String bundleKeys = UUID.randomUUID().toString();
+ final InvoiceJsonWithBundleKeys invoiceJsonSimple = new InvoiceJsonWithBundleKeys(amount, credit, invoiceId, invoiceDate,
+ targetDate, invoiceNumber, balance, accountId, bundleKeys);
+ Assert.assertEquals(invoiceJsonSimple.getAmount(), amount);
+ Assert.assertEquals(invoiceJsonSimple.getCredit(), credit);
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceId(), invoiceId);
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceDate(), invoiceDate);
+ Assert.assertEquals(invoiceJsonSimple.getTargetDate(), targetDate);
+ Assert.assertEquals(invoiceJsonSimple.getInvoiceNumber(), invoiceNumber);
+ Assert.assertEquals(invoiceJsonSimple.getBalance(), balance);
+ Assert.assertEquals(invoiceJsonSimple.getAccountId(), accountId);
+ Assert.assertEquals(invoiceJsonSimple.getBundleKeys(), bundleKeys);
+
+ final String asJson = mapper.writeValueAsString(invoiceJsonSimple);
+ Assert.assertEquals(asJson, "{\"amount\":" + invoiceJsonSimple.getAmount().toString() + "," +
+ "\"credit\":" + invoiceJsonSimple.getCredit().toString() + "," +
+ "\"invoiceId\":\"" + invoiceJsonSimple.getInvoiceId() + "\"," +
+ "\"invoiceDate\":\"" + invoiceJsonSimple.getInvoiceDate().toDateTimeISO().toString() + "\"," +
+ "\"targetDate\":\"" + invoiceJsonSimple.getTargetDate().toDateTimeISO().toString() + "\"," +
+ "\"invoiceNumber\":\"" + invoiceJsonSimple.getInvoiceNumber() + "\"," +
+ "\"balance\":" + invoiceJsonSimple.getBalance().toString() + "," +
+ "\"accountId\":\"" + invoiceJsonSimple.getAccountId() + "\"," +
+ "\"bundleKeys\":\"" + invoiceJsonSimple.getBundleKeys() + "\"}");
+
+ final InvoiceJsonWithBundleKeys fromJson = mapper.readValue(asJson, InvoiceJsonWithBundleKeys.class);
+ Assert.assertEquals(fromJson, invoiceJsonSimple);
+ }
+
+ @Test(groups = "fast")
+ public void testFromInvoice() throws Exception {
+ final Invoice invoice = Mockito.mock(Invoice.class);
+ Mockito.when(invoice.getAmountCharged()).thenReturn(BigDecimal.TEN);
+ Mockito.when(invoice.getAmountCredited()).thenReturn(BigDecimal.ONE);
+ Mockito.when(invoice.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoice.getInvoiceDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoice.getTargetDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoice.getInvoiceNumber()).thenReturn(Integer.MAX_VALUE);
+ Mockito.when(invoice.getBalance()).thenReturn(BigDecimal.ZERO);
+ Mockito.when(invoice.getAccountId()).thenReturn(UUID.randomUUID());
+
+ final String bundleKeys = UUID.randomUUID().toString();
+
+ final InvoiceJsonWithBundleKeys invoiceJsonWithBundleKeys = new InvoiceJsonWithBundleKeys(invoice, bundleKeys);
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getAmount(), invoice.getAmountCharged());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getCredit(), invoice.getAmountCredited());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getInvoiceId(), invoice.getId().toString());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getInvoiceDate(), invoice.getInvoiceDate());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getTargetDate(), invoice.getTargetDate());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getInvoiceNumber(), String.valueOf(invoice.getInvoiceNumber()));
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getBalance(), invoice.getBalance());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getAccountId(), invoice.getAccountId().toString());
+ Assert.assertEquals(invoiceJsonWithBundleKeys.getBundleKeys(), bundleKeys);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java
new file mode 100644
index 0000000..c7bd606
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java
@@ -0,0 +1,165 @@
+/*
+ * 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 java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceItem;
+
+public class TestInvoiceJsonWithItems {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final BigDecimal amount = BigDecimal.TEN;
+ final BigDecimal credit = BigDecimal.ONE;
+ final String invoiceId = UUID.randomUUID().toString();
+ final DateTime invoiceDate = new DateTime(DateTimeZone.UTC);
+ final DateTime targetDate = new DateTime(DateTimeZone.UTC);
+ final String invoiceNumber = UUID.randomUUID().toString();
+ final BigDecimal balance = BigDecimal.ZERO;
+ final String accountId = UUID.randomUUID().toString();
+ final InvoiceItemJsonSimple invoiceItemJsonSimple = createInvoiceItemJson();
+ final InvoiceJsonWithItems invoiceJsonWithItems = new InvoiceJsonWithItems(amount, credit, invoiceId, invoiceDate,
+ targetDate, invoiceNumber, balance, accountId,
+ ImmutableList.<InvoiceItemJsonSimple>of(invoiceItemJsonSimple));
+ Assert.assertEquals(invoiceJsonWithItems.getAmount(), amount);
+ Assert.assertEquals(invoiceJsonWithItems.getCredit(), credit);
+ Assert.assertEquals(invoiceJsonWithItems.getInvoiceId(), invoiceId);
+ Assert.assertEquals(invoiceJsonWithItems.getInvoiceDate(), invoiceDate);
+ Assert.assertEquals(invoiceJsonWithItems.getTargetDate(), targetDate);
+ Assert.assertEquals(invoiceJsonWithItems.getInvoiceNumber(), invoiceNumber);
+ Assert.assertEquals(invoiceJsonWithItems.getBalance(), balance);
+ Assert.assertEquals(invoiceJsonWithItems.getAccountId(), accountId);
+ Assert.assertEquals(invoiceJsonWithItems.getItems().size(), 1);
+ Assert.assertEquals(invoiceJsonWithItems.getItems().get(0), invoiceItemJsonSimple);
+
+ final String asJson = mapper.writeValueAsString(invoiceJsonWithItems);
+ Assert.assertEquals(asJson, "{\"amount\":" + invoiceJsonWithItems.getAmount().toString() + "," +
+ "\"credit\":" + invoiceJsonWithItems.getCredit().toString() + "," +
+ "\"invoiceId\":\"" + invoiceJsonWithItems.getInvoiceId() + "\"," +
+ "\"invoiceDate\":\"" + invoiceJsonWithItems.getInvoiceDate().toDateTimeISO().toString() + "\"," +
+ "\"targetDate\":\"" + invoiceJsonWithItems.getTargetDate().toDateTimeISO().toString() + "\"," +
+ "\"invoiceNumber\":\"" + invoiceJsonWithItems.getInvoiceNumber() + "\"," +
+ "\"balance\":" + invoiceJsonWithItems.getBalance().toString() + "," +
+ "\"accountId\":\"" + invoiceJsonWithItems.getAccountId() + "\"," +
+ "\"items\":[{\"invoiceId\":\"" + invoiceItemJsonSimple.getInvoiceId().toString() + "\"," +
+ "\"accountId\":\"" + invoiceItemJsonSimple.getAccountId().toString() + "\"," +
+ "\"bundleId\":\"" + invoiceItemJsonSimple.getBundleId().toString() + "\"," +
+ "\"subscriptionId\":\"" + invoiceItemJsonSimple.getSubscriptionId().toString() + "\"," +
+ "\"planName\":\"" + invoiceItemJsonSimple.getPlanName() + "\"," +
+ "\"phaseName\":\"" + invoiceItemJsonSimple.getPhaseName() + "\"," +
+ "\"description\":\"" + invoiceItemJsonSimple.getDescription() + "\"," +
+ "\"startDate\":\"" + invoiceItemJsonSimple.getStartDate().toDateTimeISO().toString() + "\"," +
+ "\"endDate\":\"" + invoiceItemJsonSimple.getEndDate().toDateTimeISO().toString() + "\"," +
+ "\"amount\":" + invoiceItemJsonSimple.getAmount().toString() + "," +
+ "\"currency\":\"" + invoiceItemJsonSimple.getCurrency().toString() + "\"}]}");
+
+ final InvoiceJsonWithItems fromJson = mapper.readValue(asJson, InvoiceJsonWithItems.class);
+ Assert.assertEquals(fromJson, invoiceJsonWithItems);
+ }
+
+ @Test(groups = "fast")
+ public void testFromInvoice() throws Exception {
+ final Invoice invoice = Mockito.mock(Invoice.class);
+ Mockito.when(invoice.getAmountCharged()).thenReturn(BigDecimal.TEN);
+ Mockito.when(invoice.getAmountCredited()).thenReturn(BigDecimal.ONE);
+ Mockito.when(invoice.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoice.getInvoiceDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoice.getTargetDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoice.getInvoiceNumber()).thenReturn(Integer.MAX_VALUE);
+ Mockito.when(invoice.getBalance()).thenReturn(BigDecimal.ZERO);
+ Mockito.when(invoice.getAccountId()).thenReturn(UUID.randomUUID());
+ final InvoiceItem invoiceItem = createInvoiceItem();
+ Mockito.when(invoice.getInvoiceItems()).thenReturn(ImmutableList.<InvoiceItem>of(invoiceItem));
+
+ final InvoiceJsonWithItems invoiceJsonWithItems = new InvoiceJsonWithItems(invoice);
+ Assert.assertEquals(invoiceJsonWithItems.getAmount(), invoice.getAmountCharged());
+ Assert.assertEquals(invoiceJsonWithItems.getCredit(), invoice.getAmountCredited());
+ Assert.assertEquals(invoiceJsonWithItems.getInvoiceId(), invoice.getId().toString());
+ Assert.assertEquals(invoiceJsonWithItems.getInvoiceDate(), invoice.getInvoiceDate());
+ Assert.assertEquals(invoiceJsonWithItems.getTargetDate(), invoice.getTargetDate());
+ Assert.assertEquals(invoiceJsonWithItems.getInvoiceNumber(), String.valueOf(invoice.getInvoiceNumber()));
+ Assert.assertEquals(invoiceJsonWithItems.getBalance(), invoice.getBalance());
+ Assert.assertEquals(invoiceJsonWithItems.getAccountId(), invoice.getAccountId().toString());
+ Assert.assertEquals(invoiceJsonWithItems.getItems().size(), 1);
+ final InvoiceItemJsonSimple invoiceItemJsonSimple = invoiceJsonWithItems.getItems().get(0);
+ Assert.assertEquals(invoiceItemJsonSimple.getInvoiceId(), invoiceItem.getInvoiceId());
+ Assert.assertEquals(invoiceItemJsonSimple.getAccountId(), invoiceItem.getAccountId());
+ Assert.assertEquals(invoiceItemJsonSimple.getBundleId(), invoiceItem.getBundleId());
+ Assert.assertEquals(invoiceItemJsonSimple.getSubscriptionId(), invoiceItem.getSubscriptionId());
+ Assert.assertEquals(invoiceItemJsonSimple.getPlanName(), invoiceItem.getPlanName());
+ Assert.assertEquals(invoiceItemJsonSimple.getPhaseName(), invoiceItem.getPhaseName());
+ Assert.assertEquals(invoiceItemJsonSimple.getDescription(), invoiceItem.getDescription());
+ Assert.assertEquals(invoiceItemJsonSimple.getStartDate(), invoiceItem.getStartDate());
+ Assert.assertEquals(invoiceItemJsonSimple.getEndDate(), invoiceItem.getEndDate());
+ Assert.assertEquals(invoiceItemJsonSimple.getAmount(), invoiceItem.getAmount());
+ Assert.assertEquals(invoiceItemJsonSimple.getCurrency(), invoiceItem.getCurrency());
+ }
+
+ private InvoiceItemJsonSimple createInvoiceItemJson() {
+ final UUID invoiceId = UUID.randomUUID();
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final UUID subscriptionId = UUID.randomUUID();
+ final String planName = UUID.randomUUID().toString();
+ final String phaseName = UUID.randomUUID().toString();
+ final String description = UUID.randomUUID().toString();
+ final DateTime startDate = new DateTime(DateTimeZone.UTC);
+ final DateTime endDate = new DateTime(DateTimeZone.UTC);
+ final BigDecimal amount = BigDecimal.TEN;
+ final Currency currency = Currency.MXN;
+ return new InvoiceItemJsonSimple(invoiceId, accountId, bundleId, subscriptionId,
+ planName, phaseName, description, startDate, endDate,
+ amount, currency);
+ }
+
+ private InvoiceItem createInvoiceItem() {
+ final InvoiceItem invoiceItem = Mockito.mock(InvoiceItem.class);
+ Mockito.when(invoiceItem.getInvoiceId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getAccountId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getBundleId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getSubscriptionId()).thenReturn(UUID.randomUUID());
+ Mockito.when(invoiceItem.getPlanName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(invoiceItem.getPhaseName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(invoiceItem.getDescription()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(invoiceItem.getStartDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoiceItem.getEndDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(invoiceItem.getAmount()).thenReturn(BigDecimal.TEN);
+ Mockito.when(invoiceItem.getCurrency()).thenReturn(Currency.EUR);
+
+ return invoiceItem;
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestPlanDetailJason.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestPlanDetailJason.java
new file mode 100644
index 0000000..ee7ba0d
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestPlanDetailJason.java
@@ -0,0 +1,90 @@
+/*
+ * 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.util.UUID;
+
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.InternationalPrice;
+import com.ning.billing.catalog.api.Listing;
+import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
+import com.ning.billing.catalog.api.Product;
+
+public class TestPlanDetailJason {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String productName = UUID.randomUUID().toString();
+ final String planName = UUID.randomUUID().toString();
+ final BillingPeriod billingPeriod = BillingPeriod.ANNUAL;
+ final String priceListName = UUID.randomUUID().toString();
+ final PlanDetailJason planDetailJason = new PlanDetailJason(productName, planName, billingPeriod, priceListName, null);
+ Assert.assertEquals(planDetailJason.getProductName(), productName);
+ Assert.assertEquals(planDetailJason.getPlanName(), planName);
+ Assert.assertEquals(planDetailJason.getBillingPeriod(), billingPeriod);
+ Assert.assertEquals(planDetailJason.getPriceListName(), priceListName);
+ Assert.assertEquals(planDetailJason.getFinalPhasePrice(), null);
+
+ final String asJson = mapper.writeValueAsString(planDetailJason);
+ Assert.assertEquals(asJson, "{\"productName\":\"" + planDetailJason.getProductName() + "\"," +
+ "\"planName\":\"" + planDetailJason.getPlanName() + "\"," +
+ "\"billingPeriod\":\"" + planDetailJason.getBillingPeriod().toString() + "\"," +
+ "\"priceListName\":\"" + planDetailJason.getPriceListName() + "\"," +
+ "\"finalPhasePrice\":null}");
+
+ final PlanDetailJason fromJson = mapper.readValue(asJson, PlanDetailJason.class);
+ Assert.assertEquals(fromJson, planDetailJason);
+ }
+
+ @Test(groups = "fast")
+ public void testFromListing() throws Exception {
+ final Product product = Mockito.mock(Product.class);
+ Mockito.when(product.getName()).thenReturn(UUID.randomUUID().toString());
+
+ final InternationalPrice price = Mockito.mock(InternationalPrice.class);
+ final PlanPhase planPhase = Mockito.mock(PlanPhase.class);
+ Mockito.when(planPhase.getRecurringPrice()).thenReturn(price);
+
+ final Plan plan = Mockito.mock(Plan.class);
+ Mockito.when(plan.getProduct()).thenReturn(product);
+ Mockito.when(plan.getName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(plan.getBillingPeriod()).thenReturn(BillingPeriod.QUARTERLY);
+ Mockito.when(plan.getFinalPhase()).thenReturn(planPhase);
+
+ final PriceList priceList = Mockito.mock(PriceList.class);
+ Mockito.when(priceList.getName()).thenReturn(UUID.randomUUID().toString());
+
+ final Listing listing = Mockito.mock(Listing.class);
+ Mockito.when(listing.getPlan()).thenReturn(plan);
+ Mockito.when(listing.getPriceList()).thenReturn(priceList);
+
+ final PlanDetailJason planDetailJason = new PlanDetailJason(listing);
+ Assert.assertEquals(planDetailJason.getProductName(), plan.getProduct().getName());
+ Assert.assertEquals(planDetailJason.getPlanName(), plan.getName());
+ Assert.assertEquals(planDetailJason.getBillingPeriod(), plan.getBillingPeriod());
+ Assert.assertEquals(planDetailJason.getPriceListName(), priceList.getName());
+ Assert.assertEquals(planDetailJason.getFinalPhasePrice(), plan.getFinalPhase().getRecurringPrice());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java
new file mode 100644
index 0000000..42d0794
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java
@@ -0,0 +1,118 @@
+/*
+ * 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.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.InternationalPrice;
+import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
+import com.ning.billing.catalog.api.Product;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.user.Subscription;
+
+public class TestSubscriptionJsonNoEvents {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String subscriptionId = UUID.randomUUID().toString();
+ final String bundleId = UUID.randomUUID().toString();
+ final DateTime startDate = new DateTime(DateTimeZone.UTC);
+ final String productName = UUID.randomUUID().toString();
+ final String productCategory = UUID.randomUUID().toString();
+ final String billingPeriod = UUID.randomUUID().toString();
+ final String priceList = UUID.randomUUID().toString();
+ final DateTime chargedThroughDate = new DateTime(DateTimeZone.UTC);
+ final SubscriptionJsonNoEvents subscriptionJsonNoEvents = new SubscriptionJsonNoEvents(subscriptionId, bundleId, startDate,
+ productName, productCategory, billingPeriod,
+ priceList, chargedThroughDate);
+ Assert.assertEquals(subscriptionJsonNoEvents.getSubscriptionId(), subscriptionId);
+ Assert.assertEquals(subscriptionJsonNoEvents.getBundleId(), bundleId);
+ Assert.assertEquals(subscriptionJsonNoEvents.getStartDate(), startDate);
+ Assert.assertEquals(subscriptionJsonNoEvents.getProductName(), productName);
+ Assert.assertEquals(subscriptionJsonNoEvents.getProductCategory(), productCategory);
+ Assert.assertEquals(subscriptionJsonNoEvents.getBillingPeriod(), billingPeriod);
+ Assert.assertEquals(subscriptionJsonNoEvents.getPriceList(), priceList);
+ Assert.assertEquals(subscriptionJsonNoEvents.getChargedThroughDate(), chargedThroughDate);
+
+ final String asJson = mapper.writeValueAsString(subscriptionJsonNoEvents);
+ Assert.assertEquals(asJson, "{\"subscriptionId\":\"" + subscriptionJsonNoEvents.getSubscriptionId() + "\"," +
+ "\"bundleId\":\"" + subscriptionJsonNoEvents.getBundleId() + "\"," +
+ "\"startDate\":\"" + subscriptionJsonNoEvents.getStartDate().toDateTimeISO().toString() + "\"," +
+ "\"productName\":\"" + subscriptionJsonNoEvents.getProductName() + "\"," +
+ "\"productCategory\":\"" + subscriptionJsonNoEvents.getProductCategory() + "\"," +
+ "\"billingPeriod\":\"" + subscriptionJsonNoEvents.getBillingPeriod() + "\"," +
+ "\"priceList\":\"" + subscriptionJsonNoEvents.getPriceList() + "\"," +
+ "\"chargedThroughDate\":\"" + subscriptionJsonNoEvents.getChargedThroughDate().toDateTimeISO().toString() + "\"}");
+
+ final SubscriptionJsonNoEvents fromJson = mapper.readValue(asJson, SubscriptionJsonNoEvents.class);
+ Assert.assertEquals(fromJson, subscriptionJsonNoEvents);
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscriptionSubscription() throws Exception {
+ final Product product = Mockito.mock(Product.class);
+ Mockito.when(product.getName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(product.getCategory()).thenReturn(ProductCategory.STANDALONE);
+
+ final InternationalPrice price = Mockito.mock(InternationalPrice.class);
+ final PlanPhase planPhase = Mockito.mock(PlanPhase.class);
+ Mockito.when(planPhase.getRecurringPrice()).thenReturn(price);
+
+ final Plan plan = Mockito.mock(Plan.class);
+ Mockito.when(plan.getProduct()).thenReturn(product);
+ Mockito.when(plan.getName()).thenReturn(UUID.randomUUID().toString());
+ Mockito.when(plan.getBillingPeriod()).thenReturn(BillingPeriod.QUARTERLY);
+ Mockito.when(plan.getFinalPhase()).thenReturn(planPhase);
+
+ final PriceList priceList = Mockito.mock(PriceList.class);
+
+ final Subscription subscription = Mockito.mock(Subscription.class);
+ Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscription.getBundleId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscription.getStartDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+ Mockito.when(subscription.getCurrentPlan()).thenReturn(plan);
+ Mockito.when(subscription.getCurrentPriceList()).thenReturn(priceList);
+ Mockito.when(subscription.getChargedThroughDate()).thenReturn(new DateTime(DateTimeZone.UTC));
+
+ final SubscriptionJsonNoEvents subscriptionJsonNoEvents = new SubscriptionJsonNoEvents(subscription);
+ Assert.assertEquals(subscriptionJsonNoEvents.getSubscriptionId(), subscription.getId().toString());
+ Assert.assertEquals(subscriptionJsonNoEvents.getStartDate(), subscription.getStartDate());
+ Assert.assertEquals(subscriptionJsonNoEvents.getBundleId(), subscription.getBundleId().toString());
+ Assert.assertEquals(subscriptionJsonNoEvents.getProductName(), subscription.getCurrentPlan().getProduct().getName());
+ Assert.assertEquals(subscriptionJsonNoEvents.getProductCategory(), subscription.getCurrentPlan().getProduct().getCategory().toString());
+ Assert.assertEquals(subscriptionJsonNoEvents.getBillingPeriod(), subscription.getCurrentPlan().getBillingPeriod().toString());
+ Assert.assertEquals(subscriptionJsonNoEvents.getChargedThroughDate(), subscription.getChargedThroughDate());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonSimple.java
new file mode 100644
index 0000000..de6523d
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonSimple.java
@@ -0,0 +1,41 @@
+/*
+ * 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.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class TestSubscriptionJsonSimple {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String subscriptionId = UUID.randomUUID().toString();
+ final SubscriptionJsonSimple subscriptionJsonSimple = new SubscriptionJsonSimple(subscriptionId);
+ Assert.assertEquals(subscriptionJsonSimple.getSubscriptionId(), subscriptionId);
+
+ final String asJson = mapper.writeValueAsString(subscriptionJsonSimple);
+ Assert.assertEquals(asJson, "{\"subscriptionId\":\"" + subscriptionJsonSimple.getSubscriptionId() + "\"}");
+
+ final SubscriptionJsonSimple fromJson = mapper.readValue(asJson, SubscriptionJsonSimple.class);
+ Assert.assertEquals(fromJson, subscriptionJsonSimple);
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonWithEvents.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonWithEvents.java
new file mode 100644
index 0000000..874f6bb
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonWithEvents.java
@@ -0,0 +1,142 @@
+/*
+ * 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.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.PhaseType;
+import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.util.clock.DefaultClock;
+
+public class TestSubscriptionJsonWithEvents {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String subscriptionId = UUID.randomUUID().toString();
+ final DateTime requestedDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson newEvent = new SubscriptionJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
+ BillingPeriod.NO_BILLING_PERIOD.toString(),
+ requestedDate,
+ effectiveDate,
+ UUID.randomUUID().toString(),
+ UUID.randomUUID().toString(),
+ SubscriptionTransitionType.CREATE.toString(),
+ PhaseType.DISCOUNT.toString());
+ final SubscriptionJsonWithEvents subscriptionJsonWithEvents = new SubscriptionJsonWithEvents(subscriptionId,
+ ImmutableList.<SubscriptionJsonWithEvents.SubscriptionReadEventJson>of(newEvent),
+ null,
+ null);
+
+
+ final String asJson = mapper.writeValueAsString(subscriptionJsonWithEvents);
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson event = subscriptionJsonWithEvents.getEvents().get(0);
+ Assert.assertEquals(asJson, "{\"events\":[{\"eventId\":\"" + event.getEventId() + "\"," +
+ "\"billingPeriod\":\"" + event.getBillingPeriod() + "\"," +
+ "\"product\":\"" + event.getProduct() + "\"," +
+ "\"priceList\":\"" + event.getPriceList() + "\"," +
+ "\"eventType\":\"" + event.getEventType() + "\"," +
+ "\"phase\":\"" + event.getPhase() + "\"," +
+ "\"requestedDate\":\"" + event.getRequestedDate() + "\"," +
+ "\"effectiveDate\":\"" + event.getEffectiveDate() + "\"}]," +
+ "\"subscriptionId\":\"" + subscriptionJsonWithEvents.getSubscriptionId() + "\"," +
+ "\"deletedEvents\":null," +
+ "\"newEvents\":null}");
+
+ final SubscriptionJsonWithEvents fromJson = mapper.readValue(asJson, SubscriptionJsonWithEvents.class);
+ Assert.assertEquals(fromJson, subscriptionJsonWithEvents);
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscription() throws Exception {
+ final DateTime requestedDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson newEvent = new SubscriptionJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
+ BillingPeriod.NO_BILLING_PERIOD.toString(),
+ requestedDate,
+ effectiveDate,
+ UUID.randomUUID().toString(),
+ UUID.randomUUID().toString(),
+ SubscriptionTransitionType.CREATE.toString(),
+ PhaseType.DISCOUNT.toString());
+
+ final Subscription subscription = Mockito.mock(Subscription.class);
+ Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
+
+ final SubscriptionJsonWithEvents subscriptionJsonWithEvents = new SubscriptionJsonWithEvents(subscription,
+ ImmutableList.<SubscriptionJsonWithEvents.SubscriptionReadEventJson>of(newEvent),
+ null,
+ null);
+ Assert.assertEquals(subscriptionJsonWithEvents.getSubscriptionId(), subscription.getId().toString());
+ Assert.assertNull(subscriptionJsonWithEvents.getNewEvents());
+ Assert.assertNull(subscriptionJsonWithEvents.getDeletedEvents());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().size(), 1);
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEffectiveDate(), newEvent.getEffectiveDate());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEventId(), newEvent.getEventId());
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscriptionTimeline() throws Exception {
+ final SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final PlanPhaseSpecifier planPhaseSpecifier = new PlanPhaseSpecifier(UUID.randomUUID().toString(), ProductCategory.BASE,
+ BillingPeriod.NO_BILLING_PERIOD, UUID.randomUUID().toString(),
+ PhaseType.EVERGREEN);
+ Mockito.when(event.getEffectiveDate()).thenReturn(effectiveDate);
+ Mockito.when(event.getEventId()).thenReturn(eventId);
+ Mockito.when(event.getSubscriptionTransitionType()).thenReturn(SubscriptionTransitionType.CREATE);
+ Mockito.when(event.getPlanPhaseSpecifier()).thenReturn(planPhaseSpecifier);
+
+ final SubscriptionTimeline subscriptionTimeline = Mockito.mock(SubscriptionTimeline.class);
+ Mockito.when(subscriptionTimeline.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscriptionTimeline.getExistingEvents()).thenReturn(ImmutableList.<SubscriptionTimeline.ExistingEvent>of(event));
+
+ final UUID bundleId = UUID.randomUUID();
+
+ final SubscriptionJsonWithEvents subscriptionJsonWithEvents = new SubscriptionJsonWithEvents(bundleId, subscriptionTimeline);
+ Assert.assertEquals(subscriptionJsonWithEvents.getSubscriptionId(), subscriptionTimeline.getId().toString());
+ Assert.assertNull(subscriptionJsonWithEvents.getNewEvents());
+ Assert.assertNull(subscriptionJsonWithEvents.getDeletedEvents());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().size(), 1);
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEffectiveDate(), event.getEffectiveDate());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEventId(), event.getEventId().toString());
+ }
+}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java
new file mode 100644
index 0000000..16a2cb6
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java
@@ -0,0 +1,44 @@
+/*
+ * 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.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class TestTagDefinitionJson {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String name = UUID.randomUUID().toString();
+ final String description = UUID.randomUUID().toString();
+ final TagDefinitionJson tagDefinitionJson = new TagDefinitionJson(name, description);
+ Assert.assertEquals(tagDefinitionJson.getName(), name);
+ Assert.assertEquals(tagDefinitionJson.getDescription(), description);
+
+ final String asJson = mapper.writeValueAsString(tagDefinitionJson);
+ Assert.assertEquals(asJson, "{\"name\":\"" + tagDefinitionJson.getName() + "\"," +
+ "\"description\":\"" + tagDefinitionJson.getDescription() + "\"}");
+
+ final TagDefinitionJson fromJson = mapper.readValue(asJson, TagDefinitionJson.class);
+ Assert.assertEquals(fromJson, tagDefinitionJson);
+ }
+}
diff --git a/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java b/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java
index ac5c134..55163ca 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java
@@ -210,6 +210,7 @@ public class OverdueTestBase {
((ZombieControl)invoice).addResult("getInvoiceDate",dateOfLastUnPaidInvoice);
((ZombieControl)invoice).addResult("getBalance",BigDecimal.TEN);
((ZombieControl)invoice).addResult("getId",UUID.randomUUID());
+ ((ZombieControl)invoice).addResult("hashCode", UUID.randomUUID().hashCode());
InvoiceItem item = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceItem.class);
((ZombieControl)item).addResult("getBundleId",bundleId);
diff --git a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
index e73dbf4..4da5a59 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
@@ -16,21 +16,23 @@
package com.ning.billing.util.customfield.dao;
+import java.util.Collection;
import java.util.List;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.dao.ObjectTypeBinder;
-import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
+
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
import com.ning.billing.util.customfield.CustomField;
+import com.ning.billing.util.dao.EntityHistory;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.dao.ObjectTypeBinder;
+import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
@ExternalizedSqlViaStringTemplate3
@RegisterMapper(CustomFieldMapper.class)
@@ -40,21 +42,21 @@ public interface CustomFieldSqlDao extends UpdatableEntityCollectionSqlDao<Custo
@SqlBatch(transactional=false)
public void insertFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @CustomFieldBinder final List<CustomField> entities,
+ @CustomFieldBinder final Collection<CustomField> entities,
@CallContextBinder final CallContext context);
@Override
@SqlBatch(transactional=false)
public void updateFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @CustomFieldBinder final List<CustomField> entities,
+ @CustomFieldBinder final Collection<CustomField> entities,
@CallContextBinder final CallContext context);
@Override
@SqlBatch(transactional=false)
public void deleteFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @CustomFieldBinder final List<CustomField> entities,
+ @CustomFieldBinder final Collection<CustomField> entities,
@CallContextBinder final CallContext context);
@Override
diff --git a/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java b/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java
index 074f322..dc593db 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java
@@ -17,10 +17,11 @@
package com.ning.billing.util.customfield;
import java.util.UUID;
+
import com.ning.billing.util.entity.UpdatableEntityBase;
public class StringCustomField extends UpdatableEntityBase implements CustomField {
- private String name;
+ private final String name;
private String value;
public StringCustomField(String name, String value) {
@@ -51,22 +52,36 @@ public class StringCustomField extends UpdatableEntityBase implements CustomFiel
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- StringCustomField that = (StringCustomField) o;
-
- if (name != null ? !name.equals(that.name) : that.name != null) return false;
- //if (value != null ? !value.equals(that.value) : that.value != null) return false;
-
- return true;
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((value == null) ? 0 : value.hashCode());
+ return result;
}
@Override
- public int hashCode() {
- int result = name != null ? name.hashCode() : 0;
- result = 31 * result + (value != null ? value.hashCode() : 0);
- return result;
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ StringCustomField other = (StringCustomField) obj;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ }
+ else if (!name.equals(other.name))
+ return false;
+ if (value == null) {
+ if (other.value != null)
+ return false;
+ }
+ else if (!value.equals(other.value))
+ return false;
+ return true;
}
+
}
diff --git a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
index 6c09c85..8acc42e 100644
--- a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
+++ b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
@@ -16,71 +16,85 @@
package com.ning.billing.util.dao;
-import com.ning.billing.util.ChangeType;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.entity.Entity;
-import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
-import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.UUID;
+import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Sets;
+import com.ning.billing.util.ChangeType;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.entity.Entity;
+import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
+
public abstract class AuditedCollectionDaoBase<T extends Entity> implements AuditedCollectionDao<T> {
+ private static final class IdInSetPredicate<T extends Entity> implements Predicate<T> {
+ private final Set<UUID> ids;
+
+ public IdInSetPredicate(Set<UUID> ids) {
+ this.ids = ids;
+ }
+
+ @Override
+ public boolean apply(T entity) {
+ return ids.contains(entity.getId());
+ }
+ }
+
+ private final Function<T, UUID> entityIdExtractor = new Function<T, UUID>() {
+ @Override
+ public UUID apply(T entity) {
+ return entity.getId();
+ }
+ };
+
@Override
public void saveEntitiesFromTransaction(Transmogrifier transactionalDao, UUID objectId, ObjectType objectType, List<T> entities, CallContext context) {
UpdatableEntityCollectionSqlDao<T> dao = transmogrifyDao(transactionalDao);
- // get list of existing entities
List<T> existingEntities = dao.load(objectId.toString(), objectType);
- List<T> entitiesToUpdate = new ArrayList<T>();
-
- // sort into entities to update (entitiesToUpdate), entities to add (entities), and entities to delete (existingEntities)
- Iterator<T> entityIterator = entities.iterator();
- while (entityIterator.hasNext()) {
- T entity = entityIterator.next();
-
- Iterator<T> existingEntityIterator = existingEntities.iterator();
- while (existingEntityIterator.hasNext()) {
- T existingEntity = existingEntityIterator.next();
- if (entity.equals(existingEntity)) {
- // if the entities match, remove from both lists
- // this requires that the id is *not* part of the equals statement
- entityIterator.remove();
- existingEntityIterator.remove();
-
- // if the entities have the same hash code (e.g. same data), don't bother updating
- if (entity.hashCode() != existingEntity.hashCode()) {
- entitiesToUpdate.add(entity);
- }
- }
- }
- }
- if (entities.size() != 0) {
- dao.insertFromTransaction(objectId.toString(), objectType, entities, context);
+ // get list of existing entities
+ Set<UUID> currentObjIds = new HashSet<UUID>(Collections2.transform(existingEntities, entityIdExtractor));
+ Set<UUID> updatedObjIds = new HashSet<UUID>(Collections2.transform(entities, entityIdExtractor));
+
+ Set<UUID> idsOfObjsToRemove = Sets.difference(currentObjIds, updatedObjIds);
+ Set<UUID> idsOfObjsToAdd = Sets.difference(updatedObjIds, currentObjIds);
+ Set<UUID> idsOfObjsToUpdate = Sets.intersection(currentObjIds, updatedObjIds);
+
+ Collection<T> objsToRemove = Collections2.filter(existingEntities, new IdInSetPredicate<T>(idsOfObjsToRemove));
+ Collection<T> objsToAdd = Collections2.filter(entities, new IdInSetPredicate<T>(idsOfObjsToAdd));
+ Collection<T> objsToUpdate = Collections2.filter(existingEntities, new IdInSetPredicate<T>(idsOfObjsToUpdate));
+
+ if (objsToAdd.size() != 0) {
+ dao.insertFromTransaction(objectId.toString(), objectType, objsToAdd, context);
}
- if (entitiesToUpdate.size() != 0) {
- dao.updateFromTransaction(objectId.toString(), objectType, entitiesToUpdate, context);
+ if (objsToUpdate.size() != 0) {
+ dao.updateFromTransaction(objectId.toString(), objectType, objsToUpdate, context);
}
// get all custom entities (including those that are about to be deleted) from the database in order to get the record ids
List<Mapper<UUID, Long>> recordIds = dao.getRecordIds(objectId.toString(), objectType);
Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
- if (existingEntities.size() != 0) {
- dao.deleteFromTransaction(objectId.toString(), objectType, existingEntities, context);
+ if (objsToRemove.size() != 0) {
+ dao.deleteFromTransaction(objectId.toString(), objectType, objsToRemove, context);
}
List<EntityHistory<T>> entityHistories = new ArrayList<EntityHistory<T>>();
- entityHistories.addAll(convertToHistory(entities, recordIdMap, ChangeType.INSERT));
- entityHistories.addAll(convertToHistory(entitiesToUpdate, recordIdMap, ChangeType.UPDATE));
- entityHistories.addAll(convertToHistory(existingEntities, recordIdMap, ChangeType.DELETE));
+ entityHistories.addAll(convertToHistory(objsToAdd, recordIdMap, ChangeType.INSERT));
+ entityHistories.addAll(convertToHistory(objsToUpdate, recordIdMap, ChangeType.UPDATE));
+ entityHistories.addAll(convertToHistory(objsToRemove, recordIdMap, ChangeType.DELETE));
Long maxHistoryRecordId = dao.getMaxHistoryRecordId();
dao.addHistoryFromTransaction(objectId.toString(), objectType, entityHistories, context);
@@ -119,7 +133,7 @@ public abstract class AuditedCollectionDaoBase<T extends Entity> implements Audi
return results;
}
- protected List<EntityHistory<T>> convertToHistory(List<T> entities, Map<UUID, Long> recordIds, ChangeType changeType) {
+ protected List<EntityHistory<T>> convertToHistory(Collection<T> entities, Map<UUID, Long> recordIds, ChangeType changeType) {
List<EntityHistory<T>> histories = new ArrayList<EntityHistory<T>>();
for (T entity : entities) {
diff --git a/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java b/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java
index 475ae8d..e74a64a 100644
--- a/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/collection/dao/EntityCollectionSqlDao.java
@@ -16,13 +16,10 @@
package com.ning.billing.util.entity.collection.dao;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.dao.Mapper;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.dao.ObjectTypeBinder;
-import com.ning.billing.util.dao.RecordIdMapper;
-import com.ning.billing.util.entity.Entity;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlBatch;
@@ -30,8 +27,13 @@ import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import java.util.List;
-import java.util.UUID;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.dao.Mapper;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.dao.ObjectTypeBinder;
+import com.ning.billing.util.dao.RecordIdMapper;
+import com.ning.billing.util.entity.Entity;
/**
* provides consistent semantics for entity collections
@@ -42,13 +44,13 @@ public interface EntityCollectionSqlDao<T extends Entity> {
@SqlBatch(transactional=false)
public void insertFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @BindBean final List<T> entities,
+ @BindBean final Collection<T> entities,
@CallContextBinder final CallContext context);
@SqlBatch(transactional=false)
public void deleteFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @BindBean final List<T> entities,
+ @BindBean final Collection<T> entities,
@CallContextBinder final CallContext context);
@SqlQuery
diff --git a/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java b/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java
index bdaf1c9..0079008 100644
--- a/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java
@@ -16,6 +16,17 @@
package com.ning.billing.util.entity.collection.dao;
+import java.util.Collection;
+import java.util.List;
+
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.BindBean;
+import org.skife.jdbi.v2.sqlobject.SqlBatch;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
+import org.skife.jdbi.v2.sqlobject.mixins.CloseMe;
+import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
+
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.CallContextBinder;
import com.ning.billing.util.dao.AuditSqlDao;
@@ -25,15 +36,6 @@ import com.ning.billing.util.dao.Mapper;
import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.dao.ObjectTypeBinder;
import com.ning.billing.util.entity.Entity;
-import org.skife.jdbi.v2.sqlobject.Bind;
-import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.SqlBatch;
-import org.skife.jdbi.v2.sqlobject.SqlQuery;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.sqlobject.mixins.CloseMe;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-
-import java.util.List;
public interface UpdatableEntityCollectionSqlDao<T extends Entity> extends EntityCollectionSqlDao<T>,
CollectionHistorySqlDao<T>,
@@ -41,7 +43,7 @@ public interface UpdatableEntityCollectionSqlDao<T extends Entity> extends Entit
@SqlBatch(transactional=false)
public void updateFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @BindBean final List<T> entities,
+ @BindBean final Collection<T> entities,
@CallContextBinder final CallContext context);
@SqlQuery
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
index b988bde..4a065de 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
@@ -20,16 +20,14 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import com.ning.billing.invoice.api.InvoiceApiException;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.tag.dao.TagDao;
-
import com.google.inject.Inject;
-import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.api.TagDefinitionApiException;
import com.ning.billing.util.api.TagUserApi;
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
public class DefaultTagUserApi implements TagUserApi {
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
index 2ffe7fc..8118788 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
@@ -16,6 +16,17 @@
package com.ning.billing.util.tag.dao;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.skife.jdbi.v2.IDBI;
+import org.skife.jdbi.v2.Transaction;
+import org.skife.jdbi.v2.TransactionStatus;
+import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
+
import com.google.inject.Inject;
import com.ning.billing.ErrorCode;
import com.ning.billing.invoice.api.InvoiceApiException;
@@ -33,15 +44,6 @@ import com.ning.billing.util.tag.DefaultControlTag;
import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
-import org.skife.jdbi.v2.IDBI;
-import org.skife.jdbi.v2.Transaction;
-import org.skife.jdbi.v2.TransactionStatus;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
public class AuditedTagDao extends AuditedCollectionDaoBase<Tag> implements TagDao {
private final TagSqlDao tagSqlDao;
@@ -113,8 +115,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag> implements TagD
throw new InvoiceApiException(ErrorCode.TAG_DOES_NOT_EXIST, tagName);
}
- List<Tag> tagList = new ArrayList<Tag>();
- tagList.add(tag);
+ List<Tag> tagList = Arrays.asList(tag);
List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
index ee62b60..bde62e7 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
@@ -16,18 +16,9 @@
package com.ning.billing.util.tag.dao;
+import java.util.Collection;
import java.util.List;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextBinder;
-import com.ning.billing.util.dao.AuditBinder;
-import com.ning.billing.util.dao.EntityAudit;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectType;
-import com.ning.billing.util.dao.ObjectTypeBinder;
-import com.ning.billing.util.dao.TableName;
-import com.ning.billing.util.dao.TableNameBinder;
-import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
@@ -36,6 +27,13 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
+
+import com.ning.billing.util.callcontext.CallContext;
+import com.ning.billing.util.callcontext.CallContextBinder;
+import com.ning.billing.util.dao.EntityHistory;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.dao.ObjectTypeBinder;
+import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
import com.ning.billing.util.tag.Tag;
@ExternalizedSqlViaStringTemplate3
@@ -45,21 +43,21 @@ public interface TagSqlDao extends UpdatableEntityCollectionSqlDao<Tag>, Transac
@SqlBatch(transactional=false)
public void insertFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @TagBinder final List<Tag> tags,
+ @TagBinder final Collection<Tag> tags,
@CallContextBinder final CallContext context);
@Override
@SqlBatch(transactional=false)
public void updateFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @TagBinder final List<Tag> tags,
+ @TagBinder final Collection<Tag> tags,
@CallContextBinder final CallContext context);
@Override
@SqlBatch(transactional=false)
public void deleteFromTransaction(@Bind("objectId") final String objectId,
@ObjectTypeBinder final ObjectType objectType,
- @TagBinder final List<Tag> tags,
+ @TagBinder final Collection<Tag> tags,
@CallContextBinder final CallContext context);
@Override
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java b/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
index b6d502f..613f043 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
@@ -44,19 +44,26 @@ public class DefaultControlTag extends DescriptiveTag implements ControlTag {
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- DefaultControlTag that = (DefaultControlTag) o;
-
- if (controlTagType != that.controlTagType) return false;
-
- return true;
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((controlTagType == null) ? 0
+ : controlTagType.hashCode());
+ return result;
}
@Override
- public int hashCode() {
- return controlTagType != null ? controlTagType.hashCode() : 0;
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DefaultControlTag other = (DefaultControlTag) obj;
+ if (controlTagType != other.controlTagType)
+ return false;
+ return true;
}
+
}