Class AbstractModifySubscriptionHandler
java.lang.Object
com.broadleafcommerce.subscriptionoperation.service.modification.AbstractModifySubscriptionHandler
- All Implemented Interfaces:
ModifySubscriptionHandler
- Direct Known Subclasses:
AbstractGradeChangeSubscriptionModificationHandler,ChangeSubscriptionAutoRenewalHandler,InitiateCancelSubscriptionHandler,InitiateEditSubscriptionHandler
public abstract class AbstractModifySubscriptionHandler
extends Object
implements ModifySubscriptionHandler
Handles common operations and logic for concrete
handlers.- Author:
- Nathan Moore (nathandmoore)
-
Constructor Summary
ConstructorsConstructorDescriptionAbstractModifySubscriptionHandler(com.broadleafcommerce.common.extension.TypeFactory typeFactory, SubscriptionModificationUtils subscriptionModificationUtils) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddDependentsToParents(@NonNull Map<String, List<String>> subscriptionItemIdsToChildrenIds, @NonNull Map<String, AddItemRequest> addItemRequestsBySubscriptionItemId) Adds the link between subscriptionId and its childrenIds to the map containing the AddItemRequest.protected 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 CreateCartRequestbuildCreateCartRequest(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected PriceCartRequestbuildPriceCartRequest(@NonNull Subscription subscription, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Build thePriceCartRequestfor pricing the cart.protected StringgenerateCartName(@NonNull Subscription subscription) Generates the name for a cart based on the operationFlow triggered and subscription.protected List<ProductOption>getChildOptions(@NonNull ItemChoice itemChoice) protected abstract StringProduces the name of the modification flow.protected abstract com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtilsprotected abstract 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 SubscriptionModificationUtilsprotected com.broadleafcommerce.common.extension.TypeFactoryhandle(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Handles the actual modification process for theModifySubscriptionRequest, including validating the request payload and the user's permission.protected abstract 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 voidhydrateProductsAndItemChoices(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidpopulateCartAttributesOnCreateCartRequest(@NonNull ModifySubscriptionRequest request, @NonNull CreateCartRequest createCartRequest) Stores additional values inCreateCartRequest.getCartAttributes()that would be used in downstream flows.protected voidvalidateActionType(@NonNull ModifySubscriptionRequest request, @NonNull org.springframework.validation.Errors errors, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates therequested actionagainst the resolvedsubscription's available actions.protected voidvalidateAdditionalPermissionRules(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to supply additional permission validation logic.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.protected voidvalidateCurrentSubscriptionState(@NonNull ModifySubscriptionRequest request, @NonNull org.springframework.validation.Errors errors, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates the current state of the subscription before allowing modification.protected voidvalidateRequest(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates the request to modify the subscription.protected voidvalidateUserAccessToSubscription(@NonNull ModifySubscriptionRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates the user's access to the subscription.Methods 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
-
AbstractModifySubscriptionHandler
public AbstractModifySubscriptionHandler(com.broadleafcommerce.common.extension.TypeFactory typeFactory, SubscriptionModificationUtils subscriptionModificationUtils)
-
-
Method Details
-
getPolicyUtils
@Nullable protected abstract com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils getPolicyUtils() -
getFlowName
Produces the name of the modification flow.- Returns:
- The name of the modification flow.
- See Also:
-
handle
public ModifySubscriptionResponse handle(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ModifySubscriptionHandlerHandles the actual modification process for theModifySubscriptionRequest, including validating the request payload and the user's permission.- Specified by:
handlein interfaceModifySubscriptionHandler- Parameters:
request- The incoming request to modify aSubscriptioncontextInfo- Additional sandbox and multitenant info- Returns:
- The
ModifySubscriptionResponsethat results from the modification.
-
handleInternal
protected abstract ModifySubscriptionResponse handleInternal(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint for custom logic specific to a particular modification request.- Parameters:
request- The incoming request to modify aSubscriptioncontextInfo- Additional sandbox and multitenant info- Returns:
- Whether this handler can handle the
ModifySubscriptionRequest. - See Also:
-
validateRequest
protected void validateRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates the request to modify the subscription. It will handle throwing aValidationExceptionif there are validation errors produced byvalidateBusinessRules(ModifySubscriptionRequest, Errors, ContextInfo).- Parameters:
request- TheModifySubscriptionRequestwith the details related to the modification to make.contextInfo- the current sandbox and multitenant context- Throws:
InsufficientSubscriptionAccessException- if the user does not have access to the subscriptioncom.broadleafcommerce.common.error.validation.ValidationException- if the request is invalid due to missing or incorrect data
-
validateUserAccessToSubscription
protected void validateUserAccessToSubscription(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates the user's access to the subscription. Called byvalidateRequest(ModifySubscriptionRequest, ContextInfo).- Parameters:
request- TheModifySubscriptionRequestwith the details related to the modification to make.contextInfo- the current sandbox and multitenant context- Throws:
InsufficientSubscriptionAccessException- if the user does not have access to the subscription
-
validateActionType
protected void validateActionType(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull org.springframework.validation.Errors errors, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates therequested actionagainst the resolvedsubscription's available actions. Called byvalidateRequest(ModifySubscriptionRequest, ContextInfo).- 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
-
validateBusinessRules
protected void validateBusinessRules(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull org.springframework.validation.Errors errors, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to supply custom business rules for specific action types. Called byvalidateRequest(ModifySubscriptionRequest, ContextInfo).- 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
-
validateCurrentSubscriptionState
protected void validateCurrentSubscriptionState(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull org.springframework.validation.Errors errors, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Validates the current state of the subscription before allowing modification.- 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 abstract String[] getRequiredPermissions(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to supply the permissions required to perform the givenSubscriptionAction. These may be different depending on the type of user requesting the modification.- 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.
-
validateAdditionalPermissionRules
protected void validateAdditionalPermissionRules(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to supply additional permission validation logic. This is a no-op by default.- Parameters:
request- TheModifySubscriptionRequestwith the details related to the modification to make.contextInfo- the current sandbox and multitenant context
-
hydrateAdditionalContextOntoRequest
protected void hydrateAdditionalContextOntoRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Handles hydrating any additional contextual information onto theModifySubscriptionRequestthat the handler needs. By default, this does nothing.- Parameters:
request- TheModifySubscriptionRequestto hydrate.contextInfo- Additional sandbox and multitenant info.
-
hydrateProductsAndItemChoices
protected void hydrateProductsAndItemChoices(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
getChildOptions
-
buildCreateCartRequest
protected CreateCartRequest buildCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
generateCartName
Generates the name for a cart based on the operationFlow triggered and subscription.- Parameters:
subscription- the current subscription- Returns:
- a unique cart name String
- See Also:
-
buildPriceCartRequest
protected PriceCartRequest buildPriceCartRequest(@NonNull @NonNull Subscription subscription, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Build thePriceCartRequestfor pricing the cart.- Parameters:
subscription- the current subscriptioncontextInfo- the context info- Returns:
- the generated PriceCartRequest
-
populateCartAttributesOnCreateCartRequest
protected void populateCartAttributesOnCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull CreateCartRequest createCartRequest) Stores additional values inCreateCartRequest.getCartAttributes()that would be used in downstream flows.- Parameters:
request- theModifySubscriptionRequestcontaining request details.createCartRequest- TheCreateCartRequestto populate with attributes.
-
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) Builds anAddItemRequestfrom the given subscriptionItem, subscription and the flowName- Parameters:
subscriptionItem- the subscriptionItemsubscription- the subscriptionrequest- theModifySubscriptionRequest- Returns:
- a
AddItemRequest
-
addDependentsToParents
protected void addDependentsToParents(@NonNull @NonNull Map<String, List<String>> subscriptionItemIdsToChildrenIds, @NonNull @NonNull Map<String, AddItemRequest> addItemRequestsBySubscriptionItemId) Adds the link between subscriptionId and its childrenIds to the map containing the AddItemRequest. This is essentially hydrating the AddItemRequest for each subscriptionId with its dependent children.- Parameters:
subscriptionItemIdsToChildrenIds- the link between subscriptionId and its childrenIdsaddItemRequestsBySubscriptionItemId- the link between subscriptionItemId and AddItemRequest
-
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory() -
getSubscriptionModificationUtils
-