killbill-memoizeit
Changes
subscription/src/main/java/com/ning/billing/subscription/api/SubscriptionBaseApiService.java 3(+2 -1)
subscription/src/main/java/com/ning/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java 5(+0 -5)
subscription/src/main/java/com/ning/billing/subscription/api/user/DefaultSubscriptionBase.java 28(+14 -14)
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 85b0d7e..d7856dc 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
@@ -57,9 +57,6 @@ public interface SubscriptionBase extends Entity, Blockable {
final BillingActionPolicy policy, final CallContext context)
throws SubscriptionBaseApiException;
- public boolean recreate(final PlanPhaseSpecifier spec, final DateTime requestedDate, final CallContext context)
- throws SubscriptionBaseApiException;
-
public UUID getBundleId();
public EntitlementState getState();
diff --git a/subscription/src/main/java/com/ning/billing/subscription/api/SubscriptionBaseApiService.java b/subscription/src/main/java/com/ning/billing/subscription/api/SubscriptionBaseApiService.java
index 2164fae..ff0e37b 100644
--- a/subscription/src/main/java/com/ning/billing/subscription/api/SubscriptionBaseApiService.java
+++ b/subscription/src/main/java/com/ning/billing/subscription/api/SubscriptionBaseApiService.java
@@ -36,7 +36,8 @@ public interface SubscriptionBaseApiService {
CallContext context)
throws SubscriptionBaseApiException;
- public boolean recreatePlan(DefaultSubscriptionBase subscription, PlanPhaseSpecifier spec, DateTime requestedDate, CallContext context)
+ @Deprecated
+ public boolean recreatePlan(final DefaultSubscriptionBase subscription, final PlanPhaseSpecifier spec, final DateTime requestedDateWithMs, final CallContext context)
throws SubscriptionBaseApiException;
public boolean cancel(DefaultSubscriptionBase subscription, DateTime requestedDate, CallContext context)
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 af3bae2..824f22e 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
@@ -113,11 +113,6 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
if (baseSubscription != null) {
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.
- final SubscriptionBase recreatedSubscriptionForApiUse = createSubscriptionForApiUse(baseSubscription);
- recreatedSubscriptionForApiUse.recreate(spec, requestedDate, context.toCallContext());
- return recreatedSubscriptionForApiUse;
}
}
bundleStartDate = requestedDate;
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 8969799..8041933 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
@@ -39,11 +39,10 @@ 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.SubscriptionBaseApiService;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.user.SubscriptionBaseTransitionDataIterator.Kind;
import com.ning.billing.subscription.api.user.SubscriptionBaseTransitionDataIterator.Order;
@@ -209,6 +208,11 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
return null;
}
+ public boolean recreate(final PlanPhaseSpecifier spec, final DateTime requestedDate,
+ final CallContext context) throws SubscriptionBaseApiException {
+ return apiService.recreatePlan(this, spec, requestedDate, context);
+ }
+
@Override
public boolean cancel(final DateTime requestedDate, final CallContext context) throws SubscriptionBaseApiException {
return apiService.cancel(this, requestedDate, context);
@@ -238,12 +242,6 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
}
@Override
- public boolean recreate(final PlanPhaseSpecifier spec, final DateTime requestedDate,
- final CallContext context) throws SubscriptionBaseApiException {
- return apiService.recreatePlan(this, spec, requestedDate, context);
- }
-
- @Override
public SubscriptionBaseTransition getPendingTransition() {
if (transitions == null) {
return null;
@@ -452,11 +450,11 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
}
final SubscriptionBaseTransitionDataIterator it = new SubscriptionBaseTransitionDataIterator(clock,
- transitions,
- Order.DESC_FROM_FUTURE,
- Kind.SUBSCRIPTION,
- Visibility.ALL,
- TimeLimit.PAST_OR_PRESENT_ONLY);
+ transitions,
+ Order.DESC_FROM_FUTURE,
+ Kind.SUBSCRIPTION,
+ Visibility.ALL,
+ TimeLimit.PAST_OR_PRESENT_ONLY);
while (it.hasNext()) {
final SubscriptionBaseTransitionData cur = (SubscriptionBaseTransitionData) it.next();
@@ -479,9 +477,11 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
public DateTime getPlanChangeEffectiveDate(final BillingActionPolicy policy,
final DateTime requestedDate) {
+ // Return requested date to potentially honor date in the past, or NOW
if (policy == BillingActionPolicy.IMMEDIATE) {
- return requestedDate;
+ return requestedDate.compareTo(clock.getUTCNow()) < 0 ? requestedDate : clock.getUTCNow();
}
+
if (policy != BillingActionPolicy.END_OF_TERM) {
throw new SubscriptionBaseError(String.format(
"Unexpected policy type %s", policy.toString()));
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 526db3c..a9977e3 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
@@ -97,6 +97,7 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
return subscription;
}
+ @Deprecated
@Override
public boolean recreatePlan(final DefaultSubscriptionBase subscription, final PlanPhaseSpecifier spec, final DateTime requestedDateWithMs, final CallContext context)
throws SubscriptionBaseApiException {
@@ -411,13 +412,10 @@ public class DefaultSubscriptionBaseApiService implements SubscriptionBaseApiSer
return subscriptionsToBeCancelled.size();
}
+
private void validateRequestedDate(final DefaultSubscriptionBase subscription, final DateTime now, final DateTime requestedDate)
throws SubscriptionBaseApiException {
- if (requestedDate.isAfter(now)) {
- throw new SubscriptionBaseApiException(ErrorCode.SUB_INVALID_REQUESTED_FUTURE_DATE, requestedDate.toString());
- }
-
final SubscriptionBaseTransition previousTransition = subscription.getPreviousTransition();
if (previousTransition != null && previousTransition.getEffectiveTransitionTime().isAfter(requestedDate)) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_INVALID_REQUESTED_DATE,
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
index 7166ab2..8b3d55e 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
@@ -81,21 +81,6 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
}
@Test(groups = "fast")
- public void testRecreateSubscriptionBPNotCancelled() {
- try {
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
- try {
- subscription.recreate(testUtil.getProductSpecifier("Pistol", PriceListSet.DEFAULT_PRICELIST_NAME, BillingPeriod.MONTHLY, null), clock.getUTCNow(), callContext);
- Assert.assertFalse(true);
- } catch (SubscriptionBaseApiException e) {
- assertEquals(e.getCode(), ErrorCode.SUB_RECREATE_BAD_STATE.getCode());
- }
- } catch (Exception e) {
- Assert.fail(e.toString());
- }
- }
-
- @Test(groups = "fast")
public void testCreateSubscriptionAddOnNotAvailable() {
try {
final UUID accountId = UUID.randomUUID();
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 a498cea..8d39a0b 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -104,12 +104,6 @@ public class MockSubscription implements SubscriptionBase {
}
@Override
- public boolean recreate(final PlanPhaseSpecifier spec, final DateTime requestedDate, final CallContext context)
- throws SubscriptionBaseApiException {
- return sub.recreate(spec, requestedDate, context);
- }
-
- @Override
public UUID getId() {
return id;
}