Class ExternalCatalogProvider<I extends CatalogItem>

java.lang.Object
com.broadleafcommerce.cartoperation.service.provider.external.AbstractExternalProvider
com.broadleafcommerce.cartoperation.service.provider.external.ExternalCatalogProvider<I>
All Implemented Interfaces:
CatalogProvider<I>

public class ExternalCatalogProvider<I extends CatalogItem> extends AbstractExternalProvider implements CatalogProvider<I>
This particular implementation of CatalogProvider is designed to interact with a provider that will provide fully hydrated catalog entities, i.e., there is no need for additional calls to get a product's variants or item choices.
Author:
Chad Harchar (charchar), Nathan Moore (nathandmoore)
  • Constructor Details

    • ExternalCatalogProvider

      public ExternalCatalogProvider(org.springframework.web.reactive.function.client.WebClient webClient, com.fasterxml.jackson.databind.ObjectMapper objectMapper, com.broadleafcommerce.common.extension.TypeFactory typeFactory, ExternalCatalogProperties properties)
  • Method Details

    • retrieveCatalogItem

      public I retrieveCatalogItem(@NonNull @NonNull CatalogItemRequest catalogItemRequest, @Nullable com.broadleafcommerce.pricing.client.domain.context.PriceContext priceContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CatalogProvider
      Retrieve the catalog item for the context information provided. The item should be fully hydrated with all of its relationships including pricing (although not offers).

      The default implementation uses the product ID to fetch the catalog item.

      Specified by:
      retrieveCatalogItem in interface CatalogProvider<I extends CatalogItem>
      Parameters:
      catalogItemRequest - The information required to retrieve the catalog item.
      priceContext - Pricing context information about the cart
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The catalog item for the request and application provided.
    • retrieveCatalogItems

      public CatalogItemList<I> retrieveCatalogItems(@NonNull @NonNull Collection<CatalogItemRequest> catalogItemRequests, @Nullable com.broadleafcommerce.pricing.client.domain.context.PriceContext priceContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CatalogProvider
      Retrieve the catalog items for the context information provided. The items should be fully hydrated with all of their relationships including pricing (although not offers).

      The default implementation uses the product IDs to fetch the list of catalog items.

      Specified by:
      retrieveCatalogItems in interface CatalogProvider<I extends CatalogItem>
      Parameters:
      catalogItemRequests - The information required to retrieve the catalog items.
      priceContext - The PriceContext that is used to retrieve the correct item prices.
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The catalog items for the request and application provided.
    • buildPriceContextHeader

      protected String buildPriceContextHeader(@NonNull @NonNull com.broadleafcommerce.pricing.client.domain.context.PriceContext priceContext)
    • retrieveCartItemProductMappings

      public List<CartItemMappingProperties.FieldMapping> retrieveCartItemProductMappings(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CatalogProvider
      Retrieve a list of cart item to product mappings
      Specified by:
      retrieveCartItemProductMappings in interface CatalogProvider<I extends CatalogItem>
      Parameters:
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The list of FieldMapping
    • getRetrieveProductsUrl

      @Deprecated protected String getRetrieveProductsUrl(Collection<String> productIds)
      Deprecated.
    • getRetrieveProductsUrl

      protected String getRetrieveProductsUrl(Collection<String> productIds, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Gets the URL to retrieve products.

      The skipPricing=true parameter is added as the catalog items will be priced separately.

      Parameters:
      productIds - the ids of the products to retrieve
      contextInfo - the contextInfo for the request
      Returns:
      the URL to retrieve products
    • getServiceClient

      protected String getServiceClient()
    • getCustomerContextParams

      protected org.springframework.util.MultiValueMap<String,String> getCustomerContextParams(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Builds a org.springframework.util.MultiValueMap<String,String> that includes params related to the currently authenticated user and any dynamic customer segments that should be passed along to the backing service.
      Parameters:
      contextInfo - Additional tenant and sandbox info along with dynamic customer segments.
      Returns:
      A org.springframework.util.MultiValueMap<String,String> that includes params related to the currently authenticated user and any dynamic customer segments that should be passed along to the backing service.
    • getAuthenticationParams

      protected org.springframework.util.MultiValueMap<String,String> getAuthenticationParams()
      Builds a org.springframework.util.MultiValueMap<String,String> that includes params related to the currently authenticated user that should be passed along to the backing service. This is needed because the authentication in that service will belong to the Cart Operations Client rather than the authenticated user.
      Returns:
      A org.springframework.util.MultiValueMap<String,String> that includes params related to the currently authenticated user that should be passed along to the backing service
    • addUserTargets

      protected com.broadleafcommerce.pricing.client.domain.context.PriceContext addUserTargets(@Nullable com.broadleafcommerce.pricing.client.domain.context.PriceContext priceContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Augments user targets onto the PriceContext based on the available context information. If priceContext is null, it will be initialized.
      Parameters:
      priceContext - The priceContext to add user targets to
      contextInfo - Additional tenant and sandbox info along with dynamic customer segments.
      Returns:
      A PriceContext with hydrated user targets.
    • createUserTargetRef

      protected com.broadleafcommerce.pricing.client.domain.UserTargetRef createUserTargetRef(String targetValue, String targetType)
    • getCatalogItemListType

      protected org.springframework.core.ParameterizedTypeReference getCatalogItemListType()
      Gets the type reference for the list of catalog items.

      By default, this returns a CatalogItemList of items extending type Product.

      Returns:
      type reference for the list of catalog items
    • getProperties

      protected ExternalCatalogProperties getProperties()
    • getAuthenticationUtils

      protected com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils getAuthenticationUtils()
    • setAuthenticationUtils

      @Autowired public void setAuthenticationUtils(com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils authenticationUtils)
    • setCartItemProductMappingProvider

      @Autowired public void setCartItemProductMappingProvider(CartItemProductMappingProvider cartItemProductMappingProvider)
    • getCartItemProductMappingProvider

      protected CartItemProductMappingProvider getCartItemProductMappingProvider()
    • setUserTargetGenerationService

      @Autowired public void setUserTargetGenerationService(UserTargetGenerationService userTargetGenerationService)
    • getUserTargetGenerationService

      protected UserTargetGenerationService getUserTargetGenerationService()