Skip to content

Commit

Permalink
#199: Modify EntitlementContext to pass a list of List<EntitlementSpe…
Browse files Browse the repository at this point in the history
…cifier> to reflect the multiple subscriptions.
  • Loading branch information
Matias Aguero committed Nov 5, 2015
1 parent 075a3cf commit 14bbeab
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 48 deletions.
Expand Up @@ -34,6 +34,8 @@
import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.entitlement.api.DefaultEntitlement;
import org.killbill.billing.entitlement.api.DefaultEntitlementSpecifier;
import org.killbill.billing.entitlement.api.EntitlementSpecifier;
import org.killbill.billing.entitlement.plugin.api.EntitlementContext;
import org.killbill.billing.entitlement.plugin.api.EntitlementPluginApi;
import org.killbill.billing.entitlement.plugin.api.EntitlementPluginApiException;
Expand Down Expand Up @@ -138,25 +140,24 @@ public TestEntitlementPluginApi() {
@Override
public PriorEntitlementResult priorCall(final EntitlementContext entitlementContext, final Iterable<PluginProperty> properties) throws EntitlementPluginApiException {
if (planPhasePriceOverride != null) {
final EntitlementSpecifier entitlementSpecifier = new DefaultEntitlementSpecifier(null, planPhasePriceOverride);
final List<EntitlementSpecifier> entitlementSpecifiers = new ArrayList<EntitlementSpecifier>();
entitlementSpecifiers.add(entitlementSpecifier);

return new PriorEntitlementResult() {
@Override
public boolean isAborted() {
return false;
}

@Override
public PlanPhaseSpecifier getAdjustedPlanPhaseSpecifier() {
return null;
}

@Override
public LocalDate getAdjustedEffectiveDate() {
return null;
}

@Override
public List<PlanPhasePriceOverride> getAdjustedPlanPhasePriceOverride() {
return planPhasePriceOverride;
public List<EntitlementSpecifier> getAdjustedEntitlementSpecifiers() {
return entitlementSpecifiers;
}

@Override
Expand Down
Expand Up @@ -21,7 +21,6 @@
import java.util.List;
import java.util.UUID;

import org.apache.shiro.SecurityUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
Expand Down Expand Up @@ -372,7 +371,6 @@ public Entitlement cancelEntitlementWithDateOverrideBillingPolicy(final LocalDat
getAccountId(),
null,
getBundleId(),
null,
getExternalKey(),
null,
localCancelDate,
Expand Down Expand Up @@ -439,7 +437,6 @@ public Entitlement changePlan(final String productName, final BillingPeriod bill
getAccountId(),
null,
getBundleId(),
null,
getExternalKey(),
null,
null,
Expand Down Expand Up @@ -488,7 +485,6 @@ public Entitlement changePlanWithDate(final String productName, final BillingPer
getAccountId(),
null,
getBundleId(),
null,
getExternalKey(),
null,
localDate,
Expand Down Expand Up @@ -537,7 +533,6 @@ public Entitlement changePlanOverrideBillingPolicy(final String productName, fin
getAccountId(),
null,
getBundleId(),
null,
getExternalKey(),
null,
localDate,
Expand Down
Expand Up @@ -16,6 +16,7 @@

package org.killbill.billing.entitlement.api;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

Expand Down Expand Up @@ -118,13 +119,15 @@ public DefaultEntitlementApi(final PersistentBus eventBus, final InternalCallCon
@Override
public Entitlement createBaseEntitlement(final UUID accountId, final PlanPhaseSpecifier planPhaseSpecifier, final String externalKey, final List<PlanPhasePriceOverride> overrides, final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {

EntitlementSpecifier entitlementSpecifier = new DefaultEntitlementSpecifier(planPhaseSpecifier, overrides);
final List<EntitlementSpecifier> entitlementSpecifierList = new ArrayList<EntitlementSpecifier>();
entitlementSpecifierList.add(entitlementSpecifier);
final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTION,
accountId,
null,
null,
planPhaseSpecifier,
externalKey,
overrides,
entitlementSpecifierList,
effectiveDate,
properties,
callContext);
Expand All @@ -143,7 +146,8 @@ public Entitlement doCall(final EntitlementApi entitlementApi, final Entitlement

final DateTime referenceTime = clock.getUTCNow();
final DateTime requestedDate = dateHelper.fromLocalDateAndReferenceTime(updatedPluginContext.getEffectiveDate(), referenceTime, contextWithValidAccountRecordId);
final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundle.getId(), updatedPluginContext.getPlanPhaseSpecifier(), updatedPluginContext.getPlanPhasePriceOverride(), requestedDate, contextWithValidAccountRecordId);
final EntitlementSpecifier specifier = getFirstEntitlementSpecifier(updatedPluginContext.getEntitlementSpecifiers());
final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundle.getId(), specifier.getPlanPhaseSpecifier(), specifier.getOverrides(), requestedDate, contextWithValidAccountRecordId);

return new DefaultEntitlement(subscription.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
Expand All @@ -156,12 +160,19 @@ public Entitlement doCall(final EntitlementApi entitlementApi, final Entitlement
return pluginExecution.executeWithPlugin(createBaseEntitlementWithPlugin, pluginContext);
}

private EntitlementSpecifier getFirstEntitlementSpecifier(final List<EntitlementSpecifier> entitlementSpecifiers) throws SubscriptionBaseApiException {
if ((entitlementSpecifiers == null) || entitlementSpecifiers.isEmpty()) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_INVALID_ENTITLEMENT_SPECIFIER);
}
return entitlementSpecifiers.get(0);
}

@Override
public Entitlement createBaseEntitlementWithAddOns(final UUID accountId, final String externalKey, final Iterable<EntitlementSpecifier> entitlementSpecifier,
public Entitlement createBaseEntitlementWithAddOns(final UUID accountId, final String externalKey, final Iterable<EntitlementSpecifier> entitlementSpecifiers,
final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext callContext)
throws EntitlementApiException {

final EntitlementSpecifier baseSpecifier = Iterables.tryFind(entitlementSpecifier, new Predicate<EntitlementSpecifier>() {
final EntitlementSpecifier baseSpecifier = Iterables.tryFind(entitlementSpecifiers, new Predicate<EntitlementSpecifier>() {
@Override
public boolean apply(final EntitlementSpecifier specifier) {
return specifier.getPlanPhaseSpecifier() != null && ProductCategory.BASE.equals(specifier.getPlanPhaseSpecifier().getProductCategory());
Expand All @@ -172,13 +183,15 @@ public boolean apply(final EntitlementSpecifier specifier) {
throw new EntitlementApiException(new IllegalArgumentException(), ErrorCode.SUB_CREATE_NO_BP.getCode(), "Missing Base Subscription.");
}

final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTION,
final List<EntitlementSpecifier> entitlementSpecifierList = new ArrayList<EntitlementSpecifier>();
Iterables.addAll(entitlementSpecifierList, entitlementSpecifiers);

final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTIONS_WITH_AO,
accountId,
null,
null,
baseSpecifier.getPlanPhaseSpecifier(),
externalKey,
baseSpecifier.getOverrides(),
entitlementSpecifierList,
effectiveDate,
properties,
callContext);
Expand All @@ -197,7 +210,7 @@ public Entitlement doCall(final EntitlementApi entitlementApi, final Entitlement

final DateTime referenceTime = clock.getUTCNow();
final DateTime requestedDate = dateHelper.fromLocalDateAndReferenceTime(updatedPluginContext.getEffectiveDate(), referenceTime, contextWithValidAccountRecordId);
final SubscriptionBase subscription = subscriptionBaseInternalApi.createBaseSubscriptionWithAddOns(bundle.getId(), entitlementSpecifier, requestedDate, contextWithValidAccountRecordId);
final SubscriptionBase subscription = subscriptionBaseInternalApi.createBaseSubscriptionWithAddOns(bundle.getId(), entitlementSpecifiers, requestedDate, contextWithValidAccountRecordId);

return new DefaultEntitlement(subscription.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
Expand All @@ -216,13 +229,15 @@ public Entitlement doCall(final EntitlementApi entitlementApi, final Entitlement
@Override
public Entitlement addEntitlement(final UUID bundleId, final PlanPhaseSpecifier planPhaseSpecifier, final List<PlanPhasePriceOverride> overrides, final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {

EntitlementSpecifier entitlementSpecifier = new DefaultEntitlementSpecifier(planPhaseSpecifier, overrides);
final List<EntitlementSpecifier> entitlementSpecifierList = new ArrayList<EntitlementSpecifier>();
entitlementSpecifierList.add(entitlementSpecifier);
final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTION,
null,
null,
bundleId,
planPhaseSpecifier,
null,
overrides,
entitlementSpecifierList,
effectiveDate,
properties,
callContext);
Expand All @@ -246,7 +261,8 @@ public Entitlement doCall(final EntitlementApi entitlementApi, final Entitlement

try {
final InternalCallContext context = internalCallContextFactory.createInternalCallContext(callContext);
final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundleId, updatedPluginContext.getPlanPhaseSpecifier(), updatedPluginContext.getPlanPhasePriceOverride(), requestedDate, context);
final EntitlementSpecifier specifier = getFirstEntitlementSpecifier(updatedPluginContext.getEntitlementSpecifiers());
final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundleId, specifier.getPlanPhaseSpecifier(), specifier.getOverrides(), requestedDate, context);

return new DefaultEntitlement(subscription.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
Expand Down Expand Up @@ -371,9 +387,8 @@ public UUID transferEntitlementsOverrideBillingPolicy(final UUID sourceAccountId
sourceAccountId,
destAccountId,
null,
null,
externalKey,
null,
new ArrayList<EntitlementSpecifier>(),
effectiveDate,
properties,
context);
Expand Down

0 comments on commit 14bbeab

Please sign in to comment.