Class AbstractGradeChangeSubscriptionModificationHandler
java.lang.Object
com.broadleafcommerce.subscriptionoperation.service.modification.AbstractModifySubscriptionHandler
com.broadleafcommerce.subscriptionoperation.service.modification.AbstractGradeChangeSubscriptionModificationHandler
- All Implemented Interfaces:
ModifySubscriptionHandler
- Direct Known Subclasses:
InitiateDowngradeSubscriptionHandler,InitiateUpgradeSubscriptionHandler
public abstract class AbstractGradeChangeSubscriptionModificationHandler
extends AbstractModifySubscriptionHandler
Common parent for
InitiateUpgradeSubscriptionHandler and
InitiateDowngradeSubscriptionHandler.- Author:
- Nathan Moore (nathandmoore)
-
Constructor Summary
ConstructorsConstructorDescriptionAbstractGradeChangeSubscriptionModificationHandler(com.broadleafcommerce.common.extension.TypeFactory typeFactory, SubscriptionModificationUtils subscriptionModificationUtils, CatalogProvider<Product> catalogProvider, CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart> cartOperationProvider) -
Method Summary
Modifier and TypeMethodDescriptionprotected Optional<AddItemRequest>buildAddItemRequestForAddOn(@NonNull ProductOption addOnOption, @NonNull Subscription subscription, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds aAddItemRequestfor any relevant add-ons.protected CreateCartRequestbuildCreateCartRequest(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected AddItemRequestbuildRootItemRequestWithDependents(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds aAddItemRequestfor the root upgrade/downgrade item.protected intdetermineItemQuantity(SubscriptionReferencedItem nextItem, int existingItemQuantity) Determines the quantity of theSubscriptionReferencedItemto be upgraded or downgraded to based on its min and max thresholds and the existingSubscriptionItem's quantity.protected CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart>protected CatalogProvider<Product>protected List<AddItemRequest>getDependentItems(@NonNull SubscriptionReferencedItem nextRootItem, @NonNull Subscription subscription, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Gets a list of all the required add-ons (dependentCartItems) for the current product.protected List<AddItemRequest>getDependentItemsCustom(@NonNull SubscriptionReferencedItem nextRootItem, @NonNull Subscription subscription) Custom implementation for non-BroadleafProduct instances.protected ModifySubscriptionResponsehandleInternal(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint for custom logic specific to a particular modification request.protected voidhydrateAdditionalContextOntoRequest(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Handles hydrating any additional contextual information onto theModifySubscriptionRequestthat the handler needs.protected voidhydrateSubscriptionReferencedItems(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hydrate the root item and item to upgrade/downgrade to onto theModifySubscriptionRequest.protected booleanisRequiredAddOn(@NonNull ItemChoice itemChoice) Determines if the currentaddOnis a required add-on.protected voidpopulateDefaultProductAndOrVariantId(@NonNull ItemChoice itemChoice, @NonNull AddItemRequest addOnRequest) PopulatesAddItemRequest.getProductId()and, if applicable,AddItemRequest.getVariantId()based on the type ofItemChoice.protected SubscriptionReferencedItemreadNewItemReferenced(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Retrieves the new item to upgrade/downgrade to.protected SubscriptionReferencedItemreadNewSubscriptionItemOfCustomType(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint for custom item ref types.Methods inherited from class com.broadleafcommerce.subscriptionoperation.service.modification.AbstractModifySubscriptionHandler
addDependentsToParents, buildAddItemRequest, buildPriceCartRequest, generateCartName, getChildOptions, getFlowName, getPolicyUtils, getRequiredPermissions, getSubscriptionModificationUtils, getTypeFactory, handle, hydrateProductsAndItemChoices, populateCartAttributesOnCreateCartRequest, validateActionType, validateAdditionalPermissionRules, validateBusinessRules, validateCurrentSubscriptionState, validateRequest, validateUserAccessToSubscriptionMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.broadleafcommerce.subscriptionoperation.service.modification.ModifySubscriptionHandler
canHandle
-
Constructor Details
-
AbstractGradeChangeSubscriptionModificationHandler
public AbstractGradeChangeSubscriptionModificationHandler(com.broadleafcommerce.common.extension.TypeFactory typeFactory, SubscriptionModificationUtils subscriptionModificationUtils, CatalogProvider<Product> catalogProvider, CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart> cartOperationProvider)
-
-
Method Details
-
handleInternal
protected ModifySubscriptionResponse handleInternal(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from class:AbstractModifySubscriptionHandlerHookpoint for custom logic specific to a particular modification request.- Specified by:
handleInternalin classAbstractModifySubscriptionHandler- Parameters:
request- The incoming request to modify aSubscriptioncontextInfo- Additional sandbox and multitenant info- Returns:
- Whether this handler can handle the
ModifySubscriptionRequest. - See Also:
-
hydrateAdditionalContextOntoRequest
protected void hydrateAdditionalContextOntoRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from class:AbstractModifySubscriptionHandlerHandles hydrating any additional contextual information onto theModifySubscriptionRequestthat the handler needs. By default, this does nothing.- Overrides:
hydrateAdditionalContextOntoRequestin classAbstractModifySubscriptionHandler- Parameters:
request- TheModifySubscriptionRequestto hydrate.contextInfo- Additional sandbox and multitenant info.
-
buildCreateCartRequest
protected CreateCartRequest buildCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) - Overrides:
buildCreateCartRequestin classAbstractModifySubscriptionHandler
-
hydrateSubscriptionReferencedItems
protected void hydrateSubscriptionReferencedItems(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hydrate the root item and item to upgrade/downgrade to onto theModifySubscriptionRequest.- Parameters:
request- TheModifySubscriptionRequestto hydrate.contextInfo- Additional sandbox and multitenant info.- See Also:
-
readNewItemReferenced
protected SubscriptionReferencedItem readNewItemReferenced(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Retrieves the new item to upgrade/downgrade to.- Parameters:
request- TheModifySubscriptionRequestto hydrate.contextInfo- Additional sandbox and multitenant info.- Returns:
- The new item to upgrade/downgrade to.
- See Also:
-
readNewSubscriptionItemOfCustomType
protected SubscriptionReferencedItem readNewSubscriptionItemOfCustomType(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint for custom item ref types. If the item to upgrade/downgrade to is not a default Broadleaf type, then this method will be invoked to provide it.- Parameters:
request- TheModifySubscriptionRequestto hydrate.contextInfo- Additional sandbox and multitenant info.- Returns:
- The new item to upgrade/downgrade to.
- See Also:
-
buildRootItemRequestWithDependents
protected AddItemRequest buildRootItemRequestWithDependents(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds aAddItemRequestfor the root upgrade/downgrade item.If the new product to upgrade/downgrade to has a required add-on, an
AddItemRequestis created for the add-on too.- Parameters:
request- TheModifySubscriptionRequestto hydrate. * @param contextInfo Additional sandbox and multitenant info.contextInfo- Additional sandbox and multitenant info.- Returns:
- The
AddItemRequestfor the new product to upgrade/downgrade to.
-
determineItemQuantity
Determines the quantity of theSubscriptionReferencedItemto be upgraded or downgraded to based on its min and max thresholds and the existingSubscriptionItem's quantity.- Parameters:
nextItem- TheSubscriptionReferencedItemto be upgraded or downgraded toexistingItemQuantity- The existingSubscriptionItem's quantity.- Returns:
- The quantity to use for the
AddItemRequest.
-
getDependentItems
protected List<AddItemRequest> getDependentItems(@NonNull @NonNull SubscriptionReferencedItem nextRootItem, @NonNull @NonNull Subscription subscription, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Gets a list of all the required add-ons (dependentCartItems) for the current product.- Parameters:
nextRootItem- The new product to upgrade/downgrade to.subscription- The current subscription- Returns:
- A list of all the required add-ons (dependentCartItems) for the current product.
-
buildAddItemRequestForAddOn
protected Optional<AddItemRequest> buildAddItemRequestForAddOn(@NonNull @NonNull ProductOption addOnOption, @NonNull @NonNull Subscription subscription, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds aAddItemRequestfor any relevant add-ons. By default, this only creates requests for required add-ons.In Broadleaf, an add-on is represented by a
ProductOptionof typeDefaultProductOptionType.ITEM_CHOICE.- Parameters:
addOnOption- AProductOptionof typeDefaultProductOptionType.ITEM_CHOICE.subscription- The existingSubscription.- Returns:
- An
AddItemRequestfor the add-on. - See Also:
-
isRequiredAddOn
Determines if the currentaddOnis a required add-on.- Parameters:
itemChoice- The addOn product to be checked if it is required.- Returns:
- true if the product is a required add-on otherwise false.
-
getDependentItemsCustom
protected List<AddItemRequest> getDependentItemsCustom(@NonNull @NonNull SubscriptionReferencedItem nextRootItem, @NonNull @NonNull Subscription subscription) Custom implementation for non-BroadleafProduct instances.- Parameters:
nextRootItem- The product to upgrade/downgrade to.subscription- The current subscription- Returns:
- A list of
addItemRequestsfor the new product to upgrade/downgrade to. - See Also:
-
populateDefaultProductAndOrVariantId
protected void populateDefaultProductAndOrVariantId(@NonNull @NonNull ItemChoice itemChoice, @NonNull @NonNull AddItemRequest addOnRequest) PopulatesAddItemRequest.getProductId()and, if applicable,AddItemRequest.getVariantId()based on the type ofItemChoice.- Parameters:
itemChoice-ItemChoiceto derive theAddItemRequestproperties.addOnRequest-AddItemRequestto populate- See Also:
-
getCatalogProvider
-
getCartOperationProvider
protected CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart> getCartOperationProvider()
-