killbill-memoizeit
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java 4(+2 -2)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java 2(+1 -1)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java 15(+14 -1)
invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java 6(+3 -3)
Details
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
index 4945661..bd5458d 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
@@ -96,4 +96,8 @@ public interface Subscription extends Entity, Blockable {
public DateTime getPaidThroughDate();
public ProductCategory getCategory();
+
+ public SubscriptionTransition getPendingTransition();
+
+ public SubscriptionTransition getPreviousTransition();
}
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
new file mode 100644
index 0000000..b53d1ae
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.entitlement.api.user;
+
+import java.util.UUID;
+
+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.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
+
+public interface SubscriptionTransition {
+
+ public UUID getSubscriptionId();
+
+ public UUID getBundleId();
+
+ public SubscriptionState getPreviousState();
+
+ public SubscriptionState getNextState();
+
+ public Plan getPreviousPlan();
+
+ public Plan getNextPlan();
+
+ public PlanPhase getPreviousPhase();
+
+ public PlanPhase getNextPhase();
+
+ public PriceList getPreviousPriceList();
+
+ public PriceList getNextPriceList();
+
+ public DateTime getRequestedTransitionTime();
+
+ public DateTime getEffectiveTransitionTime();
+
+ public SubscriptionTransitionType getTransitionType();
+}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/BeatrixService.java b/beatrix/src/main/java/com/ning/billing/beatrix/BeatrixService.java
new file mode 100644
index 0000000..72f5664
--- /dev/null
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/BeatrixService.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package com.ning.billing.beatrix;
+
+import com.ning.billing.lifecycle.KillbillService;
+
+public class BeatrixService implements KillbillService {
+
+ public static final String BEATRIX_SERVICE_NAME = "beatrix-service";
+
+ @Override
+ public String getName() {
+ return BEATRIX_SERVICE_NAME;
+ }
+
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java
index 12b692a..555b227 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/SubscriptionDataRepair.java
@@ -35,7 +35,7 @@ import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory.SubscriptionBuilder;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.SubscriptionData;
-import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
import com.ning.billing.entitlement.engine.addon.AddonUtils;
import com.ning.billing.entitlement.engine.dao.EntitlementDao;
import com.ning.billing.entitlement.events.EntitlementEvent;
@@ -126,7 +126,7 @@ public class SubscriptionDataRepair extends SubscriptionData {
return;
}
- final SubscriptionTransitionData pendingTransition = getPendingTransitionData();
+ final SubscriptionTransition pendingTransition = getPendingTransition();
if (pendingTransition == null) {
return;
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java
index 1daf3d4..6c85794 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionApiService.java
@@ -364,7 +364,7 @@ public class DefaultSubscriptionApiService implements SubscriptionApiService {
throw new EntitlementUserApiException(ErrorCode.ENT_INVALID_REQUESTED_FUTURE_DATE, requestedDate.toString());
}
- final SubscriptionTransitionData previousTransition = subscription.getPreviousTransitionData();
+ final SubscriptionTransition previousTransition = subscription.getPreviousTransition();
if (previousTransition != null && previousTransition.getEffectiveTransitionTime().isAfter(requestedDate)) {
throw new EntitlementUserApiException(ErrorCode.ENT_INVALID_REQUESTED_DATE,
requestedDate.toString(), previousTransition.getEffectiveTransitionTime());
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index 0119af3..85bf0fc 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -114,8 +114,8 @@ public class SubscriptionData extends EntityBase implements Subscription {
@Override
public SubscriptionState getState() {
- return (getPreviousTransitionData() == null) ? null
- : getPreviousTransitionData().getNextState();
+ return (getPreviousTransition() == null) ? null
+ : getPreviousTransition().getNextState();
}
@Override
@@ -137,26 +137,26 @@ public class SubscriptionData extends EntityBase implements Subscription {
@Override
public PlanPhase getCurrentPhase() {
- return (getPreviousTransitionData() == null) ? null
- : getPreviousTransitionData().getNextPhase();
+ return (getPreviousTransition() == null) ? null
+ : getPreviousTransition().getNextPhase();
}
@Override
public Plan getCurrentPlan() {
- return (getPreviousTransitionData() == null) ? null
- : getPreviousTransitionData().getNextPlan();
+ return (getPreviousTransition() == null) ? null
+ : getPreviousTransition().getNextPlan();
}
@Override
public PriceList getCurrentPriceList() {
- return (getPreviousTransitionData() == null) ? null :
- getPreviousTransitionData().getNextPriceList();
+ return (getPreviousTransition() == null) ? null :
+ getPreviousTransition().getNextPriceList();
}
@Override
public DateTime getEndDate() {
- final SubscriptionTransitionData latestTransition = getPreviousTransitionData();
+ final SubscriptionTransition latestTransition = getPreviousTransition();
if (latestTransition.getNextState() == SubscriptionState.CANCELLED) {
return latestTransition.getEffectiveTransitionTime();
}
@@ -219,7 +219,8 @@ public class SubscriptionData extends EntityBase implements Subscription {
throw new UnsupportedOperationException();
}
- public SubscriptionTransitionData getPendingTransitionData() {
+ @Override
+ public SubscriptionTransition getPendingTransition() {
if (transitions == null) {
return null;
}
@@ -229,12 +230,10 @@ public class SubscriptionData extends EntityBase implements Subscription {
return it.hasNext() ? it.next() : null;
}
-
-
@Override
public String getLastActiveProductName() {
if (getState() == SubscriptionState.CANCELLED) {
- final SubscriptionTransitionData data = getPreviousTransitionData();
+ final SubscriptionTransition data = getPreviousTransition();
return data.getPreviousPlan().getProduct().getName();
} else {
return getCurrentPlan().getProduct().getName();
@@ -244,7 +243,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
@Override
public String getLastActivePriceListName() {
if (getState() == SubscriptionState.CANCELLED) {
- final SubscriptionTransitionData data = getPreviousTransitionData();
+ final SubscriptionTransition data = getPreviousTransition();
return data.getPreviousPriceList().getName();
} else {
return getCurrentPriceList().getName();
@@ -254,7 +253,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
@Override
public String getLastActiveCategoryName() {
if (getState() == SubscriptionState.CANCELLED) {
- final SubscriptionTransitionData data = getPreviousTransitionData();
+ final SubscriptionTransition data = getPreviousTransition();
return data.getPreviousPlan().getProduct().getCategory().name();
} else {
return getCurrentPlan().getProduct().getCategory().name();
@@ -264,7 +263,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
@Override
public Plan getLastActivePlan() {
if (getState() == SubscriptionState.CANCELLED) {
- final SubscriptionTransitionData data = getPreviousTransitionData();
+ final SubscriptionTransition data = getPreviousTransition();
return data.getPreviousPlan();
} else {
return getCurrentPlan();
@@ -274,14 +273,15 @@ public class SubscriptionData extends EntityBase implements Subscription {
@Override
public String getLastActiveBillingPeriod() {
if (getState() == SubscriptionState.CANCELLED) {
- final SubscriptionTransitionData data = getPreviousTransitionData();
+ final SubscriptionTransition data = getPreviousTransition();
return data.getPreviousPlan().getBillingPeriod().name();
} else {
return getCurrentPlan().getBillingPeriod().name();
}
}
- protected SubscriptionTransitionData getPreviousTransitionData() {
+ @Override
+ public SubscriptionTransition getPreviousTransition() {
if (transitions == null) {
return null;
}
@@ -581,4 +581,6 @@ public class SubscriptionData extends EntityBase implements Subscription {
previousPriceList = nextPriceList;
}
}
+
+
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
index d3707fa..cf8752c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
@@ -29,7 +29,7 @@ import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.entitlement.exceptions.EntitlementError;
-public class SubscriptionTransitionData /* implements SubscriptionEvent */ {
+public class SubscriptionTransitionData implements SubscriptionTransition {
private final Long totalOrdering;
private final UUID subscriptionId;
private final UUID bundleId;
@@ -116,42 +116,52 @@ public class SubscriptionTransitionData /* implements SubscriptionEvent */ {
return eventId;
}
+ @Override
public UUID getSubscriptionId() {
return subscriptionId;
}
+ @Override
public UUID getBundleId() {
return bundleId;
}
+ @Override
public SubscriptionState getPreviousState() {
return previousState;
}
+ @Override
public Plan getPreviousPlan() {
return previousPlan;
}
+ @Override
public PlanPhase getPreviousPhase() {
return previousPhase;
}
+ @Override
public Plan getNextPlan() {
return nextPlan;
}
+ @Override
public PlanPhase getNextPhase() {
return nextPhase;
}
+ @Override
public SubscriptionState getNextState() {
return nextState;
}
+ @Override
public PriceList getPreviousPriceList() {
return previousPriceList;
}
+ @Override
public PriceList getNextPriceList() {
return nextPriceList;
}
@@ -164,6 +174,7 @@ public class SubscriptionTransitionData /* implements SubscriptionEvent */ {
return remainingEventsForUserOperation;
}
+ @Override
public SubscriptionTransitionType getTransitionType() {
return toSubscriptionTransitionType(eventType, apiEventType);
}
@@ -179,10 +190,12 @@ public class SubscriptionTransitionData /* implements SubscriptionEvent */ {
}
}
+ @Override
public DateTime getRequestedTransitionTime() {
return requestedTransitionTime;
}
+ @Override
public DateTime getEffectiveTransitionTime() {
return effectiveTransitionTime;
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
index 88a7895..f36d904 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
@@ -132,7 +132,7 @@ public class TestTransfer extends TestApiBase {
// CREATE BP
final Subscription baseSubscription = createSubscription(baseProduct, baseTerm, basePriceList);
- final DateTime evergreenPhaseDate = ((SubscriptionData) baseSubscription).getPendingTransitionData().getEffectiveTransitionTime();
+ final DateTime evergreenPhaseDate = ((SubscriptionData) baseSubscription).getPendingTransition().getEffectiveTransitionTime();
// MOVE A LITTLE, STILL IN TRIAL
clock.addDays(20);
@@ -186,7 +186,7 @@ public class TestTransfer extends TestApiBase {
entitlementInternalApi.setChargedThroughDate(baseSubscription.getId(), ctd.toLocalDate(), internalCallContext);
- final DateTime evergreenPhaseDate = ((SubscriptionData) baseSubscription).getPendingTransitionData().getEffectiveTransitionTime();
+ final DateTime evergreenPhaseDate = ((SubscriptionData) baseSubscription).getPendingTransition().getEffectiveTransitionTime();
// MOVE A LITTLE, STILL IN TRIAL
clock.addDays(20);
@@ -344,8 +344,8 @@ public class TestTransfer extends TestApiBase {
assertEquals(newPlan.getProduct().getName(), newBaseProduct1);
assertEquals(newBaseSubscriptionWithCtd.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertNotNull(((SubscriptionData) newBaseSubscriptionWithCtd).getPendingTransitionData());
- assertEquals(((SubscriptionData) newBaseSubscriptionWithCtd).getPendingTransitionData().getEffectiveTransitionTime(), newCtd);
+ assertNotNull(((SubscriptionData) newBaseSubscriptionWithCtd).getPendingTransition());
+ assertEquals(((SubscriptionData) newBaseSubscriptionWithCtd).getPendingTransition().getEffectiveTransitionTime(), newCtd);
}
@Test(groups = "slow")
@@ -403,15 +403,15 @@ public class TestTransfer extends TestApiBase {
if (curProduct.getName().equals(baseProduct)) {
foundBP = true;
assertTrue(((SubscriptionData) cur).getAlignStartDate().compareTo(((SubscriptionData) baseSubscription).getAlignStartDate()) == 0);
- assertNull(((SubscriptionData) cur).getPendingTransitionData());
+ assertNull(((SubscriptionData) cur).getPendingTransition());
} else if (curProduct.getName().equals(aoProduct1)) {
foundAO1 = true;
assertTrue(((SubscriptionData) cur).getAlignStartDate().compareTo((aoSubscription1).getAlignStartDate()) == 0);
- assertNull(((SubscriptionData) cur).getPendingTransitionData());
+ assertNull(((SubscriptionData) cur).getPendingTransition());
} else if (curProduct.getName().equals(aoProduct2)) {
foundAO2 = true;
assertTrue(((SubscriptionData) cur).getAlignStartDate().compareTo((aoSubscription2).getAlignStartDate()) == 0);
- assertNotNull(((SubscriptionData) cur).getPendingTransitionData());
+ assertNotNull(((SubscriptionData) cur).getPendingTransition());
} else {
Assert.fail("Unexpected product " + curProduct.getName());
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java
index ab69006..2421ad5 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java
@@ -361,7 +361,7 @@ public class TestUserApiAddOn extends TestApiBase {
assertEquals(aoSubscription.getBundleStartDate(), baseSubscription.getBundleStartDate());
// CHECK next AO PHASE EVENT IS INDEED A MONTH AFTER BP STARTED => BUNDLE ALIGNMENT
- SubscriptionTransitionData aoPendingTranstion = aoSubscription.getPendingTransitionData();
+ SubscriptionTransition aoPendingTranstion = aoSubscription.getPendingTransition();
if (expAlignement == PlanAlignmentCreate.START_OF_BUNDLE) {
assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), baseSubscription.getStartDate().plusMonths(1));
} else {
@@ -392,7 +392,7 @@ public class TestUserApiAddOn extends TestApiBase {
assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.EVERGREEN);
aoSubscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(aoSubscription.getId(), callContext);
- aoPendingTranstion = aoSubscription.getPendingTransitionData();
+ aoPendingTranstion = aoSubscription.getPendingTransition();
assertNull(aoPendingTranstion);
} catch (EntitlementUserApiException e) {
Assert.fail(e.getMessage());
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
index adff09c..349d57a 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
@@ -458,7 +458,7 @@ public abstract class TestUserApiChangePlan extends TestApiBase {
subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId(), callContext);
final DateTime expectedNextPhaseDate = subscription.getStartDate().plusDays(30).plusMonths(6);
- final SubscriptionTransitionData nextPhase = subscription.getPendingTransitionData();
+ final SubscriptionTransition nextPhase = subscription.getPendingTransition();
final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index b1fe43b..21f1545 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -130,6 +130,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
@Override
public Invoice triggerInvoiceGeneration(final UUID accountId, final LocalDate targetDate, final boolean dryRun,
final CallContext context) throws InvoiceApiException {
+
final Account account;
try {
account = accountUserApi.getAccountById(accountId, internalCallContextFactory.createInternalTenantContext(context));
@@ -137,8 +138,10 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
throw new InvoiceApiException(e, ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_ID, e.toString());
}
+ // API_FIX Could we avoid the first call to createInternalTenantContext
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(accountId, context);
final DateTime processingDateTime = targetDate.toDateTimeAtCurrentTime(account.getTimeZone());
- final Invoice result = dispatcher.processAccount(accountId, processingDateTime, dryRun, context);
+ final Invoice result = dispatcher.processAccount(accountId, processingDateTime, dryRun, internalContext);
if (result == null) {
throw new InvoiceApiException(ErrorCode.INVOICE_NOTHING_TO_DO, accountId, targetDate);
} else {
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
index 4c8ba26..fa8a35a 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -46,7 +46,6 @@ import com.ning.billing.invoice.generator.InvoiceDateUtils;
import com.ning.billing.invoice.generator.InvoiceGenerator;
import com.ning.billing.invoice.model.FixedPriceInvoiceItem;
import com.ning.billing.invoice.model.RecurringInvoiceItem;
-import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.clock.Clock;
@@ -107,20 +106,20 @@ public class InvoiceDispatcher {
}
public void processSubscription(final EffectiveSubscriptionInternalEvent transition,
- final CallContext context) throws InvoiceApiException {
+ final InternalCallContext context) throws InvoiceApiException {
final UUID subscriptionId = transition.getSubscriptionId();
final DateTime targetDate = transition.getEffectiveTransitionTime();
log.info("Got subscription transition: type: " + transition.getTransitionType().toString() + "; id: " + subscriptionId.toString() + "; targetDate: " + targetDate.toString());
processSubscription(subscriptionId, targetDate, context);
}
- public void processSubscription(final UUID subscriptionId, final DateTime targetDate, final CallContext context) throws InvoiceApiException {
+ public void processSubscription(final UUID subscriptionId, final DateTime targetDate, final InternalCallContext context) throws InvoiceApiException {
try {
if (subscriptionId == null) {
log.error("Failed handling entitlement change.", new InvoiceApiException(ErrorCode.INVOICE_INVALID_TRANSITION));
return;
}
- final UUID accountId = entitlementApi.getAccountIdFromSubscriptionId(subscriptionId, internalCallContextFactory.createInternalTenantContext(context));
+ final UUID accountId = entitlementApi.getAccountIdFromSubscriptionId(subscriptionId, context);
processAccount(accountId, targetDate, false, context);
} catch (EntitlementUserApiException e) {
log.error("Failed handling entitlement change.",
@@ -129,7 +128,7 @@ public class InvoiceDispatcher {
}
public Invoice processAccount(final UUID accountId, final DateTime targetDate,
- final boolean dryRun, final CallContext context) throws InvoiceApiException {
+ final boolean dryRun, final InternalCallContext context) throws InvoiceApiException {
GlobalLock lock = null;
try {
lock = locker.lockWithNumberOfTries(LockerType.ACCOUNT_FOR_INVOICE_PAYMENTS, accountId.toString(), NB_LOCK_TRY);
@@ -148,18 +147,16 @@ public class InvoiceDispatcher {
}
private Invoice processAccountWithLock(final UUID accountId, final DateTime targetDateTime,
- final boolean dryRun, final CallContext context) throws InvoiceApiException {
+ final boolean dryRun, final InternalCallContext context) throws InvoiceApiException {
try {
- final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(accountId, context);
-
// Make sure to first set the BCD if needed then get the account object (to have the BCD set)
- final BillingEventSet billingEvents = billingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId, internalCallContext);
+ final BillingEventSet billingEvents = billingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId, context);
- final Account account = accountApi.getAccountById(accountId, internalCallContext);
+ final Account account = accountApi.getAccountById(accountId, context);
List<Invoice> invoices = new ArrayList<Invoice>();
if (!billingEvents.isAccountAutoInvoiceOff()) {
- invoices = invoiceDao.getInvoicesByAccount(accountId, internalCallContextFactory.createInternalTenantContext(context)); //no need to fetch, invoicing is off on this account
+ invoices = invoiceDao.getInvoicesByAccount(accountId, context); //no need to fetch, invoicing is off on this account
}
final Currency targetCurrency = account.getCurrency();
@@ -172,8 +169,8 @@ public class InvoiceDispatcher {
log.info("Generated null invoice.");
if (!dryRun) {
final BusInternalEvent event = new DefaultNullInvoiceEvent(accountId, clock.getUTCToday(), context.getUserToken(),
- internalCallContext.getAccountRecordId(), internalCallContext.getTenantRecordId());
- postEvent(event, accountId, internalCallContext);
+ context.getAccountRecordId(), context.getTenantRecordId());
+ postEvent(event, accountId, context);
}
} else {
log.info("Generated invoice {} with {} items.", invoice.getId().toString(), invoice.getNumberOfItems());
@@ -186,7 +183,7 @@ public class InvoiceDispatcher {
}
}).size() > 0;
- invoiceDao.create(invoice, account.getBillCycleDay().getDayOfMonthUTC(), isRealInvoiceWithItems, internalCallContext);
+ invoiceDao.create(invoice, account.getBillCycleDay().getDayOfMonthUTC(), isRealInvoiceWithItems, context);
final List<InvoiceItem> fixedPriceInvoiceItems = invoice.getInvoiceItems(FixedPriceInvoiceItem.class);
final List<InvoiceItem> recurringInvoiceItems = invoice.getInvoiceItems(RecurringInvoiceItem.class);
@@ -195,18 +192,19 @@ public class InvoiceDispatcher {
final InvoiceCreationInternalEvent event = new DefaultInvoiceCreationEvent(invoice.getId(), invoice.getAccountId(),
invoice.getBalance(), invoice.getCurrency(),
context.getUserToken(),
- internalCallContext.getAccountRecordId(),
- internalCallContext.getTenantRecordId());
+ context.getAccountRecordId(),
+ context.getTenantRecordId());
if (isRealInvoiceWithItems) {
- postEvent(event, accountId, internalCallContext);
+ postEvent(event, accountId, context);
}
}
}
if (account.isNotifiedForInvoices() && invoice != null && !dryRun) {
// Need to re-hydrate the invoice object to get the invoice number (record id)
- invoiceNotifier.notify(account, invoiceDao.getById(invoice.getId(), internalCallContext), context);
+ // API_FIX InvoiceNotifier public API?
+ invoiceNotifier.notify(account, invoiceDao.getById(invoice.getId(), context), context.toTenantContext());
}
return invoice;
@@ -220,7 +218,7 @@ public class InvoiceDispatcher {
final DateTimeZone accountTimeZone,
final Collection<InvoiceItem> fixedPriceItems,
final Collection<InvoiceItem> recurringItems,
- final CallContext context) {
+ final InternalCallContext context) {
final Map<UUID, LocalDate> chargeThroughDates = new HashMap<UUID, LocalDate>();
addInvoiceItemsToChargeThroughDates(billCycleDay, accountTimeZone, chargeThroughDates, fixedPriceItems);
addInvoiceItemsToChargeThroughDates(billCycleDay, accountTimeZone, chargeThroughDates, recurringItems);
@@ -229,7 +227,7 @@ public class InvoiceDispatcher {
if (subscriptionId != null) {
final LocalDate chargeThroughDate = chargeThroughDates.get(subscriptionId);
log.info("Setting CTD for subscription {} to {}", subscriptionId.toString(), chargeThroughDate.toString());
- entitlementApi.setChargedThroughDate(subscriptionId, chargeThroughDate, internalCallContextFactory.createInternalCallContext(context));
+ entitlementApi.setChargedThroughDate(subscriptionId, chargeThroughDate, context);
}
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
index 9adeb07..e101e47 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceListener.java
@@ -24,9 +24,9 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.invoice.api.InvoiceApiException;
-import com.ning.billing.util.callcontext.CallContext;
-import com.ning.billing.util.callcontext.CallContextFactory;
import com.ning.billing.util.callcontext.CallOrigin;
+import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
import com.ning.billing.util.events.RepairEntitlementInternalEvent;
@@ -38,19 +38,18 @@ public class InvoiceListener {
private static final Logger log = LoggerFactory.getLogger(InvoiceListener.class);
private final InvoiceDispatcher dispatcher;
- private final CallContextFactory factory;
+ private final InternalCallContextFactory internalCallContextFactory;
@Inject
- public InvoiceListener(final CallContextFactory factory, final InvoiceDispatcher dispatcher) {
+ public InvoiceListener(final InternalCallContextFactory internalCallContextFactory, final InvoiceDispatcher dispatcher) {
this.dispatcher = dispatcher;
- this.factory = factory;
+ this.internalCallContextFactory = internalCallContextFactory;
}
@Subscribe
public void handleRepairEntitlementEvent(final RepairEntitlementInternalEvent repairEvent) {
try {
- // TODO retrieve tenantId?
- final CallContext context = factory.createCallContext(null, "RepairBundle", CallOrigin.INTERNAL, UserType.SYSTEM, repairEvent.getUserToken());
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(repairEvent.getTenantRecordId(), repairEvent.getAccountRecordId(), "RepairBundle", CallOrigin.INTERNAL, UserType.SYSTEM, repairEvent.getUserToken());
dispatcher.processAccount(repairEvent.getAccountId(), repairEvent.getEffectiveDate(), false, context);
} catch (InvoiceApiException e) {
log.error(e.getMessage());
@@ -67,19 +66,16 @@ public class InvoiceListener {
|| transition.getRemainingEventsForUserOperation() > 0) {
return;
}
-
- // TODO retrieve tenantId?
- final CallContext context = factory.createCallContext(null, "Transition", CallOrigin.INTERNAL, UserType.SYSTEM, transition.getUserToken());
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(transition.getTenantRecordId(), transition.getAccountRecordId(), "Transition", CallOrigin.INTERNAL, UserType.SYSTEM, transition.getUserToken());
dispatcher.processSubscription(transition, context);
} catch (InvoiceApiException e) {
log.error(e.getMessage());
}
}
- public void handleNextBillingDateEvent(final UUID subscriptionId, final DateTime eventDateTime) {
+ public void handleNextBillingDateEvent(final UUID subscriptionId, final DateTime eventDateTime, final Long accountRecordId, final Long tenantRecordId) {
try {
- // TODO retrieve tenantId?
- final CallContext context = factory.createCallContext(null, "Next Billing Date", CallOrigin.INTERNAL, UserType.SYSTEM);
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(tenantRecordId, accountRecordId, "Next Billing Date", CallOrigin.INTERNAL, UserType.SYSTEM, null);
dispatcher.processSubscription(subscriptionId, eventDateTime, context);
} catch (InvoiceApiException e) {
log.error(e.getMessage());
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
index e4a72a6..7e1ae49 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
@@ -95,7 +95,7 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier {
if (subscription == null) {
log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")");
} else {
- processEvent(key.getUuidKey(), eventDate);
+ processEvent(key.getUuidKey(), eventDate, accountRecordId, tenantRecordId);
}
} catch (EntitlementUserApiException e) {
log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")", e);
@@ -125,7 +125,7 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier {
}
}
- private void processEvent(final UUID subscriptionId, final DateTime eventDateTime) {
- listener.handleNextBillingDateEvent(subscriptionId, eventDateTime);
+ private void processEvent(final UUID subscriptionId, final DateTime eventDateTime, final Long accountRecordId, final Long tenantRecordId) {
+ listener.handleNextBillingDateEvent(subscriptionId, eventDateTime, accountRecordId, tenantRecordId);
}
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java b/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
index ab645bd..714036b 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/TagHandler.java
@@ -21,9 +21,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ning.billing.invoice.api.InvoiceApiException;
-import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.CallOrigin;
-import com.ning.billing.util.callcontext.DefaultCallContext;
+import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.dao.ObjectType;
@@ -39,26 +39,28 @@ public class TagHandler {
private final Clock clock;
private final InvoiceDispatcher dispatcher;
+ private final InternalCallContextFactory internalCallContextFactory;
@Inject
public TagHandler(final Clock clock,
- final InvoiceDispatcher dispatcher) {
+ final InvoiceDispatcher dispatcher,
+ final InternalCallContextFactory internalCallContextFactory) {
this.clock = clock;
this.dispatcher = dispatcher;
+ this.internalCallContextFactory = internalCallContextFactory;
}
@Subscribe
public void process_AUTO_INVOICING_OFF_removal(final ControlTagDeletionInternalEvent event) {
if (event.getTagDefinition().getName().equals(ControlTagType.AUTO_INVOICING_OFF.toString()) && event.getObjectType() == ObjectType.ACCOUNT) {
final UUID accountId = event.getObjectId();
- processUnpaid_AUTO_INVOICING_OFF_invoices(accountId, event.getUserToken());
+ final InternalCallContext context = internalCallContextFactory.createInternalCallContext(event.getTenantRecordId(), event.getAccountRecordId(), "InvoiceTagHandler", CallOrigin.INTERNAL, UserType.SYSTEM, event.getUserToken());
+ processUnpaid_AUTO_INVOICING_OFF_invoices(accountId, context);
}
}
- private void processUnpaid_AUTO_INVOICING_OFF_invoices(final UUID accountId, final UUID userToken) {
+ private void processUnpaid_AUTO_INVOICING_OFF_invoices(final UUID accountId, final InternalCallContext context) {
try {
- // TODO retrieve tenantId?
- final CallContext context = new DefaultCallContext(null, "InvoiceTagHandler", CallOrigin.INTERNAL, UserType.SYSTEM, userToken, clock);
dispatcher.processAccount(accountId, clock.getUTCNow(), false, context);
} catch (InvoiceApiException e) {
log.warn(String.format("Failed to process process removal AUTO_INVOICING_OFF for account %s", accountId), e);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/migration/InvoiceApiTestBase.java b/invoice/src/test/java/com/ning/billing/invoice/api/migration/InvoiceApiTestBase.java
index ec5c31d..6f6d465 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/migration/InvoiceApiTestBase.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/migration/InvoiceApiTestBase.java
@@ -143,13 +143,13 @@ public abstract class InvoiceApiTestBase extends InvoicingTestBase {
invoiceDao, invoiceNotifier, locker, busService.getBus(),
clock, internalCallContextFactory);
- Invoice invoice = dispatcher.processAccount(account.getId(), targetDate, true, callContext);
+ Invoice invoice = dispatcher.processAccount(account.getId(), targetDate, true, internalCallContext);
Assert.assertNotNull(invoice);
List<Invoice> invoices = invoiceDao.getInvoicesByAccount(account.getId(), internalCallContext);
Assert.assertEquals(invoices.size(), 0);
- invoice = dispatcher.processAccount(account.getId(), targetDate, false, callContext);
+ invoice = dispatcher.processAccount(account.getId(), targetDate, false, internalCallContext);
Assert.assertNotNull(invoice);
invoices = invoiceDao.getInvoicesByAccount(account.getId(), internalCallContext);
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index 1dec97e..d151973 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -51,8 +51,6 @@ import com.ning.billing.invoice.glue.InvoiceModuleWithMocks;
import com.ning.billing.invoice.template.formatters.DefaultInvoiceFormatterFactory;
import com.ning.billing.lifecycle.KillbillService;
import com.ning.billing.mock.glue.MockJunctionModule;
-import com.ning.billing.util.callcontext.CallContextFactory;
-import com.ning.billing.util.callcontext.DefaultCallContextFactory;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.clock.Clock;
@@ -88,13 +86,13 @@ public class TestNextBillingDateNotifier extends InvoiceTestSuiteWithEmbeddedDB
int eventCount = 0;
UUID latestSubscriptionId = null;
- public InvoiceListenerMock(final CallContextFactory factory, final InvoiceDispatcher dispatcher) {
- super(factory, dispatcher);
+ public InvoiceListenerMock(final InternalCallContextFactory internalCallContextFactory, final InvoiceDispatcher dispatcher) {
+ super(internalCallContextFactory, dispatcher);
}
@Override
public void handleNextBillingDateEvent(final UUID subscriptionId,
- final DateTime eventDateTime) {
+ final DateTime eventDateTime, final Long accountRecordId, final Long tenantRecordId) {
eventCount++;
latestSubscriptionId = subscriptionId;
}
@@ -160,9 +158,8 @@ public class TestNextBillingDateNotifier extends InvoiceTestSuiteWithEmbeddedDB
final EntitlementInternalApi entitlementUserApi = Mockito.mock(EntitlementInternalApi.class);
Mockito.when(entitlementUserApi.getSubscriptionFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
- final CallContextFactory factory = new DefaultCallContextFactory(clock);
- listener = new InvoiceListenerMock(factory, dispatcher);
internalCallContextFactory = g.getInstance(InternalCallContextFactory.class);
+ listener = new InvoiceListenerMock(internalCallContextFactory, dispatcher);
notifier = new DefaultNextBillingDateNotifier(notificationQueueService, g.getInstance(InvoiceConfig.class), entitlementUserApi,
listener, internalCallContextFactory);
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
index fd40668..87de546 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/TestInvoiceDispatcher.java
@@ -170,7 +170,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
invoiceNotifier, locker, busService.getBus(),
clock, new InternalCallContextFactory(getMysqlTestingHelper().getDBI(), clock));
- Invoice invoice = dispatcher.processAccount(accountId, target, true, callContext);
+ Invoice invoice = dispatcher.processAccount(accountId, target, true, internalCallContext);
Assert.assertNotNull(invoice);
final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(callContext);
@@ -178,14 +178,14 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
Assert.assertEquals(invoices.size(), 0);
// Try it again to double check
- invoice = dispatcher.processAccount(accountId, target, true, callContext);
+ invoice = dispatcher.processAccount(accountId, target, true, internalCallContext);
Assert.assertNotNull(invoice);
invoices = invoiceDao.getInvoicesByAccount(accountId, internalTenantContext);
Assert.assertEquals(invoices.size(), 0);
// This time no dry run
- invoice = dispatcher.processAccount(accountId, target, false, callContext);
+ invoice = dispatcher.processAccount(accountId, target, false, internalCallContext);
Assert.assertNotNull(invoice);
invoices = invoiceDao.getInvoicesByAccount(accountId, internalTenantContext);
@@ -224,7 +224,7 @@ public class TestInvoiceDispatcher extends InvoicingTestBase {
invoiceNotifier, locker, busService.getBus(),
clock, internalCallContextFactory);
- final Invoice invoice = dispatcher.processAccount(account.getId(), new DateTime("2012-07-30T00:00:00.000Z"), false, callContext);
+ final Invoice invoice = dispatcher.processAccount(account.getId(), new DateTime("2012-07-30T00:00:00.000Z"), false, internalCallContext);
Assert.assertNotNull(invoice);
final List<InvoiceItem> invoiceItems = invoice.getInvoiceItems();
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
index 2344062..c69fe3e 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
@@ -29,6 +29,7 @@ import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
import com.ning.billing.junction.api.BlockingApiException;
import com.ning.billing.junction.api.BlockingState;
import com.ning.billing.junction.block.BlockingChecker;
@@ -209,6 +210,16 @@ public class BlockingSubscription implements Subscription {
return subscription.getLastActiveBillingPeriod();
}
+ @Override
+ public SubscriptionTransition getPendingTransition() {
+ return subscription.getPendingTransition();
+ }
+
+ @Override
+ public SubscriptionTransition getPreviousTransition() {
+ return subscription.getPendingTransition();
+ }
+
public Subscription getDelegateSubscription() {
return subscription;
}
diff --git a/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java b/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java
index e2a67e2..af49464 100644
--- a/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java
+++ b/payment/src/main/java/com/ning/billing/payment/bus/InvoiceHandler.java
@@ -24,11 +24,9 @@ import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.core.PaymentProcessor;
-import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.CallOrigin;
-import com.ning.billing.util.callcontext.DefaultCallContext;
+import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
-import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.callcontext.UserType;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.events.InvoiceCreationInternalEvent;
@@ -65,11 +63,9 @@ public class InvoiceHandler {
final Account account;
try {
- // API_FIX
- final CallContext context = new DefaultCallContext(null, "PaymentRequestProcessor", CallOrigin.INTERNAL, UserType.SYSTEM, event.getUserToken(), clock);
- final InternalTenantContext internalContext = internalCallContextFactory.createInternalCallContext(event.getAccountId(), context);
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(event.getTenantRecordId(), event.getAccountRecordId(), "PaymentRequestProcessor", CallOrigin.INTERNAL, UserType.SYSTEM, event.getUserToken());
account = accountApi.getAccountById(event.getAccountId(), internalContext);
- paymentProcessor.createPayment(account, event.getInvoiceId(), null, internalCallContextFactory.createInternalCallContext(event.getAccountId(), context), false, false);
+ paymentProcessor.createPayment(account, event.getInvoiceId(), null, internalContext, false, false);
} catch (AccountApiException e) {
log.error("Failed to process invoice payment", e);
} catch (PaymentApiException e) {
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 6974621..c1127cd 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -32,6 +32,7 @@ import com.ning.billing.catalog.api.PriceList;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
import com.ning.billing.junction.api.BlockingState;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
@@ -213,4 +214,16 @@ public class MockSubscription implements Subscription {
public void setPlan(final Plan plan) {
this.plan = plan;
}
+
+ @Override
+ public SubscriptionTransition getPendingTransition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SubscriptionTransition getPreviousTransition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}