killbill-aplcache
Changes
beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueWithSubscriptionCancellation.java 3(+2 -1)
entitlement/src/main/java/com/ning/billing/entitlement/block/DefaultBlockingChecker.java 122(+63 -59)
entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java 34(+31 -3)
subscription/src/main/java/com/ning/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java 5(+3 -2)
subscription/src/main/java/com/ning/billing/subscription/api/timeline/SubscriptionDataRepair.java 5(+3 -2)
subscription/src/main/java/com/ning/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java 3(+2 -1)
subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultEffectiveSubscriptionEvent.java 5(+3 -2)
subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultRequestedSubscriptionEvent.java 5(+3 -2)
subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBase.java 57(+30 -27)
subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBaseApiService.java 21(+11 -10)
subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionEvent.java 13(+7 -6)
subscription/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransitionData.java 13(+7 -6)
Details
diff --git a/api/src/main/java/com/ning/billing/subscription/api/SubscriptionBase.java b/api/src/main/java/com/ning/billing/subscription/api/SubscriptionBase.java
index 6595dd6..c1964c4 100644
--- a/api/src/main/java/com/ning/billing/subscription/api/SubscriptionBase.java
+++ b/api/src/main/java/com/ning/billing/subscription/api/SubscriptionBase.java
@@ -11,11 +11,13 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
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.Blockable;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementSourceType;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
import com.ning.billing.subscription.api.user.SubscriptionBaseTransition;
-import com.ning.billing.subscription.api.user.SubscriptionSourceType;
import com.ning.billing.subscription.api.user.SubscriptionState;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.entity.Entity;
@@ -44,9 +46,9 @@ public interface SubscriptionBase extends Entity, Blockable {
public UUID getBundleId();
- public SubscriptionState getState();
+ public EntitlementState getState();
- public SubscriptionSourceType getSourceType();
+ public EntitlementSourceType getSourceType();
public DateTime getStartDate();
@@ -62,13 +64,13 @@ public interface SubscriptionBase extends Entity, Blockable {
public PlanPhase getCurrentPhase();
- public String getLastActiveProductName();
+ public Product getLastActiveProduct();
- public String getLastActivePriceListName();
+ public PriceList getLastActivePriceList();
- public String getLastActiveCategoryName();
+ public ProductCategory getLastActiveCategory();
- public String getLastActiveBillingPeriod();
+ public BillingPeriod getLastActiveBillingPeriod();
public DateTime getChargedThroughDate();
diff --git a/api/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransition.java b/api/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransition.java
index fa1c75e..01acb68 100644
--- a/api/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransition.java
+++ b/api/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransition.java
@@ -23,6 +23,7 @@ import org.joda.time.DateTime;
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.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
public interface SubscriptionBaseTransition {
@@ -31,9 +32,9 @@ public interface SubscriptionBaseTransition {
public UUID getBundleId();
- public SubscriptionState getPreviousState();
+ public EntitlementState getPreviousState();
- public SubscriptionState getNextState();
+ public EntitlementState getNextState();
public UUID getPreviousEventId();
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueWithSubscriptionCancellation.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueWithSubscriptionCancellation.java
index 0a26258..e82a158 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueWithSubscriptionCancellation.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/overdue/TestOverdueWithSubscriptionCancellation.java
@@ -26,6 +26,7 @@ import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.beatrix.util.InvoiceChecker.ExpectedInvoiceItemCheck;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.DefaultEntitlement;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.invoice.api.InvoiceItemType;
import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionState;
@@ -87,6 +88,6 @@ public class TestOverdueWithSubscriptionCancellation extends TestOverdueBase {
checkODState("OD1");
final SubscriptionBase cancelledBaseSubscription = ((DefaultEntitlement) entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext)).getSubscriptionBase();
- assertTrue(cancelledBaseSubscription.getState() == SubscriptionState.CANCELLED);
+ assertTrue(cancelledBaseSubscription.getState() == EntitlementState.CANCELLED);
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
index 289fc5b..76a3615 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
@@ -19,6 +19,7 @@ package com.ning.billing.entitlement.api;
import java.util.UUID;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import com.ning.billing.account.api.Account;
@@ -47,195 +48,208 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
private final SubscriptionBase subscriptionBase;
private final InternalCallContextFactory internalCallContextFactory;
private final Clock clock;
+ private final boolean isBlocked;
+ private final BlockingState entitlementBlockingState;
private final BlockingChecker checker;
private final UUID accountId;
private final String externalKey;
+ private final DateTimeZone accountTimeZone;
- public DefaultEntitlement(final AccountInternalApi accountApi, final SubscriptionBase subscriptionBase, final UUID accountId, final String externalKey, final InternalCallContextFactory internalCallContextFactory, final Clock clock, final BlockingChecker checker) {
+ public DefaultEntitlement(final AccountInternalApi accountApi, final SubscriptionBase subscriptionBase, final UUID accountId,
+ final String externalKey, final boolean isBlocked, final BlockingState entitlementBlockingState, final DateTimeZone accountTimeZone,
+ final InternalCallContextFactory internalCallContextFactory,
+ final Clock clock, final BlockingChecker checker) {
super(subscriptionBase.getId(), subscriptionBase.getCreatedDate(), subscriptionBase.getUpdatedDate());
this.accountApi = accountApi;
this.subscriptionBase = subscriptionBase;
this.accountId = accountId;
this.externalKey = externalKey;
+ this.isBlocked = isBlocked;
+ this.entitlementBlockingState = entitlementBlockingState;
+ this.accountTimeZone = accountTimeZone;
this.internalCallContextFactory = internalCallContextFactory;
this.clock = clock;
this.checker = checker;
}
-
- @Override
- public boolean cancelEntitlementWithDate(final LocalDate localDate, final CallContext callContext) throws EntitlementApiException {
-
- final InternalCallContext context = internalCallContextFactory.createInternalCallContext(accountId, callContext);
- final DateTime requestedDate = fromLocalDateAndReferenceTime(localDate, subscriptionBase.getStartDate(), clock, context);
- try {
- return subscriptionBase.cancel(requestedDate, callContext);
- } catch (SubscriptionBaseApiException e) {
- throw new EntitlementApiException(e);
- }
+ // STEPH_ENT should be remove but beatrix tests need to be changed
+ public SubscriptionBase getSubscriptionBase() {
+ return subscriptionBase;
}
-
@Override
- public boolean cancelEntitlementWithPolicy(final EntitlementActionPolicy entitlementBillingActionPolicy, final CallContext callContext) throws EntitlementApiException {
- return false;
+ public UUID getBaseEntitlementId() {
+ return subscriptionBase.getId();
}
@Override
- public boolean cancelEntitlementWithDateOverrideBillingPolicy(final LocalDate effectiveDate, final BillingActionPolicy billingPolicy, final CallContext context) throws EntitlementApiException {
- return false; //To change body of implemented methods use File | Settings | File Templates.
+ public UUID getBundleId() {
+ return subscriptionBase.getBundleId();
}
@Override
- public boolean cancelEntitlementWithPolicyOverrideBillingPolicy(final EntitlementActionPolicy policy, final BillingActionPolicy billingPolicy, final CallContext context) throws EntitlementApiException {
- return false; //To change body of implemented methods use File | Settings | File Templates.
+ public UUID getAccountId() {
+ return accountId;
}
@Override
- public void uncancel(final CallContext context) throws EntitlementApiException {
- //To change body of implemented methods use File | Settings | File Templates.
+ public String getExternalKey() {
+ return externalKey;
}
-
@Override
- public boolean changePlan(final String productName, final BillingPeriod billingPeriod, final String priceList, final LocalDate localDate, final CallContext callContext) throws EntitlementApiException {
-
- final InternalCallContext context = internalCallContextFactory.createInternalCallContext(accountId, callContext);
- final DateTime requestedDate = fromLocalDateAndReferenceTime(localDate, subscriptionBase.getStartDate(), clock, context);
- try {
- checker.checkBlockedChange(subscriptionBase, context);
- return subscriptionBase.changePlan(productName, billingPeriod, priceList, requestedDate, callContext);
- } catch (BlockingApiException e) {
- throw new EntitlementApiException(e, e.getCode(), e.getMessage());
- } catch (SubscriptionBaseApiException e) {
- throw new EntitlementApiException(e);
- }
+ public EntitlementState getState() {
+ return isBlocked ? EntitlementState.BLOCKED : subscriptionBase.getState();
}
@Override
- public boolean changePlanOverrideBillingPolicy(final String productName, final BillingPeriod billingPeriod, final String priceList, final LocalDate localDate, final BillingActionPolicy actionPolicy, final CallContext callContext) throws EntitlementApiException {
- final InternalCallContext context = internalCallContextFactory.createInternalCallContext(accountId, callContext);
- final DateTime requestedDate = fromLocalDateAndReferenceTime(localDate, subscriptionBase.getStartDate(), clock, context);
- try {
- checker.checkBlockedChange(subscriptionBase, context);
- return subscriptionBase.changePlanWithPolicy(productName, billingPeriod, priceList, requestedDate, actionPolicy, callContext);
- } catch (BlockingApiException e) {
- throw new EntitlementApiException(e, e.getCode(), e.getMessage());
- } catch (SubscriptionBaseApiException e) {
- throw new EntitlementApiException(e);
- }
+ public EntitlementSourceType getSourceType() {
+ return subscriptionBase.getSourceType();
}
@Override
- public boolean block(final String serviceName, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
-
-
-
- return false; //To change body of implemented methods use File | Settings | File Templates.
+ public LocalDate getEffectiveStartDate() {
+ return new LocalDate(subscriptionBase.getStartDate(), accountTimeZone);
}
@Override
- public boolean unblock(final String serviceName, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
- return false; //To change body of implemented methods use File | Settings | File Templates.
+ public LocalDate getEffectiveEndDate() {
+ if (entitlementBlockingState != null && entitlementBlockingState.getStateName().equals(DefaultEntitlementApi.ENT_STATE_CANCELLED)) {
+ return new LocalDate(entitlementBlockingState.getCreatedDate(), accountTimeZone);
+ }
+ return new LocalDate(subscriptionBase.getEndDate(), accountTimeZone);
}
-
@Override
- public UUID getBaseEntitlementId() {
- return subscriptionBase.getId();
+ public LocalDate getRequestedEndDate() {
+ // STEPH_ENT
+ return null; //subscriptionBase.;
}
@Override
- public UUID getBundleId() {
- return subscriptionBase.getBundleId();
+ public Product getProduct() {
+ return subscriptionBase.getCurrentPlan().getProduct();
}
@Override
- public UUID getAccountId() {
- return accountId;
+ public Plan getPlan() {
+ return subscriptionBase.getCurrentPlan();
}
- // STEPH_ENT should be remove but beatrix tests need to be changed
- public SubscriptionBase getSubscriptionBase() {
- return subscriptionBase;
+ @Override
+ public PriceList getPriceList() {
+ return subscriptionBase.getCurrentPriceList();
}
@Override
- public String getExternalKey() {
- return externalKey;
+ public PlanPhase getCurrentPhase() {
+ return subscriptionBase.getCurrentPhase();
}
@Override
- public EntitlementState getState() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public ProductCategory getProductCategory() {
+ return subscriptionBase.getCategory();
}
@Override
- public EntitlementSourceType getSourceType() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public Product getLastActiveProduct() {
+ return subscriptionBase.getLastActiveProduct();
}
@Override
- public LocalDate getEffectiveStartDate() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public Plan getLastActivePlan() {
+ return subscriptionBase.getLastActivePlan();
}
@Override
- public LocalDate getEffectiveEndDate() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public PriceList getLastActivePriceList() {
+ return subscriptionBase.getLastActivePriceList();
}
@Override
- public LocalDate getRequestedEndDate() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public ProductCategory getLastActiveProductCategory() {
+ return subscriptionBase.getLastActiveCategory();
}
+
@Override
- public Product getProduct() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean cancelEntitlementWithDate(final LocalDate localDate, final CallContext callContext) throws EntitlementApiException {
+
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(accountId, callContext);
+ final DateTime requestedDate = fromLocalDateAndReferenceTime(localDate, subscriptionBase.getStartDate(), clock, context);
+ try {
+ return subscriptionBase.cancel(requestedDate, callContext);
+ } catch (SubscriptionBaseApiException e) {
+ throw new EntitlementApiException(e);
+ }
}
+
@Override
- public Plan getPlan() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean cancelEntitlementWithPolicy(final EntitlementActionPolicy entitlementBillingActionPolicy, final CallContext callContext) throws EntitlementApiException {
+ return false;
}
@Override
- public PriceList getPriceList() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean cancelEntitlementWithDateOverrideBillingPolicy(final LocalDate effectiveDate, final BillingActionPolicy billingPolicy, final CallContext context) throws EntitlementApiException {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
- public PlanPhase getCurrentPhase() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean cancelEntitlementWithPolicyOverrideBillingPolicy(final EntitlementActionPolicy policy, final BillingActionPolicy billingPolicy, final CallContext context) throws EntitlementApiException {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
- public ProductCategory getProductCategory() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public void uncancel(final CallContext context) throws EntitlementApiException {
+ //To change body of implemented methods use File | Settings | File Templates.
}
+
@Override
- public Product getLastActiveProduct() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean changePlan(final String productName, final BillingPeriod billingPeriod, final String priceList, final LocalDate localDate, final CallContext callContext) throws EntitlementApiException {
+
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(accountId, callContext);
+ final DateTime requestedDate = fromLocalDateAndReferenceTime(localDate, subscriptionBase.getStartDate(), clock, context);
+ try {
+ checker.checkBlockedChange(subscriptionBase, context);
+ return subscriptionBase.changePlan(productName, billingPeriod, priceList, requestedDate, callContext);
+ } catch (BlockingApiException e) {
+ throw new EntitlementApiException(e, e.getCode(), e.getMessage());
+ } catch (SubscriptionBaseApiException e) {
+ throw new EntitlementApiException(e);
+ }
}
@Override
- public Plan getLastActivePlan() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean changePlanOverrideBillingPolicy(final String productName, final BillingPeriod billingPeriod, final String priceList, final LocalDate localDate, final BillingActionPolicy actionPolicy, final CallContext callContext) throws EntitlementApiException {
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(accountId, callContext);
+ final DateTime requestedDate = fromLocalDateAndReferenceTime(localDate, subscriptionBase.getStartDate(), clock, context);
+ try {
+ checker.checkBlockedChange(subscriptionBase, context);
+ return subscriptionBase.changePlanWithPolicy(productName, billingPeriod, priceList, requestedDate, actionPolicy, callContext);
+ } catch (BlockingApiException e) {
+ throw new EntitlementApiException(e, e.getCode(), e.getMessage());
+ } catch (SubscriptionBaseApiException e) {
+ throw new EntitlementApiException(e);
+ }
}
@Override
- public PriceList getLastActivePriceList() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean block(final String serviceName, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
+
+
+
+ return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
- public String getLastActiveProductCategory() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public boolean unblock(final String serviceName, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
}
+
/**
* Returns a DateTime that is equals or beforeNow and whose LocalDate using the account timeZone is the one provided
* <p/>
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java
index 855f8e1..1ac038a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java
@@ -24,7 +24,10 @@ import javax.annotation.Nullable;
import javax.inject.Inject;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
@@ -34,7 +37,9 @@ import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.clock.Clock;
import com.ning.billing.entitlement.EntitlementService;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.entitlement.block.BlockingChecker;
+import com.ning.billing.entitlement.block.BlockingChecker.BlockingAggregator;
import com.ning.billing.entitlement.dao.BlockingStateDao;
import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
@@ -56,8 +61,11 @@ import com.google.common.collect.ImmutableList;
public class DefaultEntitlementApi implements EntitlementApi {
- public final String ENT_STATE_BLOCKED = "ENT_BLOCKED";
- public final String ENT_STATE_CLEAR = "ENT_CLEAR";
+ private static final Logger log = LoggerFactory.getLogger(DefaultEntitlementApi.class);
+
+ public static final String ENT_STATE_BLOCKED = "ENT_BLOCKED";
+ public static final String ENT_STATE_CLEAR = "ENT_CLEAR";
+ public static final String ENT_STATE_CANCELLED = "ENT_CANCELLED";
private final SubscriptionBaseInternalApi subscriptionInternalApi;
private final AccountInternalApi accountApi;
@@ -82,11 +90,14 @@ public class DefaultEntitlementApi implements EntitlementApi {
public Entitlement createBaseEntitlement(final UUID accountId, final PlanPhaseSpecifier planPhaseSpecifier, final String externalKey, final CallContext callContext) throws EntitlementApiException {
final InternalCallContext context = internalCallContextFactory.createInternalCallContext(callContext);
try {
+ final Account account = accountApi.getAccountById(accountId, context);
final SubscriptionBaseBundle bundle = subscriptionInternalApi.createBundleForAccount(accountId, externalKey, context);
final SubscriptionBase subscription = subscriptionInternalApi.createSubscription(bundle.getId(), planPhaseSpecifier, clock.getUTCNow(), context);
- return new DefaultEntitlement(accountApi, subscription, accountId, bundle.getExternalKey(), internalCallContextFactory, clock, checker);
+ return new DefaultEntitlement(accountApi, subscription, accountId, bundle.getExternalKey(), false, null, account.getTimeZone(), internalCallContextFactory, clock, checker);
} catch (SubscriptionBaseApiException e) {
throw new EntitlementApiException(e);
+ } catch (AccountApiException e) {
+ throw new EntitlementApiException(e);
}
}
@@ -97,20 +108,32 @@ public class DefaultEntitlementApi implements EntitlementApi {
final SubscriptionBaseBundle bundle = subscriptionInternalApi.getBundleFromId(bundleId, context);
final SubscriptionBase baseSubscription = subscriptionInternalApi.getBaseSubscription(bundleId, context);
if (baseSubscription.getCategory() != ProductCategory.BASE ||
- baseSubscription.getState() != SubscriptionState.ACTIVE) {
+ baseSubscription.getState() != EntitlementState.ACTIVE) {
throw new EntitlementApiException(ErrorCode.SUB_GET_NO_SUCH_BASE_SUBSCRIPTION, baseSubscription.getBundleId());
}
final InternalCallContext contextWithValidAccountRecordId = internalCallContextFactory.createInternalCallContext(bundle.getAccountId(), callContext);
- checker.checkBlockedChange(baseSubscription, contextWithValidAccountRecordId);
+ final BlockingAggregator blocking = checker.getBlockedStatus(baseSubscription, contextWithValidAccountRecordId);
+ if (blocking.isBlockChange()) {
+ throw new EntitlementApiException(new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, BlockingChecker.ACTION_CHANGE, BlockingChecker.TYPE_SUBSCRIPTION, baseSubscription.getId().toString()));
+ }
+
+ final BlockingState currentState = blockingStateDao.getBlockingStateForService(baseSubscription.getId(), EntitlementService.ENTITLEMENT_SERVICE_NAME, contextWithValidAccountRecordId);
+ if (currentState != null && currentState.getStateName().equals(ENT_STATE_CANCELLED)) {
+ throw new EntitlementApiException(new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, BlockingChecker.ACTION_CHANGE, BlockingChecker.TYPE_SUBSCRIPTION, baseSubscription.getId().toString()));
+ }
+
+ final Account account = accountApi.getAccountById(bundle.getAccountId(), context);
final DateTime requestedDate = fromNowAndReferenceTime(baseSubscription.getStartDate(), contextWithValidAccountRecordId);
final SubscriptionBase subscription = subscriptionInternalApi.createSubscription(baseSubscription.getBundleId(), planPhaseSpecifier, requestedDate, context);
- return new DefaultEntitlement(accountApi, subscription, bundle.getAccountId(), bundle.getExternalKey(), internalCallContextFactory, clock, checker);
+ return new DefaultEntitlement(accountApi, subscription, bundle.getAccountId(), bundle.getExternalKey(), blocking.isBlockEntitlement(), null, account.getTimeZone(), internalCallContextFactory, clock, checker);
} catch (SubscriptionBaseApiException e) {
throw new EntitlementApiException(e);
} catch (BlockingApiException e) {
throw new EntitlementApiException(e);
+ } catch (AccountApiException e) {
+ throw new EntitlementApiException(e);
}
}
@@ -120,9 +143,18 @@ public class DefaultEntitlementApi implements EntitlementApi {
try {
final SubscriptionBase subscription = subscriptionInternalApi.getSubscriptionFromId(uuid, context);
final SubscriptionBaseBundle bundle = subscriptionInternalApi.getBundleFromId(subscription.getBundleId(), context);
- return new DefaultEntitlement(accountApi, subscription, bundle.getAccountId(), bundle.getExternalKey(), internalCallContextFactory, clock, checker);
+ final BlockingAggregator blocking = checker.getBlockedStatus(subscription, context);
+
+ final Account account = accountApi.getAccountById(bundle.getAccountId(), context);
+ final BlockingState currentState = blockingStateDao.getBlockingStateForService(subscription.getId(), EntitlementService.ENTITLEMENT_SERVICE_NAME, context);
+
+ return new DefaultEntitlement(accountApi, subscription, bundle.getAccountId(), bundle.getExternalKey(), blocking.isBlockEntitlement(), currentState, account.getTimeZone(), internalCallContextFactory, clock, checker);
} catch (SubscriptionBaseApiException e) {
throw new EntitlementApiException(e);
+ } catch (BlockingApiException e) {
+ throw new EntitlementApiException(e);
+ } catch (AccountApiException e) {
+ throw new EntitlementApiException(e);
}
}
@@ -161,15 +193,33 @@ public class DefaultEntitlementApi implements EntitlementApi {
return result;
}
- private List<Entitlement> getAllEntitlementsForBundleId(final UUID bundleId, final UUID accountId, final String externalKey, final InternalTenantContext context) {
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundleId, context);
- return ImmutableList.<Entitlement>copyOf(Collections2.transform(subscriptions, new Function<SubscriptionBase, Entitlement>() {
- @Nullable
- @Override
- public Entitlement apply(@Nullable final SubscriptionBase input) {
- return new DefaultEntitlement(accountApi, input, accountId, externalKey, internalCallContextFactory, clock, checker);
- }
- }));
+ private List<Entitlement> getAllEntitlementsForBundleId(final UUID bundleId, final UUID accountId, final String externalKey, final InternalTenantContext context) throws EntitlementApiException {
+
+ try {
+ final Account account = accountApi.getAccountById(bundleId, context);
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundleId, context);
+ return ImmutableList.<Entitlement>copyOf(Collections2.transform(subscriptions, new Function<SubscriptionBase, Entitlement>() {
+ @Nullable
+ @Override
+ public Entitlement apply(@Nullable final SubscriptionBase input) {
+ BlockingAggregator blocking = null;
+ try {
+ blocking = checker.getBlockedStatus(input, context);
+ } catch (BlockingApiException e) {
+ log.warn("Failed to extract blocking state for subscription " + input.getId().toString());
+ }
+ final BlockingState currentState = blockingStateDao.getBlockingStateForService(input.getId(), EntitlementService.ENTITLEMENT_SERVICE_NAME, context);
+
+ return new DefaultEntitlement(accountApi, input, accountId, externalKey,
+ (blocking != null ? blocking.isBlockEntitlement() : false),
+ currentState,
+ account.getTimeZone(),
+ internalCallContextFactory, clock, checker);
+ }
+ }));
+ } catch (AccountApiException e) {
+ throw new EntitlementApiException(e);
+ }
}
@Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/block/BlockingChecker.java b/entitlement/src/main/java/com/ning/billing/entitlement/block/BlockingChecker.java
index eb167b0..017970d 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/block/BlockingChecker.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/block/BlockingChecker.java
@@ -22,6 +22,24 @@ import com.ning.billing.util.callcontext.InternalTenantContext;
public interface BlockingChecker {
+ public static final Object TYPE_SUBSCRIPTION = "Subscription";
+ public static final Object TYPE_BUNDLE = "Bundle";
+ public static final Object TYPE_ACCOUNT = "Account";
+
+ public static final Object ACTION_CHANGE = "Change";
+ public static final Object ACTION_ENTITLEMENT = "Entitlement";
+ public static final Object ACTION_BILLING = "Billing";
+
+
+ public interface BlockingAggregator {
+ public boolean isBlockChange();
+ public boolean isBlockEntitlement();
+ public boolean isBlockBilling();
+ }
+
+ // Only throws if we can't find the blockable enties
+ public BlockingAggregator getBlockedStatus(Blockable blockable, InternalTenantContext context) throws BlockingApiException;
+
public void checkBlockedChange(Blockable blockable, InternalTenantContext context) throws BlockingApiException;
public void checkBlockedEntitlement(Blockable blockable, InternalTenantContext context) throws BlockingApiException;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/block/DefaultBlockingChecker.java b/entitlement/src/main/java/com/ning/billing/entitlement/block/DefaultBlockingChecker.java
index aafe0de..346b443 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/block/DefaultBlockingChecker.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/block/DefaultBlockingChecker.java
@@ -35,7 +35,7 @@ import com.google.inject.Inject;
public class DefaultBlockingChecker implements BlockingChecker {
- private static class BlockingAggregator {
+ private static class DefaultBlockingAggregator implements BlockingAggregator {
private boolean blockChange = false;
private boolean blockEntitlement = false;
@@ -50,7 +50,7 @@ public class DefaultBlockingChecker implements BlockingChecker {
blockBilling = blockBilling || state.isBlockBilling();
}
- public void or(final BlockingAggregator state) {
+ public void or(final DefaultBlockingAggregator state) {
if (state == null) {
return;
}
@@ -59,28 +59,22 @@ public class DefaultBlockingChecker implements BlockingChecker {
blockBilling = blockBilling || state.isBlockBilling();
}
+ @Override
public boolean isBlockChange() {
return blockChange;
}
+ @Override
public boolean isBlockEntitlement() {
return blockEntitlement;
}
+ @Override
public boolean isBlockBilling() {
return blockBilling;
}
-
}
- private static final Object TYPE_SUBSCRIPTION = "Subscription";
- private static final Object TYPE_BUNDLE = "Bundle";
- private static final Object TYPE_ACCOUNT = "Account";
-
- private static final Object ACTION_CHANGE = "Change";
- private static final Object ACTION_ENTITLEMENT = "Entitlement";
- private static final Object ACTION_BILLING = "Billing";
-
private final SubscriptionBaseInternalApi subscriptionApi;
private final BlockingStateDao dao;
@@ -90,15 +84,20 @@ public class DefaultBlockingChecker implements BlockingChecker {
this.dao = dao;
}
- private BlockingAggregator getBlockedStateSubscriptionId(final UUID subscriptionId, final InternalTenantContext context) throws SubscriptionBaseApiException {
- final SubscriptionBase subscription = subscriptionApi.getSubscriptionFromId(subscriptionId, context);
- return getBlockedStateSubscription(subscription, context);
+ private DefaultBlockingAggregator getBlockedStateSubscriptionId(final UUID subscriptionId, final InternalTenantContext context) throws BlockingApiException {
+ final SubscriptionBase subscription;
+ try {
+ subscription = subscriptionApi.getSubscriptionFromId(subscriptionId, context);
+ return getBlockedStateSubscription(subscription, context);
+ } catch (SubscriptionBaseApiException e) {
+ throw new BlockingApiException(e, ErrorCode.fromCode(e.getCode()));
+ }
}
- private BlockingAggregator getBlockedStateSubscription(final SubscriptionBase subscription, final InternalTenantContext context) throws SubscriptionBaseApiException {
- final BlockingAggregator result = new BlockingAggregator();
+ private DefaultBlockingAggregator getBlockedStateSubscription(final SubscriptionBase subscription, final InternalTenantContext context) throws BlockingApiException {
+ final DefaultBlockingAggregator result = new DefaultBlockingAggregator();
if (subscription != null) {
- final BlockingAggregator subscriptionState = getBlockedStateForId(subscription.getId(), context);
+ final DefaultBlockingAggregator subscriptionState = getBlockedStateForId(subscription.getId(), context);
if (subscriptionState != null) {
result.or(subscriptionState);
}
@@ -111,35 +110,42 @@ public class DefaultBlockingChecker implements BlockingChecker {
}
- private BlockingAggregator getBlockedStateBundleId(final UUID bundleId, final InternalTenantContext context) throws SubscriptionBaseApiException {
- final SubscriptionBaseBundle bundle = subscriptionApi.getBundleFromId(bundleId, context);
- return getBlockedStateBundle(bundle, context);
+ private DefaultBlockingAggregator getBlockedStateBundleId(final UUID bundleId, final InternalTenantContext context) throws BlockingApiException {
+
+ final SubscriptionBaseBundle bundle;
+ try {
+ bundle = subscriptionApi.getBundleFromId(bundleId, context);
+ return getBlockedStateBundle(bundle, context);
+ } catch (SubscriptionBaseApiException e) {
+ throw new BlockingApiException(e, ErrorCode.fromCode(e.getCode()));
+ }
}
- private BlockingAggregator getBlockedStateBundle(final SubscriptionBaseBundle bundle, final InternalTenantContext context) {
- final BlockingAggregator result = getBlockedStateAccountId(bundle.getAccountId(), context);
- final BlockingAggregator bundleState = getBlockedStateForId(bundle.getId(), context);
+ private DefaultBlockingAggregator getBlockedStateBundle(final SubscriptionBaseBundle bundle, final InternalTenantContext context) {
+ final DefaultBlockingAggregator result = getBlockedStateAccountId(bundle.getAccountId(), context);
+ final DefaultBlockingAggregator bundleState = getBlockedStateForId(bundle.getId(), context);
if (bundleState != null) {
result.or(bundleState);
}
return result;
}
- private BlockingAggregator getBlockedStateAccount(final Account account, final InternalTenantContext context) {
+ private DefaultBlockingAggregator getBlockedStateAccount(final Account account, final InternalTenantContext context) {
if (account != null) {
return getBlockedStateForId(account.getId(), context);
}
- return new BlockingAggregator();
+ return new DefaultBlockingAggregator();
}
- private BlockingAggregator getBlockedStateAccountId(final UUID accountId, final InternalTenantContext context) {
+ private DefaultBlockingAggregator getBlockedStateAccountId(final UUID accountId, final InternalTenantContext context) {
return getBlockedStateForId(accountId, context);
}
- private BlockingAggregator getBlockedStateForId(final UUID blockableId, final InternalTenantContext context) {
- final BlockingAggregator result = new BlockingAggregator();
+ private DefaultBlockingAggregator getBlockedStateForId(final UUID blockableId, final InternalTenantContext context) {
+ final DefaultBlockingAggregator result = new DefaultBlockingAggregator();
if (blockableId != null) {
+ // Last states across services
final List<BlockingState> blockableState = dao.getBlockingState(blockableId, context);
for (BlockingState cur : blockableState) {
result.or(cur);
@@ -149,48 +155,46 @@ public class DefaultBlockingChecker implements BlockingChecker {
}
@Override
+ public BlockingAggregator getBlockedStatus(final Blockable blockable, final InternalTenantContext context) throws BlockingApiException {
+ if (blockable instanceof SubscriptionBase) {
+ return getBlockedStateSubscription((SubscriptionBase) blockable, context);
+ } else if (blockable instanceof SubscriptionBaseBundle) {
+ return getBlockedStateBundle((SubscriptionBaseBundle) blockable, context);
+ } else { //(blockable instanceof Account) {
+ return getBlockedStateAccount((Account) blockable, context);
+ }
+ }
+
+ @Override
public void checkBlockedChange(final Blockable blockable, final InternalTenantContext context) throws BlockingApiException {
- try {
- if (blockable instanceof SubscriptionBase && getBlockedStateSubscription((SubscriptionBase) blockable, context).isBlockChange()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_CHANGE, TYPE_SUBSCRIPTION, blockable.getId().toString());
- } else if (blockable instanceof SubscriptionBaseBundle && getBlockedStateBundle((SubscriptionBaseBundle) blockable, context).isBlockChange()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_CHANGE, TYPE_BUNDLE, blockable.getId().toString());
- } else if (blockable instanceof Account && getBlockedStateAccount((Account) blockable, context).isBlockChange()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_CHANGE, TYPE_ACCOUNT, blockable.getId().toString());
- }
- } catch (SubscriptionBaseApiException e) {
- throw new BlockingApiException(e, ErrorCode.fromCode(e.getCode()));
+ if (blockable instanceof SubscriptionBase && getBlockedStateSubscription((SubscriptionBase) blockable, context).isBlockChange()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_CHANGE, TYPE_SUBSCRIPTION, blockable.getId().toString());
+ } else if (blockable instanceof SubscriptionBaseBundle && getBlockedStateBundle((SubscriptionBaseBundle) blockable, context).isBlockChange()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_CHANGE, TYPE_BUNDLE, blockable.getId().toString());
+ } else if (blockable instanceof Account && getBlockedStateAccount((Account) blockable, context).isBlockChange()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_CHANGE, TYPE_ACCOUNT, blockable.getId().toString());
}
}
@Override
public void checkBlockedEntitlement(final Blockable blockable, final InternalTenantContext context) throws BlockingApiException {
- try {
- // STEPH_ENT
- if (blockable instanceof SubscriptionBase && getBlockedStateSubscription((SubscriptionBase) blockable, context).isBlockEntitlement()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_ENTITLEMENT, TYPE_SUBSCRIPTION, blockable.getId().toString());
- } else if (blockable instanceof SubscriptionBaseBundle && getBlockedStateBundle((SubscriptionBaseBundle) blockable, context).isBlockEntitlement()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_ENTITLEMENT, TYPE_BUNDLE, blockable.getId().toString());
- } else if (blockable instanceof Account && getBlockedStateAccount((Account) blockable, context).isBlockEntitlement()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_ENTITLEMENT, TYPE_ACCOUNT, blockable.getId().toString());
- }
- } catch (SubscriptionBaseApiException e) {
- throw new BlockingApiException(e, ErrorCode.fromCode(e.getCode()));
+ if (blockable instanceof SubscriptionBase && getBlockedStateSubscription((SubscriptionBase) blockable, context).isBlockEntitlement()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_ENTITLEMENT, TYPE_SUBSCRIPTION, blockable.getId().toString());
+ } else if (blockable instanceof SubscriptionBaseBundle && getBlockedStateBundle((SubscriptionBaseBundle) blockable, context).isBlockEntitlement()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_ENTITLEMENT, TYPE_BUNDLE, blockable.getId().toString());
+ } else if (blockable instanceof Account && getBlockedStateAccount((Account) blockable, context).isBlockEntitlement()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_ENTITLEMENT, TYPE_ACCOUNT, blockable.getId().toString());
}
}
@Override
public void checkBlockedBilling(final Blockable blockable, final InternalTenantContext context) throws BlockingApiException {
- try {
- if (blockable instanceof SubscriptionBase && getBlockedStateSubscription((SubscriptionBase) blockable, context).isBlockBilling()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_BILLING, TYPE_SUBSCRIPTION, blockable.getId().toString());
- } else if (blockable instanceof SubscriptionBaseBundle && getBlockedStateBundle((SubscriptionBaseBundle) blockable, context).isBlockBilling()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_BILLING, TYPE_BUNDLE, blockable.getId().toString());
- } else if (blockable instanceof Account && getBlockedStateAccount((Account) blockable, context).isBlockBilling()) {
- throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_BILLING, TYPE_ACCOUNT, blockable.getId().toString());
- }
- } catch (SubscriptionBaseApiException e) {
- throw new BlockingApiException(e, ErrorCode.fromCode(e.getCode()));
+ if (blockable instanceof SubscriptionBase && getBlockedStateSubscription((SubscriptionBase) blockable, context).isBlockBilling()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_BILLING, TYPE_SUBSCRIPTION, blockable.getId().toString());
+ } else if (blockable instanceof SubscriptionBaseBundle && getBlockedStateBundle((SubscriptionBaseBundle) blockable, context).isBlockBilling()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_BILLING, TYPE_BUNDLE, blockable.getId().toString());
+ } else if (blockable instanceof Account && getBlockedStateAccount((Account) blockable, context).isBlockBilling()) {
+ throw new BlockingApiException(ErrorCode.BLOCK_BLOCKED_ACTION, ACTION_BILLING, TYPE_ACCOUNT, blockable.getId().toString());
}
}
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
index f08808b..d6aeaa5 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
@@ -2,20 +2,24 @@ package com.ning.billing.entitlement.api;
import java.util.UUID;
+import org.joda.time.LocalDate;
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.AccountApiException;
-import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.EntitlementTestSuiteWithEmbeddedDB;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementSourceType;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.TenantContext;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedDB {
@@ -24,6 +28,8 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
public void test1() {
try {
+ final LocalDate initialDate = new LocalDate(2013, 8, 7);
+ clock.setDay(initialDate);
final UUID accountId = UUID.randomUUID();
final String externalKey = "externalKey";
final Account account = Mockito.mock(Account.class);
@@ -31,7 +37,29 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
Mockito.when(accountInternalApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(account);
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
- entitlementApi.createBaseEntitlement(accountId, spec, externalKey, callContext);
+
+ final Entitlement entitlement = entitlementApi.createBaseEntitlement(accountId, spec, externalKey, callContext);
+ assertEquals(entitlement.getAccountId(), accountId);
+ assertEquals(entitlement.getExternalKey(), externalKey);
+
+ assertEquals(entitlement.getRequestedEndDate(), initialDate);
+ assertEquals(entitlement.getEffectiveStartDate(), initialDate);
+ assertNull(entitlement.getEffectiveStartDate());
+
+ assertEquals(entitlement.getPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(entitlement.getProduct().getName(), "Shotgun");
+ assertEquals(entitlement.getCurrentPhase().getName(), "shotgun-monthly-trial");
+ assertEquals(entitlement.getPlan().getName(), "shotgun-monthly");
+ assertEquals(entitlement.getProductCategory(), ProductCategory.BASE);
+
+ assertEquals(entitlement.getState(), EntitlementState.ACTIVE);
+ assertEquals(entitlement.getSourceType(), EntitlementSourceType.NATIVE);
+
+ assertEquals(entitlement.getLastActivePlan(), null);
+ assertEquals(entitlement.getLastActivePriceList(), null);
+ assertEquals(entitlement.getLastActiveProduct(), null);
+ assertEquals(entitlement.getLastActiveProductCategory(), null);
+
} catch (EntitlementApiException e) {
Assert.fail("Test failed " + e.getMessage());
} catch (AccountApiException e) {
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
index c6d01b7..05e72d8 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
@@ -30,6 +30,7 @@ import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.entitlement.api.BlockingStateType;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.entitlement.dao.MockBlockingStateDao;
import com.ning.billing.junction.JunctionTestSuiteNoDB;
import com.ning.billing.entitlement.api.BlockingState;
@@ -277,7 +278,7 @@ public class TestBillingApi extends JunctionTestSuiteNoDB {
final PriceList nextPriceList = catalog.findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
final EffectiveSubscriptionInternalEvent t = new MockEffectiveSubscriptionEvent(
- eventId, subId, bunId, then, now, null, null, null, null, SubscriptionState.ACTIVE,
+ eventId, subId, bunId, then, now, null, null, null, null, EntitlementState.ACTIVE,
nextPlan.getName(), nextPhase.getName(),
nextPriceList.getName(), 1L,
SubscriptionBaseTransitionType.CREATE, 1, null, 1L, 2L, null);
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java b/subscription/src/main/java/com/ning/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java
index 888f084..5b1199d 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java
@@ -37,6 +37,7 @@ import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.clock.Clock;
import com.ning.billing.clock.DefaultClock;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionApiBase;
import com.ning.billing.subscription.api.user.DefaultEffectiveSubscriptionEvent;
import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
@@ -111,7 +112,7 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
switch (plan.getProduct().getCategory()) {
case BASE:
if (baseSubscription != null) {
- if (baseSubscription.getState() == SubscriptionState.ACTIVE) {
+ if (baseSubscription.getState() == EntitlementState.ACTIVE) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_BP_EXISTS, bundleId);
} else {
// If we do create on an existing CANCELLED BP, this is equivalent to call recreate on that SubscriptionBase.
@@ -277,7 +278,7 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
}
// If ADDON is cancelled, skip
- if (cur.getState() == SubscriptionState.CANCELLED) {
+ if (cur.getState() == EntitlementState.CANCELLED) {
continue;
}
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/timeline/SubscriptionDataRepair.java b/subscription/src/main/java/com/ning/billing/subscription/api/timeline/SubscriptionDataRepair.java
index eaf759e..1216410 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/timeline/SubscriptionDataRepair.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/timeline/SubscriptionDataRepair.java
@@ -30,6 +30,7 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseApiService;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
@@ -155,7 +156,7 @@ public class SubscriptionDataRepair extends DefaultSubscriptionBase {
return;
}
- final Product baseProduct = (getState() == SubscriptionState.CANCELLED) ?
+ final Product baseProduct = (getState() == EntitlementState.CANCELLED) ?
null : getCurrentPlan().getProduct();
addAddonCancellationIfRequired(addOnSubscriptionInRepair, baseProduct, effectiveDate, context);
}
@@ -167,7 +168,7 @@ public class SubscriptionDataRepair extends DefaultSubscriptionBase {
final Iterator<SubscriptionDataRepair> it = addOnSubscriptionInRepair.iterator();
while (it.hasNext()) {
final SubscriptionDataRepair cur = it.next();
- if (cur.getState() == SubscriptionState.CANCELLED ||
+ if (cur.getState() == EntitlementState.CANCELLED ||
cur.getCategory() != ProductCategory.ADD_ON) {
continue;
}
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java b/subscription/src/main/java/com/ning/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java
index 16e7bd9..ea2cb92 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java
@@ -29,6 +29,7 @@ import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionApiBase;
import com.ning.billing.subscription.api.SubscriptionBaseApiService;
import com.ning.billing.subscription.api.migration.AccountMigrationData.BundleMigrationData;
@@ -218,7 +219,7 @@ public class DefaultSubscriptionBaseTransferApi extends SubscriptionApiBase impl
for (final SubscriptionBaseTimeline cur : bundleBaseTimeline.getSubscriptions()) {
final DefaultSubscriptionBase oldSubscription = (DefaultSubscriptionBase) dao.getSubscriptionFromId(cur.getId(), fromInternalCallContext);
// Skip already cancelled subscriptions
- if (oldSubscription.getState() == SubscriptionState.CANCELLED) {
+ if (oldSubscription.getState() == EntitlementState.CANCELLED) {
continue;
}
final List<ExistingEvent> existingEvents = cur.getExistingEvents();
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultEffectiveSubscriptionEvent.java b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultEffectiveSubscriptionEvent.java
index ed03f52..375d381 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultEffectiveSubscriptionEvent.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultEffectiveSubscriptionEvent.java
@@ -20,6 +20,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
@@ -38,11 +39,11 @@ public class DefaultEffectiveSubscriptionEvent extends DefaultSubscriptionEvent
@JsonProperty("bundleId") final UUID bundleId,
@JsonProperty("requestedTransitionTime") final DateTime requestedTransitionTime,
@JsonProperty("effectiveTransitionTime") final DateTime effectiveTransitionTime,
- @JsonProperty("previousState") final SubscriptionState previousState,
+ @JsonProperty("previousState") final EntitlementState previousState,
@JsonProperty("previousPlan") final String previousPlan,
@JsonProperty("previousPhase") final String previousPhase,
@JsonProperty("previousPriceList") final String previousPriceList,
- @JsonProperty("nextState") final SubscriptionState nextState,
+ @JsonProperty("nextState") final EntitlementState nextState,
@JsonProperty("nextPlan") final String nextPlan,
@JsonProperty("nextPhase") final String nextPhase,
@JsonProperty("nextPriceList") final String nextPriceList,
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultRequestedSubscriptionEvent.java b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultRequestedSubscriptionEvent.java
index d59e5e4..e87cb26 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultRequestedSubscriptionEvent.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultRequestedSubscriptionEvent.java
@@ -20,6 +20,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.events.SubscriptionBaseEvent;
import com.ning.billing.util.events.RequestedSubscriptionInternalEvent;
@@ -35,11 +36,11 @@ public class DefaultRequestedSubscriptionEvent extends DefaultSubscriptionEvent
@JsonProperty("bundleId") final UUID bundleId,
@JsonProperty("requestedTransitionTime") final DateTime requestedTransitionTime,
@JsonProperty("effectiveTransitionTime") final DateTime effectiveTransitionTime,
- @JsonProperty("previousState") final SubscriptionState previousState,
+ @JsonProperty("previousState") final EntitlementState previousState,
@JsonProperty("previousPlan") final String previousPlan,
@JsonProperty("previousPhase") final String previousPhase,
@JsonProperty("previousPriceList") final String previousPriceList,
- @JsonProperty("nextState") final SubscriptionState nextState,
+ @JsonProperty("nextState") final EntitlementState nextState,
@JsonProperty("nextPlan") final String nextPlan,
@JsonProperty("nextPhase") final String nextPhase,
@JsonProperty("nextPriceList") final String nextPriceList,
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBase.java b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBase.java
index 0afaeec..4329d22 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBase.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBase.java
@@ -36,9 +36,12 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
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.clock.Clock;
import com.ning.billing.entitlement.api.BlockingState;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementSourceType;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseApiService;
import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
@@ -138,13 +141,13 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
}
@Override
- public SubscriptionState getState() {
+ public EntitlementState getState() {
return (getPreviousTransition() == null) ? null
: getPreviousTransition().getNextState();
}
@Override
- public SubscriptionSourceType getSourceType() {
+ public EntitlementSourceType getSourceType() {
if (transitions == null) {
return null;
}
@@ -152,11 +155,11 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
switch (initialTransition.getApiEventType()) {
case MIGRATE_BILLING:
case MIGRATE_ENTITLEMENT:
- return SubscriptionSourceType.MIGRATED;
+ return EntitlementSourceType.MIGRATED;
case TRANSFER:
- return SubscriptionSourceType.TRANSFERED;
+ return EntitlementSourceType.TRANSFERRED;
default:
- return SubscriptionSourceType.NATIVE;
+ return EntitlementSourceType.NATIVE;
}
}
@@ -182,7 +185,7 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
@Override
public DateTime getEndDate() {
final SubscriptionBaseTransition latestTransition = getPreviousTransition();
- if (latestTransition.getNextState() == SubscriptionState.CANCELLED) {
+ if (latestTransition.getNextState() == EntitlementState.CANCELLED) {
return latestTransition.getEffectiveTransitionTime();
}
return null;
@@ -257,38 +260,38 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
}
@Override
- public String getLastActiveProductName() {
- if (getState() == SubscriptionState.CANCELLED) {
+ public Product getLastActiveProduct() {
+ if (getState() == EntitlementState.CANCELLED) {
final SubscriptionBaseTransition data = getPreviousTransition();
- return data.getPreviousPlan().getProduct().getName();
+ return data.getPreviousPlan().getProduct();
} else {
- return getCurrentPlan().getProduct().getName();
+ return getCurrentPlan().getProduct();
}
}
@Override
- public String getLastActivePriceListName() {
- if (getState() == SubscriptionState.CANCELLED) {
+ public PriceList getLastActivePriceList() {
+ if (getState() == EntitlementState.CANCELLED) {
final SubscriptionBaseTransition data = getPreviousTransition();
- return data.getPreviousPriceList().getName();
+ return data.getPreviousPriceList();
} else {
- return getCurrentPriceList().getName();
+ return getCurrentPriceList();
}
}
@Override
- public String getLastActiveCategoryName() {
- if (getState() == SubscriptionState.CANCELLED) {
+ public ProductCategory getLastActiveCategory() {
+ if (getState() == EntitlementState.CANCELLED) {
final SubscriptionBaseTransition data = getPreviousTransition();
- return data.getPreviousPlan().getProduct().getCategory().name();
+ return data.getPreviousPlan().getProduct().getCategory();
} else {
- return getCurrentPlan().getProduct().getCategory().name();
+ return getCurrentPlan().getProduct().getCategory();
}
}
@Override
public Plan getLastActivePlan() {
- if (getState() == SubscriptionState.CANCELLED) {
+ if (getState() == EntitlementState.CANCELLED) {
final SubscriptionBaseTransition data = getPreviousTransition();
return data.getPreviousPlan();
} else {
@@ -297,12 +300,12 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
}
@Override
- public String getLastActiveBillingPeriod() {
- if (getState() == SubscriptionState.CANCELLED) {
+ public BillingPeriod getLastActiveBillingPeriod() {
+ if (getState() == EntitlementState.CANCELLED) {
final SubscriptionBaseTransition data = getPreviousTransition();
- return data.getPreviousPlan().getBillingPeriod().name();
+ return data.getPreviousPlan().getBillingPeriod();
} else {
- return getCurrentPlan().getBillingPeriod().name();
+ return getCurrentPlan().getBillingPeriod();
}
}
@@ -534,14 +537,14 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
UUID nextEventId = null;
DateTime nextCreatedDate = null;
- SubscriptionState nextState = null;
+ EntitlementState nextState = null;
String nextPlanName = null;
String nextPhaseName = null;
String nextPriceListName = null;
UUID prevEventId = null;
DateTime prevCreatedDate = null;
- SubscriptionState previousState = null;
+ EntitlementState previousState = null;
PriceList previousPriceList = null;
Plan previousPlan = null;
PlanPhase previousPhase = null;
@@ -585,7 +588,7 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
previousPlan = null;
previousPhase = null;
previousPriceList = null;
- nextState = SubscriptionState.ACTIVE;
+ nextState = EntitlementState.ACTIVE;
nextPlanName = userEV.getEventPlan();
nextPhaseName = userEV.getEventPlanPhase();
nextPriceListName = userEV.getPriceList();
@@ -596,7 +599,7 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
nextPriceListName = userEV.getPriceList();
break;
case CANCEL:
- nextState = SubscriptionState.CANCELLED;
+ nextState = EntitlementState.CANCELLED;
nextPlanName = null;
nextPhaseName = null;
break;
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBaseApiService.java b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBaseApiService.java
index 9430c2e..1c6ee1b 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBaseApiService.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBaseApiService.java
@@ -39,6 +39,7 @@ import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.alignment.PlanAligner;
import com.ning.billing.subscription.alignment.TimedPhase;
import com.ning.billing.subscription.api.SubscriptionBaseApiService;
@@ -99,8 +100,8 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
@Override
public boolean recreatePlan(final DefaultSubscriptionBase subscription, final PlanPhaseSpecifier spec, final DateTime requestedDateWithMs, final CallContext context)
throws SubscriptionBaseApiException {
- final SubscriptionState currentState = subscription.getState();
- if (currentState != null && currentState != SubscriptionState.CANCELLED) {
+ final EntitlementState currentState = subscription.getState();
+ if (currentState != null && currentState != EntitlementState.CANCELLED) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_RECREATE_BAD_STATE, subscription.getId(), currentState);
}
@@ -170,8 +171,8 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
@Override
public boolean cancel(final DefaultSubscriptionBase subscription, final DateTime requestedDateWithMs, final CallContext context) throws SubscriptionBaseApiException {
try {
- final SubscriptionState currentState = subscription.getState();
- if (currentState != SubscriptionState.ACTIVE) {
+ final EntitlementState currentState = subscription.getState();
+ if (currentState != EntitlementState.ACTIVE) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CANCEL_BAD_STATE, subscription.getId(), currentState);
}
final DateTime now = clock.getUTCNow();
@@ -194,8 +195,8 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
@Override
public boolean cancelWithPolicy(final DefaultSubscriptionBase subscription, final DateTime requestedDateWithMs, final BillingActionPolicy policy, final CallContext context) throws SubscriptionBaseApiException {
- final SubscriptionState currentState = subscription.getState();
- if (currentState != SubscriptionState.ACTIVE) {
+ final EntitlementState currentState = subscription.getState();
+ if (currentState != EntitlementState.ACTIVE) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CANCEL_BAD_STATE, subscription.getId(), currentState);
}
final DateTime now = clock.getUTCNow();
@@ -373,7 +374,7 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
return 0;
}
- final Product baseProduct = (baseSubscription.getState() == SubscriptionState.CANCELLED) ? null : baseSubscription.getCurrentPlan().getProduct();
+ final Product baseProduct = (baseSubscription.getState() == EntitlementState.CANCELLED) ? null : baseSubscription.getCurrentPlan().getProduct();
final List<SubscriptionBase> subscriptions = dao.getSubscriptions(baseSubscription.getBundleId(), context);
@@ -382,7 +383,7 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
for (final SubscriptionBase subscription : subscriptions) {
final DefaultSubscriptionBase cur = (DefaultSubscriptionBase) subscription;
- if (cur.getState() == SubscriptionState.CANCELLED ||
+ if (cur.getState() == EntitlementState.CANCELLED ||
cur.getCategory() != ProductCategory.ADD_ON) {
continue;
}
@@ -425,8 +426,8 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
}
private void validateSubscriptionState(final DefaultSubscriptionBase subscription) throws SubscriptionBaseApiException {
- final SubscriptionState currentState = subscription.getState();
- if (currentState != SubscriptionState.ACTIVE) {
+ final EntitlementState currentState = subscription.getState();
+ if (currentState != EntitlementState.ACTIVE) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CHANGE_NON_ACTIVE, subscription.getId(), currentState);
}
if (subscription.isSubscriptionFutureCancelled()) {
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionEvent.java b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionEvent.java
index de67a43..adf5bf2 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionEvent.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionEvent.java
@@ -20,6 +20,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.util.events.BusEventBase;
import com.ning.billing.util.events.SubscriptionInternalEvent;
@@ -36,11 +37,11 @@ public abstract class DefaultSubscriptionEvent extends BusEventBase implements S
private final UUID eventId;
private final DateTime requestedTransitionTime;
private final DateTime effectiveTransitionTime;
- private final SubscriptionState previousState;
+ private final EntitlementState previousState;
private final String previousPriceList;
private final String previousPlan;
private final String previousPhase;
- private final SubscriptionState nextState;
+ private final EntitlementState nextState;
private final String nextPriceList;
private final String nextPlan;
private final String nextPhase;
@@ -80,11 +81,11 @@ public abstract class DefaultSubscriptionEvent extends BusEventBase implements S
@JsonProperty("bundleId") final UUID bundleId,
@JsonProperty("requestedTransitionTime") final DateTime requestedTransitionTime,
@JsonProperty("effectiveTransitionTime") final DateTime effectiveTransitionTime,
- @JsonProperty("previousState") final SubscriptionState previousState,
+ @JsonProperty("previousState") final EntitlementState previousState,
@JsonProperty("previousPlan") final String previousPlan,
@JsonProperty("previousPhase") final String previousPhase,
@JsonProperty("previousPriceList") final String previousPriceList,
- @JsonProperty("nextState") final SubscriptionState nextState,
+ @JsonProperty("nextState") final EntitlementState nextState,
@JsonProperty("nextPlan") final String nextPlan,
@JsonProperty("nextPhase") final String nextPhase,
@JsonProperty("nextPriceList") final String nextPriceList,
@@ -138,7 +139,7 @@ public abstract class DefaultSubscriptionEvent extends BusEventBase implements S
}
@Override
- public SubscriptionState getPreviousState() {
+ public EntitlementState getPreviousState() {
return previousState;
}
@@ -163,7 +164,7 @@ public abstract class DefaultSubscriptionEvent extends BusEventBase implements S
}
@Override
- public SubscriptionState getNextState() {
+ public EntitlementState getNextState() {
return nextState;
}
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransitionData.java b/subscription/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransitionData.java
index 1e0be32..7216940 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransitionData.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/user/SubscriptionBaseTransitionData.java
@@ -23,6 +23,7 @@ import org.joda.time.DateTime;
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.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.events.SubscriptionBaseEvent.EventType;
import com.ning.billing.subscription.events.user.ApiEventType;
@@ -37,7 +38,7 @@ public class SubscriptionBaseTransitionData implements SubscriptionBaseTransitio
private final ApiEventType apiEventType;
private final DateTime requestedTransitionTime;
private final DateTime effectiveTransitionTime;
- private final SubscriptionState previousState;
+ private final EntitlementState previousState;
private final PriceList previousPriceList;
private final UUID previousEventId;
private final DateTime previousEventCreatedDate;
@@ -45,7 +46,7 @@ public class SubscriptionBaseTransitionData implements SubscriptionBaseTransitio
private final PlanPhase previousPhase;
private final UUID nextEventId;
private final DateTime nextEventCreatedDate;
- private final SubscriptionState nextState;
+ private final EntitlementState nextState;
private final PriceList nextPriceList;
private final Plan nextPlan;
private final PlanPhase nextPhase;
@@ -62,13 +63,13 @@ public class SubscriptionBaseTransitionData implements SubscriptionBaseTransitio
final DateTime effectiveTransitionTime,
final UUID previousEventId,
final DateTime previousEventCreatedDate,
- final SubscriptionState previousState,
+ final EntitlementState previousState,
final Plan previousPlan,
final PlanPhase previousPhase,
final PriceList previousPriceList,
final UUID nextEventId,
final DateTime nextEventCreatedDate,
- final SubscriptionState nextState,
+ final EntitlementState nextState,
final Plan nextPlan,
final PlanPhase nextPhase,
final PriceList nextPriceList,
@@ -147,7 +148,7 @@ public class SubscriptionBaseTransitionData implements SubscriptionBaseTransitio
}
@Override
- public SubscriptionState getPreviousState() {
+ public EntitlementState getPreviousState() {
return previousState;
}
@@ -182,7 +183,7 @@ public class SubscriptionBaseTransitionData implements SubscriptionBaseTransitio
}
@Override
- public SubscriptionState getNextState() {
+ public EntitlementState getNextState() {
return nextState;
}
diff --git a/subscription/src/main/java/com/ning/billing/subscription/engine/addon/AddonUtils.java b/subscription/src/main/java/com/ning/billing/subscription/engine/addon/AddonUtils.java
index 3687a05..e930644 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/engine/addon/AddonUtils.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/engine/addon/AddonUtils.java
@@ -23,6 +23,7 @@ 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.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
import com.ning.billing.subscription.exceptions.SubscriptionBaseError;
import com.ning.billing.subscription.api.user.SubscriptionState;
@@ -41,7 +42,7 @@ public class AddonUtils {
public void checkAddonCreationRights(final DefaultSubscriptionBase baseSubscription, final Plan targetAddOnPlan)
throws SubscriptionBaseApiException, CatalogApiException {
- if (baseSubscription.getState() != SubscriptionState.ACTIVE) {
+ if (baseSubscription.getState() != EntitlementState.ACTIVE) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_AO_BP_NON_ACTIVE, targetAddOnPlan.getName());
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/TestEventJson.java b/subscription/src/test/java/com/ning/billing/subscription/api/TestEventJson.java
index 38e42e3..8d1b4ad 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/TestEventJson.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/TestEventJson.java
@@ -23,6 +23,7 @@ import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.GuicyKillbillTestSuiteNoDB;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.timeline.DefaultRepairSubscriptionEvent;
import com.ning.billing.subscription.api.user.DefaultEffectiveSubscriptionEvent;
import com.ning.billing.subscription.api.user.SubscriptionState;
@@ -38,7 +39,7 @@ public class TestEventJson extends GuicyKillbillTestSuiteNoDB {
public void testSubscriptionEvent() throws Exception {
final EffectiveSubscriptionInternalEvent e = new DefaultEffectiveSubscriptionEvent(UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), new DateTime(), new DateTime(),
- SubscriptionState.ACTIVE, "pro", "TRIAL", "DEFAULT", SubscriptionState.CANCELLED, null, null, null, 3L,
+ EntitlementState.ACTIVE, "pro", "TRIAL", "DEFAULT", EntitlementState.CANCELLED, null, null, null, 3L,
SubscriptionBaseTransitionType.CANCEL, 0, new DateTime(), 1L, 2L, null);
final String json = mapper.writeValueAsString(e);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
index fc165c3..0e16f92 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
@@ -31,6 +31,7 @@ import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.Product;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApiException;
@@ -97,7 +98,7 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
assertTrue(testListener.isCompleted(3000));
final SubscriptionBase oldBaseSubscription = subscriptionInternalApi.getBaseSubscription(bundle.getId(), internalCallContext);
- assertTrue(oldBaseSubscription.getState() == SubscriptionState.CANCELLED);
+ assertTrue(oldBaseSubscription.getState() == EntitlementState.CANCELLED);
// The MIGRATE_BILLING event should have been invalidated
assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).size(), 0);
//assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
index 6c610d3..40b6335 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
@@ -59,10 +59,10 @@ public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
final DateTime future = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.CANCEL);
- assertEquals(subscription.getLastActiveProductName(), prod);
- assertEquals(subscription.getLastActivePriceListName(), planSet);
+ assertEquals(subscription.getLastActiveProduct(), prod);
+ assertEquals(subscription.getLastActivePriceList(), planSet);
assertEquals(subscription.getLastActiveBillingPeriod(), term.toString());
- assertEquals(subscription.getLastActiveCategoryName(), "BASE");
+ assertEquals(subscription.getLastActiveCategory(), "BASE");
// CANCEL in trial period to get IMM policy
@@ -70,10 +70,10 @@ public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
currentPhase = subscription.getCurrentPhase();
testListener.isCompleted(3000);
- assertEquals(subscription.getLastActiveProductName(), prod);
- assertEquals(subscription.getLastActivePriceListName(), planSet);
+ assertEquals(subscription.getLastActiveProduct(), prod);
+ assertEquals(subscription.getLastActivePriceList(), planSet);
assertEquals(subscription.getLastActiveBillingPeriod(), term.toString());
- assertEquals(subscription.getLastActiveCategoryName(), "BASE");
+ assertEquals(subscription.getLastActiveCategory(), "BASE");
assertNull(currentPhase);
@@ -116,10 +116,10 @@ public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- assertEquals(subscription.getLastActiveProductName(), prod);
- assertEquals(subscription.getLastActivePriceListName(), planSet);
+ assertEquals(subscription.getLastActiveProduct(), prod);
+ assertEquals(subscription.getLastActivePriceList(), planSet);
assertEquals(subscription.getLastActiveBillingPeriod(), term.toString());
- assertEquals(subscription.getLastActiveCategoryName(), "BASE");
+ assertEquals(subscription.getLastActiveCategory(), "BASE");
// CANCEL
testListener.setNonExpectedMode();
@@ -129,10 +129,10 @@ public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
testListener.reset();
- assertEquals(subscription.getLastActiveProductName(), prod);
- assertEquals(subscription.getLastActivePriceListName(), planSet);
+ assertEquals(subscription.getLastActiveProduct(), prod);
+ assertEquals(subscription.getLastActivePriceList(), planSet);
assertEquals(subscription.getLastActiveBillingPeriod(), term.toString());
- assertEquals(subscription.getLastActiveCategoryName(), "BASE");
+ assertEquals(subscription.getLastActiveCategory(), "BASE");
final DateTime futureEndDate = subscription.getFutureEndDate();
Assert.assertNotNull(futureEndDate);
@@ -150,10 +150,10 @@ public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
assertNull(currentPhase);
testUtil.checkNextPhaseChange(subscription, 0, null);
- assertEquals(subscription.getLastActiveProductName(), prod);
- assertEquals(subscription.getLastActivePriceListName(), planSet);
+ assertEquals(subscription.getLastActiveProduct(), prod);
+ assertEquals(subscription.getLastActivePriceList(), planSet);
assertEquals(subscription.getLastActiveBillingPeriod(), term.toString());
- assertEquals(subscription.getLastActiveCategoryName(), "BASE");
+ assertEquals(subscription.getLastActiveCategory(), "BASE");
assertListenerStatus();
diff --git a/util/src/main/java/com/ning/billing/util/events/SubscriptionInternalEvent.java b/util/src/main/java/com/ning/billing/util/events/SubscriptionInternalEvent.java
index 1a2a0c4..2d71d09 100644
--- a/util/src/main/java/com/ning/billing/util/events/SubscriptionInternalEvent.java
+++ b/util/src/main/java/com/ning/billing/util/events/SubscriptionInternalEvent.java
@@ -20,6 +20,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.user.SubscriptionState;
@@ -38,7 +39,7 @@ public interface SubscriptionInternalEvent extends BusInternalEvent {
DateTime getEffectiveTransitionTime();
- SubscriptionState getPreviousState();
+ EntitlementState getPreviousState();
String getPreviousPlan();
@@ -50,7 +51,7 @@ public interface SubscriptionInternalEvent extends BusInternalEvent {
String getNextPhase();
- SubscriptionState getNextState();
+ EntitlementState getNextState();
String getNextPriceList();
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/junction/DefaultBlockingState.java b/util/src/main/java/com/ning/billing/util/svcapi/junction/DefaultBlockingState.java
index e345e44..a340815 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/junction/DefaultBlockingState.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/junction/DefaultBlockingState.java
@@ -57,8 +57,8 @@ public class DefaultBlockingState extends EntityBase implements BlockingState {
final boolean blockChange,
final boolean blockEntitlement,
final boolean blockBilling,
- final DateTime timestamp,
- final DateTime createDate) {
+ final DateTime createDate,
+ final DateTime updatedDate) {
super(id, createDate, null);
this.blockingId = blockingId;
this.type = type;
@@ -67,7 +67,7 @@ public class DefaultBlockingState extends EntityBase implements BlockingState {
this.blockChange = blockChange;
this.blockEntitlement = blockEntitlement;
this.blockBilling = blockBilling;
- this.timestamp = timestamp;
+ this.timestamp = updatedDate;
}
public DefaultBlockingState(final UUID blockingId,
diff --git a/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java b/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java
index 40c80e1..4658e5a 100644
--- a/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java
+++ b/util/src/test/java/com/ning/billing/mock/MockEffectiveSubscriptionEvent.java
@@ -20,6 +20,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.user.SubscriptionState;
import com.ning.billing.util.events.BusEventBase;
@@ -37,11 +38,11 @@ public class MockEffectiveSubscriptionEvent extends BusEventBase implements Effe
private final UUID eventId;
private final DateTime requestedTransitionTime;
private final DateTime effectiveTransitionTime;
- private final SubscriptionState previousState;
+ private final EntitlementState previousState;
private final String previousPriceList;
private final String previousPlan;
private final String previousPhase;
- private final SubscriptionState nextState;
+ private final EntitlementState nextState;
private final String nextPriceList;
private final String nextPlan;
private final String nextPhase;
@@ -57,11 +58,11 @@ public class MockEffectiveSubscriptionEvent extends BusEventBase implements Effe
@JsonProperty("bundleId") final UUID bundleId,
@JsonProperty("requestedTransitionTime") final DateTime requestedTransitionTime,
@JsonProperty("effectiveTransitionTime") final DateTime effectiveTransitionTime,
- @JsonProperty("previousState") final SubscriptionState previousState,
+ @JsonProperty("previousState") final EntitlementState previousState,
@JsonProperty("previousPlan") final String previousPlan,
@JsonProperty("previousPhase") final String previousPhase,
@JsonProperty("previousPriceList") final String previousPriceList,
- @JsonProperty("nextState") final SubscriptionState nextState,
+ @JsonProperty("nextState") final EntitlementState nextState,
@JsonProperty("nextPlan") final String nextPlan,
@JsonProperty("nextPhase") final String nextPhase,
@JsonProperty("nextPriceList") final String nextPriceList,
@@ -117,7 +118,7 @@ public class MockEffectiveSubscriptionEvent extends BusEventBase implements Effe
@Override
- public SubscriptionState getPreviousState() {
+ public EntitlementState getPreviousState() {
return previousState;
}
@@ -142,7 +143,7 @@ public class MockEffectiveSubscriptionEvent extends BusEventBase implements Effe
}
@Override
- public SubscriptionState getNextState() {
+ public EntitlementState getNextState() {
return nextState;
}
diff --git a/util/src/test/java/com/ning/billing/mock/MockSubscription.java b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
index 6233101..eafc219 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -29,12 +29,13 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
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.Entitlement.EntitlementSourceType;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionBaseTransition;
-import com.ning.billing.subscription.api.user.SubscriptionSourceType;
-import com.ning.billing.subscription.api.user.SubscriptionState;
import com.ning.billing.entitlement.api.BlockingState;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
@@ -45,7 +46,7 @@ public class MockSubscription implements SubscriptionBase {
private final UUID id;
private final UUID bundleId;
- private final SubscriptionState state;
+ private final EntitlementState state;
private Plan plan;
private final PlanPhase phase;
private final DateTime startDate;
@@ -54,14 +55,14 @@ public class MockSubscription implements SubscriptionBase {
public MockSubscription(final UUID id, final UUID bundleId, final Plan plan, final DateTime startDate, final List<EffectiveSubscriptionInternalEvent> transitions) {
this.id = id;
this.bundleId = bundleId;
- this.state = SubscriptionState.ACTIVE;
+ this.state = EntitlementState.ACTIVE;
this.plan = plan;
this.phase = null;
this.startDate = startDate;
this.transitions = transitions;
}
- public MockSubscription(final SubscriptionState state, final Plan plan, final PlanPhase phase) {
+ public MockSubscription(final EntitlementState state, final Plan plan, final PlanPhase phase) {
this.id = UUID.randomUUID();
this.bundleId = UUID.randomUUID();
this.state = state;
@@ -129,7 +130,7 @@ public class MockSubscription implements SubscriptionBase {
}
@Override
- public SubscriptionState getState() {
+ public EntitlementState getState() {
return state;
}
@@ -184,27 +185,27 @@ public class MockSubscription implements SubscriptionBase {
}
@Override
- public SubscriptionSourceType getSourceType() {
+ public EntitlementSourceType getSourceType() {
return sub.getSourceType();
}
@Override
- public String getLastActiveProductName() {
- return sub.getLastActiveProductName();
+ public Product getLastActiveProduct() {
+ return sub.getLastActiveProduct();
}
@Override
- public String getLastActivePriceListName() {
- return sub.getLastActivePriceListName();
+ public PriceList getLastActivePriceList() {
+ return sub.getLastActivePriceList();
}
@Override
- public String getLastActiveCategoryName() {
- return sub.getLastActiveCategoryName();
+ public ProductCategory getLastActiveCategory() {
+ return sub.getLastActiveCategory();
}
@Override
- public String getLastActiveBillingPeriod() {
+ public BillingPeriod getLastActiveBillingPeriod() {
return null;
}