Class InitiateCancelSubscriptionHandler
java.lang.Object
com.broadleafcommerce.subscriptionoperation.service.modification.AbstractModifySubscriptionHandler
com.broadleafcommerce.subscriptionoperation.service.modification.InitiateCancelSubscriptionHandler
- All Implemented Interfaces:
ModifySubscriptionHandler
public class InitiateCancelSubscriptionHandler
extends AbstractModifySubscriptionHandler
implements ModifySubscriptionHandler
Handles initiating a
Subscription cancellation flow.- Author:
- Nathan Moore (nathandmoore)
-
Constructor Summary
ConstructorsConstructorDescriptionInitiateCancelSubscriptionHandler(com.broadleafcommerce.common.extension.TypeFactory typeFactory, SubscriptionModificationUtils subscriptionModificationUtils, CancellationPolicyProvider<CancellationPolicy> cancellationPolicyProvider, CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart> cartOperationProvider, SubscriptionCancellationProperties subscriptionCancellationProperties, SubscriptionOperationUtils subscriptionOperationUtils, SubscriptionProvider<SubscriptionWithItems, Subscription, SubscriptionOwnerInfo> subscriptionProvider, SubscriptionOperationServiceProperties subOpsServiceProperties) -
Method Summary
Modifier and TypeMethodDescriptionprotected AddItemRequestbuildAddItemRequest(@NonNull SubscriptionItem subscriptionItem, @NonNull Subscription subscription, @NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds anAddItemRequestfrom the given subscriptionItem, subscription and the flowNameprotected List<AddItemRequest>buildAddItemRequestsForCancellationFeeProducts(@NonNull ModifySubscriptionRequest request) Builds aListofAddItemRequestfor products containing cancellation-fees.protected CreateCartRequestbuildCreateCartRequest(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds aCreateCartRequestfrom theModifySubscriptionRequestprotected <I extends PendingSubscriptionItemAdjustmentRemoval>
IbuildPendingSubscriptionItemAdjustmentRemovalDetail(@NonNull SubscriptionItemAdjustment itemAdj, @NonNull SubscriptionItem item, @NonNull Map<String, Subscription> subscriptionById) Builds aPendingSubscriptionItemAdjustmentRemovaldetail for the givenSubscriptionItemAdjustment.protected <I extends PendingSubscriptionItemAdjustmentRemoval>
List<I>buildPendingSubscriptionItemAdjustmentRemovalDetails(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds a list ofSubscriptionItemAdjustmentToRemovesrepresenting details of the subscription item adjustments that will be removed as a result of the subscription cancellation.protected <I extends PendingSubscriptionItemAdjustmentRemoval>
List<I>buildPendingSubscriptionItemAdjustmentRemovalDetailsForItem(@NonNull Set<String> itemIdsBeingCancelled, @NonNull SubscriptionItem item, @NonNull Map<String, Subscription> subscriptionById) protected booleancanCancelSubscription(@NonNull SubscriptionWithItems subscriptionWithItems, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines whether the current subscription can be cancelled.booleancanHandle(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines whether the handler can handle theModifySubscriptionRequest.getCancellationFeeProductIds(@NonNull SubscriptionWithItems subscriptionWithItems, @NonNull CancellationPolicyDetail cancellationPolicyDetail) Fetches the Ids of the extra (cancellation) fee products including the grace fee cancellation product (if applicable) from the givenCancellationPolicyDetail.protected CancellationPolicyProvider<CancellationPolicy>protected CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart>protected intReturns the default page size for gatheringSubscriptionWithItemsprotected StringProduces the name of the modification flow.protected com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtilsprotected String[]getRequiredPermissions(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to supply the permissions required to perform the givenSubscriptionAction.protected SubscriptionOperationServicePropertiesprotected SubscriptionCancellationPropertiesprotected SubscriptionOperationUtilsprotected 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 voidpopulateCartAttributesOnCreateCartRequest(@NonNull ModifySubscriptionRequest request, @NonNull CreateCartRequest createCartRequest) Stores additional values inCreateCartRequest.getCartAttributes()that would be used in downstream flows.protected voidsetNonCatalogItemDetailsOnCancelItem(@NonNull ModifySubscriptionRequest request, @NonNull AddItemRequest cancelItem) Sets theNonCatalogItemDetailson thecancelItemvoidsetPolicyUtils(com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils policyUtils) protected voidvalidateBusinessRules(@NonNull ModifySubscriptionRequest request, @NonNull org.springframework.validation.Errors errors, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to supply custom business rules for specific action types.Methods inherited from class com.broadleafcommerce.subscriptionoperation.service.modification.AbstractModifySubscriptionHandler
addDependentsToParents, buildPriceCartRequest, generateCartName, getChildOptions, getSubscriptionModificationUtils, getTypeFactory, handle, hydrateProductsAndItemChoices, validateActionType, validateAdditionalPermissionRules, 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
handle
-
Constructor Details
-
InitiateCancelSubscriptionHandler
public InitiateCancelSubscriptionHandler(com.broadleafcommerce.common.extension.TypeFactory typeFactory, SubscriptionModificationUtils subscriptionModificationUtils, CancellationPolicyProvider<CancellationPolicy> cancellationPolicyProvider, CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart> cartOperationProvider, SubscriptionCancellationProperties subscriptionCancellationProperties, SubscriptionOperationUtils subscriptionOperationUtils, SubscriptionProvider<SubscriptionWithItems, Subscription, SubscriptionOwnerInfo> subscriptionProvider, SubscriptionOperationServiceProperties subOpsServiceProperties)
-
-
Method Details
-
canHandle
public boolean canHandle(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ModifySubscriptionHandlerDetermines whether the handler can handle theModifySubscriptionRequest.- Specified by:
canHandlein interfaceModifySubscriptionHandler- Parameters:
request- The incoming request to modify aSubscriptioncontextInfo- Additional sandbox and multitenant info- Returns:
- Whether this handler can handle the
ModifySubscriptionRequest.
-
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.
-
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:
-
validateBusinessRules
protected void validateBusinessRules(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull org.springframework.validation.Errors errors, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from class:AbstractModifySubscriptionHandlerHook point to supply custom business rules for specific action types. Called byAbstractModifySubscriptionHandler.validateRequest(ModifySubscriptionRequest, ContextInfo).- Overrides:
validateBusinessRulesin classAbstractModifySubscriptionHandler- Parameters:
request- TheModifySubscriptionRequestwith the details related to the modification to make.errors- Object storing validation errors for the `request`contextInfo- the current sandbox and multitenant context
-
getRequiredPermissions
protected String[] getRequiredPermissions(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from class:AbstractModifySubscriptionHandlerHook point to supply the permissions required to perform the givenSubscriptionAction. These may be different depending on the type of user requesting the modification.- Specified by:
getRequiredPermissionsin classAbstractModifySubscriptionHandler- Parameters:
request- TheModifySubscriptionRequestwith the details related to the modification to make.contextInfo- the current sandbox and multitenant context- Returns:
- The required permissions for the requester to perform the modification.
-
getFlowName
Description copied from class:AbstractModifySubscriptionHandlerProduces the name of the modification flow.- Specified by:
getFlowNamein classAbstractModifySubscriptionHandler- Returns:
- The name of the modification flow.
- See Also:
-
buildCreateCartRequest
protected CreateCartRequest buildCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds aCreateCartRequestfrom theModifySubscriptionRequest- Overrides:
buildCreateCartRequestin classAbstractModifySubscriptionHandler- Parameters:
request- theModifySubscriptionRequestcontaining request details.contextInfo- the contextInfo.- Returns:
- the
CreateCartRequestto hydrate.
-
buildAddItemRequest
protected AddItemRequest buildAddItemRequest(@NonNull @NonNull SubscriptionItem subscriptionItem, @NonNull @NonNull Subscription subscription, @NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from class:AbstractModifySubscriptionHandlerBuilds anAddItemRequestfrom the given subscriptionItem, subscription and the flowName- Overrides:
buildAddItemRequestin classAbstractModifySubscriptionHandler- Parameters:
subscriptionItem- the subscriptionItemsubscription- the subscriptionrequest- theModifySubscriptionRequest- Returns:
- a
AddItemRequest
-
canCancelSubscription
protected boolean canCancelSubscription(@NonNull @NonNull SubscriptionWithItems subscriptionWithItems, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines whether the current subscription can be cancelled.- Parameters:
subscriptionWithItems- TheSubscriptionWithItemsthat may be acted against.contextInfo- Additional sandbox and multitenant info- Returns:
- whether the current subscription can be cancelled.
-
setNonCatalogItemDetailsOnCancelItem
protected void setNonCatalogItemDetailsOnCancelItem(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull AddItemRequest cancelItem) Sets theNonCatalogItemDetailson thecancelItem- Parameters:
request- theModifySubscriptionRequestcontaining request details.cancelItem- theitemon which theNonCatalogItemDetailsare set.
-
populateCartAttributesOnCreateCartRequest
protected void populateCartAttributesOnCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull CreateCartRequest createCartRequest) Stores additional values inCreateCartRequest.getCartAttributes()that would be used in downstream flows.- Overrides:
populateCartAttributesOnCreateCartRequestin classAbstractModifySubscriptionHandler- Parameters:
request- theModifySubscriptionRequestcontaining request details.createCartRequest- TheCreateCartRequestto populate with attributes.
-
buildAddItemRequestsForCancellationFeeProducts
protected List<AddItemRequest> buildAddItemRequestsForCancellationFeeProducts(@NonNull @NonNull ModifySubscriptionRequest request) Builds aListofAddItemRequestfor products containing cancellation-fees.- Parameters:
request- theModifySubscriptionRequestcontaining request details.- Returns:
- A
ListofAddItemRequestfor products containing cancellation-fees
-
getCancellationFeeProductIds
protected List<String> getCancellationFeeProductIds(@NonNull @NonNull SubscriptionWithItems subscriptionWithItems, @NonNull @NonNull CancellationPolicyDetail cancellationPolicyDetail) Fetches the Ids of the extra (cancellation) fee products including the grace fee cancellation product (if applicable) from the givenCancellationPolicyDetail.- Parameters:
subscriptionWithItems- TheSubscriptionWithItemsthat stores the subscription with its items.cancellationPolicyDetail- TheCancellationPolicyDetailcontaining more details about the current subscription'sCancellationPolicy- Returns:
- A
Listof cancellation fee product ids
-
buildPendingSubscriptionItemAdjustmentRemovalDetails
protected <I extends PendingSubscriptionItemAdjustmentRemoval> List<I> buildPendingSubscriptionItemAdjustmentRemovalDetails(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds a list ofSubscriptionItemAdjustmentToRemovesrepresenting details of the subscription item adjustments that will be removed as a result of the subscription cancellation.- Type Parameters:
I- the type ofPendingSubscriptionItemAdjustmentRemoval- Parameters:
request- theModifySubscriptionRequestcontaining request details.contextInfo- the contextInfo.- Returns:
- a list of
SubscriptionItemAdjustmentToRemoves
-
getDefaultSWIPageSize
protected int getDefaultSWIPageSize()Returns the default page size for gatheringSubscriptionWithItems- Returns:
- the default page size for gathering
SubscriptionWithItems
-
buildPendingSubscriptionItemAdjustmentRemovalDetailsForItem
protected <I extends PendingSubscriptionItemAdjustmentRemoval> List<I> buildPendingSubscriptionItemAdjustmentRemovalDetailsForItem(@NonNull @NonNull Set<String> itemIdsBeingCancelled, @NonNull @NonNull SubscriptionItem item, @NonNull @NonNull Map<String, Subscription> subscriptionById) -
buildPendingSubscriptionItemAdjustmentRemovalDetail
protected <I extends PendingSubscriptionItemAdjustmentRemoval> I buildPendingSubscriptionItemAdjustmentRemovalDetail(@NonNull @NonNull SubscriptionItemAdjustment itemAdj, @NonNull @NonNull SubscriptionItem item, @NonNull @NonNull Map<String, Subscription> subscriptionById) Builds aPendingSubscriptionItemAdjustmentRemovaldetail for the givenSubscriptionItemAdjustment.- Type Parameters:
I- the type ofPendingSubscriptionItemAdjustmentRemoval- Parameters:
itemAdj- theSubscriptionItemAdjustmentto build the detail for.item- theSubscriptionItemthat theSubscriptionItemAdjustmentbelongs tosubscriptionById- a map of subscription ids toSubscriptions- Returns:
- the
PendingSubscriptionItemAdjustmentRemovaldetail
-
getPolicyUtils
@Nullable protected com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils getPolicyUtils()- Specified by:
getPolicyUtilsin classAbstractModifySubscriptionHandler
-
setPolicyUtils
@Autowired(required=false) public void setPolicyUtils(com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils policyUtils) -
getCancellationPolicyProvider
-
getCartOperationProvider
protected CartOperationProvider<com.broadleafcommerce.cart.client.domain.Cart> getCartOperationProvider() -
getSubscriptionOperationUtils
-
getSubscriptionCancellationProperties
-
getSubscriptionProvider
protected SubscriptionProvider<SubscriptionWithItems,Subscription, getSubscriptionProvider()SubscriptionOwnerInfo> -
getSubOpsServiceProperties
-