Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
- Updating methods to return the new SubscriptionBaseWithAddOns object
- Other fixes during code review
  • Loading branch information
Javier Gómez committed Nov 9, 2016
1 parent 54e695b commit 8462e60
Show file tree
Hide file tree
Showing 11 changed files with 211 additions and 63 deletions.
Expand Up @@ -40,6 +40,7 @@
import org.killbill.billing.invoice.api.DryRunArguments;
import org.killbill.billing.subscription.api.user.SubscriptionBaseApiException;
import org.killbill.billing.subscription.api.user.SubscriptionBaseBundle;
import org.killbill.billing.subscription.api.user.SubscriptionBaseWithAddOns;
import org.killbill.billing.util.entity.Pagination;

public interface SubscriptionBaseInternalApi {
Expand All @@ -48,8 +49,8 @@ public interface SubscriptionBaseInternalApi {
public SubscriptionBase createSubscription(UUID bundleId, PlanPhaseSpecifier spec, List<PlanPhasePriceOverride> overrides, DateTime requestedDateWithMs,
final boolean isMigrated, InternalCallContext context) throws SubscriptionBaseApiException;

public List<SubscriptionBase> createBaseSubscriptionsWithAddOns(UUID accountId, Iterable<BaseEntitlementWithAddOnsSpecifier> baseEntitlementWithAddOnsSpecifier,
InternalCallContext contextWithValidAccountRecordId) throws SubscriptionBaseApiException;
public List<SubscriptionBaseWithAddOns> createBaseSubscriptionsWithAddOns(UUID accountId, Iterable<BaseEntitlementWithAddOnsSpecifier> baseEntitlementWithAddOnsSpecifier,
InternalCallContext contextWithValidAccountRecordId) throws SubscriptionBaseApiException;

public void cancelBaseSubscriptions(Iterable<SubscriptionBase> subscriptions, BillingActionPolicy policy, InternalCallContext context) throws SubscriptionBaseApiException;

Expand Down
@@ -0,0 +1,32 @@
/*
* Copyright 2016 The Billing Project, LLC
*
* The Billing Project 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 org.killbill.billing.subscription.api.user;

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

import org.joda.time.DateTime;
import org.killbill.billing.subscription.api.SubscriptionBase;

public interface SubscriptionBaseWithAddOns {

public UUID getBundleId();

public List<SubscriptionBase> getSubscriptionBaseList();

public DateTime getEffectiveDate();
}
Expand Up @@ -57,6 +57,7 @@
import org.killbill.billing.subscription.api.transfer.SubscriptionBaseTransferApiException;
import org.killbill.billing.subscription.api.user.SubscriptionBaseApiException;
import org.killbill.billing.subscription.api.user.SubscriptionBaseBundle;
import org.killbill.billing.subscription.api.user.SubscriptionBaseWithAddOns;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.util.callcontext.TenantContext;
Expand Down Expand Up @@ -190,14 +191,14 @@ private EntitlementSpecifier getFirstEntitlementSpecifier(final Iterable<BaseEnt
}

@Override
public List<Entitlement> createBaseEntitlementsWithAddOns(final UUID accountId, final Iterable<BaseEntitlementWithAddOnsSpecifier> baseEntitlementSpecifiersWithAddOns, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {
public List<Entitlement> createBaseEntitlementsWithAddOns(final UUID accountId, final Iterable<BaseEntitlementWithAddOnsSpecifier> baseEntitlementWithAddOnsSpecifiers, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {

logCreateEntitlementsWithAOs(log, baseEntitlementSpecifiersWithAddOns);
logCreateEntitlementsWithAOs(log, baseEntitlementWithAddOnsSpecifiers);

final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SHOPPING_CART_SUBSCRIPTIONS,
accountId,
null,
baseEntitlementSpecifiersWithAddOns,
baseEntitlementWithAddOnsSpecifiers,
null,
properties,
callContext);
Expand All @@ -208,15 +209,20 @@ public List<Entitlement> doCall(final EntitlementApi entitlementApi, final Entit
final InternalCallContext contextWithValidAccountRecordId = internalCallContextFactory.createInternalCallContext(accountId, callContext);

try {
final List<SubscriptionBase> subscriptionsWithAddOns = subscriptionBaseInternalApi.createBaseSubscriptionsWithAddOns(accountId, baseEntitlementSpecifiersWithAddOns, contextWithValidAccountRecordId);
final List<SubscriptionBaseWithAddOns> subscriptionsWithAddOns = subscriptionBaseInternalApi.createBaseSubscriptionsWithAddOns(accountId, baseEntitlementWithAddOnsSpecifiers, contextWithValidAccountRecordId);
final List<BlockingState> blockingStates = new ArrayList<BlockingState>();
for (final SubscriptionBase cur : subscriptionsWithAddOns) {
final BlockingState blockingState = new DefaultBlockingState(cur.getId(), BlockingStateType.SUBSCRIPTION, DefaultEntitlementApi.ENT_STATE_START, EntitlementService.ENTITLEMENT_SERVICE_NAME, false, false, false,
dateHelper.fromLocalDateAndReferenceTime(updatedPluginContext.getBaseEntitlementWithAddOnsSpecifiers().iterator().next().getEntitlementEffectiveDate(), contextWithValidAccountRecordId));
blockingStates.add(blockingState);
final List<BaseEntitlementWithAddOnsSpecifier> baseEntitlementWithAddOnsSpecifierList = Lists.newArrayList(baseEntitlementWithAddOnsSpecifiers.iterator());
for (final SubscriptionBaseWithAddOns cur : subscriptionsWithAddOns) {
for (SubscriptionBase subscriptionBase : cur.getSubscriptionBaseList()) {
final BlockingState blockingState = new DefaultBlockingState(subscriptionBase.getId(), BlockingStateType.SUBSCRIPTION,
DefaultEntitlementApi.ENT_STATE_START,
EntitlementService.ENTITLEMENT_SERVICE_NAME,
false, false, false,
dateHelper.fromLocalDateAndReferenceTime(baseEntitlementWithAddOnsSpecifierList.get(subscriptionsWithAddOns.indexOf(cur)).getEntitlementEffectiveDate(), contextWithValidAccountRecordId));
blockingStates.add(blockingState);
}
entitlementUtils.setBlockingStatesAndPostBlockingTransitionEvent(blockingStates, cur.getBundleId(), contextWithValidAccountRecordId);
}
entitlementUtils.setBlockingStatesAndPostBlockingTransitionEvent(blockingStates, subscriptionsWithAddOns.get(0).getBundleId(), contextWithValidAccountRecordId);

return buildEntitlementList(accountId, subscriptionsWithAddOns, callContext);
} catch (final SubscriptionBaseApiException e) {
throw new EntitlementApiException(e);
Expand All @@ -226,13 +232,15 @@ public List<Entitlement> doCall(final EntitlementApi entitlementApi, final Entit
return pluginExecution.executeWithPlugin(createBaseEntitlementsWithAddOns, pluginContext);
}

private List<Entitlement> buildEntitlementList(final UUID accountId, final List<SubscriptionBase> subscriptionsWithAddOns, final CallContext callContext) throws EntitlementApiException {
private List<Entitlement> buildEntitlementList(final UUID accountId, final List<SubscriptionBaseWithAddOns> subscriptionsWithAddOns, final CallContext callContext) throws EntitlementApiException {
List<Entitlement> result = new ArrayList<Entitlement>();
for (SubscriptionBase subscriptionWithAddOns : subscriptionsWithAddOns) {
Entitlement entitlement = new DefaultEntitlement(accountId, subscriptionWithAddOns.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
entitlementUtils, dateHelper, clock, securityApi, internalCallContextFactory, callContext);
result.add(entitlement);
for (SubscriptionBaseWithAddOns subscriptionWithAddOns : subscriptionsWithAddOns) {
for (SubscriptionBase subscriptionBase : subscriptionWithAddOns.getSubscriptionBaseList()) {
Entitlement entitlement = new DefaultEntitlement(accountId, subscriptionBase.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
entitlementUtils, dateHelper, clock, securityApi, internalCallContextFactory, callContext);
result.add(entitlement);
}
}
return result;
}
Expand Down
Expand Up @@ -32,6 +32,7 @@
import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
import org.killbill.billing.catalog.api.PlanSpecifier;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBase;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBaseWithAddOns;
import org.killbill.billing.subscription.api.user.SubscriptionAndAddOnsSpecifier;
import org.killbill.billing.subscription.api.user.SubscriptionBaseApiException;
import org.killbill.billing.subscription.api.user.SubscriptionBuilder;
Expand All @@ -46,7 +47,7 @@ public DefaultSubscriptionBase createPlan(SubscriptionBuilder builder, Plan plan
CallContext context)
throws SubscriptionBaseApiException;

public List<DefaultSubscriptionBase> createPlansWithAddOns(UUID accountId, Iterable<SubscriptionAndAddOnsSpecifier> subscriptionsAndAddOns, CallContext context)
public List<DefaultSubscriptionBaseWithAddOns> createPlansWithAddOns(UUID accountId, Iterable<SubscriptionAndAddOnsSpecifier> subscriptionsAndAddOns, CallContext context)
throws SubscriptionBaseApiException;

public boolean cancel(DefaultSubscriptionBase subscription, CallContext context)
Expand Down
Expand Up @@ -63,12 +63,14 @@
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBase;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBaseApiService;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBaseBundle;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBaseWithAddOns;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionStatusDryRun;
import org.killbill.billing.subscription.api.user.SubscriptionAndAddOnsSpecifier;
import org.killbill.billing.subscription.api.user.SubscriptionBaseApiException;
import org.killbill.billing.subscription.api.user.SubscriptionBaseBundle;
import org.killbill.billing.subscription.api.user.SubscriptionBaseTransition;
import org.killbill.billing.subscription.api.user.SubscriptionBaseTransitionData;
import org.killbill.billing.subscription.api.user.SubscriptionBaseWithAddOns;
import org.killbill.billing.subscription.api.user.SubscriptionBuilder;
import org.killbill.billing.subscription.api.user.SubscriptionSpecifier;
import org.killbill.billing.subscription.engine.addon.AddonUtils;
Expand Down Expand Up @@ -254,7 +256,7 @@ private List<SubscriptionSpecifier> verifyAndBuildSubscriptionSpecifiers(final U
}

@Override
public List<SubscriptionBase> createBaseSubscriptionsWithAddOns(final UUID accountId, final Iterable<BaseEntitlementWithAddOnsSpecifier> baseEntitlementWithAddOnsSpecifier, final InternalCallContext context) throws SubscriptionBaseApiException {
public List<SubscriptionBaseWithAddOns> createBaseSubscriptionsWithAddOns(final UUID accountId, final Iterable<BaseEntitlementWithAddOnsSpecifier> baseEntitlementWithAddOnsSpecifier, final InternalCallContext context) throws SubscriptionBaseApiException {
try {
final Catalog catalog = catalogService.getFullCatalog(true, true, context);
final CallContext callContext = internalCallContextFactory.createCallContext(context);
Expand All @@ -267,24 +269,25 @@ public List<SubscriptionBase> createBaseSubscriptionsWithAddOns(final UUID accou

final SubscriptionBaseBundle bundle = createBundleForAccount(accountId, entitlementWithAddOnsSpecifier.getExternalKey(), context);

final List<SubscriptionSpecifier> subscriptions = verifyAndBuildSubscriptionSpecifiers(bundle.getId(),
entitlementWithAddOnsSpecifier.getEntitlementSpecifier(),
entitlementWithAddOnsSpecifier.isMigrated(),
context,
now,
effectiveDate,
catalog,
callContext);

SubscriptionAndAddOnsSpecifier subscriptionAndAddOnsSpecifier = new SubscriptionAndAddOnsSpecifier();
subscriptionAndAddOnsSpecifier.setSubscriptionSpecifiers(subscriptions);
SubscriptionAndAddOnsSpecifier subscriptionAndAddOnsSpecifier = new SubscriptionAndAddOnsSpecifier(
bundle.getId(),
effectiveDate,
verifyAndBuildSubscriptionSpecifiers(bundle.getId(),
entitlementWithAddOnsSpecifier.getEntitlementSpecifier(),
entitlementWithAddOnsSpecifier.isMigrated(),
context,
now,
effectiveDate,
catalog,
callContext)
);
subscriptionAndAddOns.add(subscriptionAndAddOnsSpecifier);
}

final List<DefaultSubscriptionBase> result = apiService.createPlansWithAddOns(accountId, subscriptionAndAddOns, callContext);
return ImmutableList.copyOf(Iterables.transform(result, new Function<DefaultSubscriptionBase, SubscriptionBase>() {
final List<DefaultSubscriptionBaseWithAddOns> result = apiService.createPlansWithAddOns(accountId, subscriptionAndAddOns, callContext);
return ImmutableList.copyOf(Iterables.transform(result, new Function<DefaultSubscriptionBaseWithAddOns, SubscriptionBaseWithAddOns>() {
@Override
public SubscriptionBase apply(final DefaultSubscriptionBase input) {
public SubscriptionBaseWithAddOns apply(final DefaultSubscriptionBaseWithAddOns input) {
return input;
}
}));
Expand Down
Expand Up @@ -70,6 +70,7 @@
import org.killbill.clock.Clock;
import org.killbill.clock.DefaultClock;

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
Expand Down Expand Up @@ -117,16 +118,27 @@ public DefaultSubscriptionBase createPlan(final SubscriptionBuilder builder, fin
}

@Override
public List<DefaultSubscriptionBase> createPlansWithAddOns(final UUID accountId, final Iterable<SubscriptionAndAddOnsSpecifier> subscriptionsAndAddOns, final CallContext context) throws SubscriptionBaseApiException {
public List<DefaultSubscriptionBaseWithAddOns> createPlansWithAddOns(final UUID accountId, final Iterable<SubscriptionAndAddOnsSpecifier> subscriptionsAndAddOns, final CallContext context) throws SubscriptionBaseApiException {
Map<UUID, List<SubscriptionBaseEvent>> eventsMap = new HashMap<UUID, List<SubscriptionBaseEvent>>();
List<List<DefaultSubscriptionBase>> subscriptionBaseAndAddOnsList = new ArrayList<List<DefaultSubscriptionBase>>();
List<DefaultSubscriptionBase> allSubscriptions = new ArrayList<DefaultSubscriptionBase>();
List<DefaultSubscriptionBaseWithAddOns> allSubscriptions = new ArrayList<DefaultSubscriptionBaseWithAddOns>();

for (SubscriptionAndAddOnsSpecifier subscriptionAndAddOns : subscriptionsAndAddOns) {
List<DefaultSubscriptionBase> subscriptionBaseList = new ArrayList<DefaultSubscriptionBase>();
createEvents(subscriptionAndAddOns.getSubscriptionSpecifiers(), context, eventsMap, subscriptionBaseList);

subscriptionBaseAndAddOnsList.add(subscriptionBaseList);
allSubscriptions.addAll(subscriptionBaseList);

DefaultSubscriptionBaseWithAddOns defaultSubscriptionBaseWithAddOns = new DefaultSubscriptionBaseWithAddOns(
subscriptionAndAddOns.getBundleId(),
ImmutableList.copyOf(Iterables.transform(subscriptionBaseList, new Function<DefaultSubscriptionBase, SubscriptionBase>() {
@Override
public SubscriptionBase apply(final DefaultSubscriptionBase input) {
return input;
}
})),
subscriptionAndAddOns.getEffectiveDate());
allSubscriptions.add(defaultSubscriptionBaseWithAddOns);
}

final InternalCallContext internalCallContext = createCallContextFromAccountId(accountId, context);
Expand Down Expand Up @@ -176,9 +188,9 @@ private void rebuildTransitions(final InternalCallContext internalCallContext, f
}

private DefaultSubscriptionBase findBaseSubscription(final List<DefaultSubscriptionBase> subscriptionBaseList) {
return Iterables.tryFind(subscriptionBaseList, new Predicate<DefaultSubscriptionBase>() {
return Iterables.tryFind(subscriptionBaseList, new Predicate<SubscriptionBase>() {
@Override
public boolean apply(final DefaultSubscriptionBase subscription) {
public boolean apply(final SubscriptionBase subscription) {
return ProductCategory.BASE.equals(subscription.getCategory());
}
}).orNull();
Expand Down

0 comments on commit 8462e60

Please sign in to comment.