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 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

      protected abstract String 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: ModifySubscriptionHandler
      Handles the actual modification process for the ModifySubscriptionRequest, including validating the request payload and the user's permission.
      Specified by:
      handle in interface ModifySubscriptionHandler
      Parameters:
      request - The incoming request to modify a Subscription
      contextInfo - Additional sandbox and multitenant info
      Returns:
      The ModifySubscriptionResponse that 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 a Subscription
      contextInfo - 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 a ValidationException if there are validation errors produced by validateBusinessRules(ModifySubscriptionRequest, Errors, ContextInfo).
      Parameters:
      request - The ModifySubscriptionRequest with 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
      com.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 by validateRequest(ModifySubscriptionRequest, ContextInfo).
      Parameters:
      request - The ModifySubscriptionRequest with 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)
      Parameters:
      request - The ModifySubscriptionRequest with 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 by validateRequest(ModifySubscriptionRequest, ContextInfo).
      Parameters:
      request - The ModifySubscriptionRequest with 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 - The ModifySubscriptionRequest with 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 given SubscriptionAction. These may be different depending on the type of user requesting the modification.
      Parameters:
      request - The ModifySubscriptionRequest with 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 - The ModifySubscriptionRequest with 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 the ModifySubscriptionRequest that the handler needs. By default, this does nothing.
      Parameters:
      request - The ModifySubscriptionRequest to 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

      protected List<ProductOption> getChildOptions(@NonNull @NonNull ItemChoice itemChoice)
    • buildCreateCartRequest

      protected CreateCartRequest buildCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • generateCartName

      protected String generateCartName(@NonNull @NonNull Subscription subscription)
      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 the PriceCartRequest for pricing the cart.
      Parameters:
      subscription - the current subscription
      contextInfo - the context info
      Returns:
      the generated PriceCartRequest
    • populateCartAttributesOnCreateCartRequest

      protected void populateCartAttributesOnCreateCartRequest(@NonNull @NonNull ModifySubscriptionRequest request, @NonNull @NonNull CreateCartRequest createCartRequest)
      Stores additional values in CreateCartRequest.getCartAttributes() that would be used in downstream flows.
      Parameters:
      request - the ModifySubscriptionRequest containing request details.
      createCartRequest - The CreateCartRequest to 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 an AddItemRequest from the given subscriptionItem, subscription and the flowName
      Parameters:
      subscriptionItem - the subscriptionItem
      subscription - the subscription
      request - the ModifySubscriptionRequest
      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 childrenIds
      addItemRequestsBySubscriptionItemId - the link between subscriptionItemId and AddItemRequest
    • getTypeFactory

      protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()
    • getSubscriptionModificationUtils

      protected SubscriptionModificationUtils getSubscriptionModificationUtils()