Class ProductOptionContributionUtils
java.lang.Object
com.broadleafcommerce.catalog.service.product.commerce.util.ProductOptionContributionUtils
Utility methods for
ProductOptionDetails
created for the response to
a ProductDetailsRequest
.- Author:
- Nathan Moore (nathandmoore)
-
Constructor Summary
ConstructorDescriptionProductOptionContributionUtils
(PriceInfoContributionUtils priceInfoContributionUtils, CatalogServiceProperties properties, com.broadleafcommerce.common.extension.TypeFactory typeFactory) -
Method Summary
Modifier and TypeMethodDescriptionprotected ItemChoiceCategory
buildItemChoiceCategory
(ProductDetailsContext product, ItemChoice itemChoice, boolean narrowChoices) Builds out and prunes the category item choices.protected List<SpecificItemChoiceDetail>
buildSpecificItemChoices
(ProductDetailsContext productDetailsContext, ItemChoice itemChoice, PriceInfo priceInfo, boolean narrowChoices) Builds out and prunes the specific item choices.protected org.springframework.data.domain.Page<ProductDetails>
createItemChoiceCategoryProductPage
(@NonNull Set<ProductDetails> productChoices) protected ItemChoiceDetail
createItemChoiceDetail
(@NonNull ItemChoice itemChoice, @NonNull ProductDetailsContext productDetailsContext, boolean narrowChoices) createProductOptionDetail
(@NonNull ProductOption option, @NonNull ProductDetailsContext productDetailsContext, boolean narrowChoices) Creates aProductOptionDetail
for aProductOption
included its embedded relationships.protected SpecificItemChoiceDetail
createSpecificItemChoiceDetails
(@NonNull SpecificItemChoice specificChoice, @NonNull ProductDetailsContext productDetailsContext, PriceInfo itemChoicePriceInfo) protected PriceInfoContributionUtils
protected CatalogServiceProperties
protected com.broadleafcommerce.common.extension.TypeFactory
protected boolean
hasRequiredOptions
(@NonNull ProductOptionDetail option) populateAttributeChoiceAllowedValues
(@NonNull ProductOptionDetail optionDetail, @NonNull List<VariantDetail> variantDetails) protected ItemChoiceDetail
populateItemChoiceDefaults
(@NonNull ItemChoiceDetail itemChoice, @NonNull ProductDetailsContext productDetailsContext) protected SpecificItemChoiceDetail
populateSpecificChoice
(@NonNull SpecificItemChoiceDetail specificChoice, @NonNull ProductDetailsContext productDetailsContext) protected Optional<ProductDetails>
recursivelyNarrowItemChoices
(ProductDetails product, Map<String, ProductDetails> relatedProducts, Map<String, VariantDetail> relatedVariants, Set<String> invalidProductChoiceIds, int currentDepth) Recursively builds out and prunes the item choices for the product.
-
Constructor Details
-
ProductOptionContributionUtils
public ProductOptionContributionUtils(PriceInfoContributionUtils priceInfoContributionUtils, CatalogServiceProperties properties, com.broadleafcommerce.common.extension.TypeFactory typeFactory)
-
-
Method Details
-
createProductOptionDetail
public ProductOptionDetail createProductOptionDetail(@NonNull @NonNull ProductOption option, @NonNull @NonNull ProductDetailsContext productDetailsContext, boolean narrowChoices) Creates aProductOptionDetail
for aProductOption
included its embedded relationships.- Parameters:
option
- TheProductOption
for which to make aProductOptionDetail
productDetailsContext
- The relevantProductDetailsContext
- Returns:
- a
ProductOptionDetail
for aProductOption
-
populateAttributeChoiceAllowedValues
public ProductOptionDetail populateAttributeChoiceAllowedValues(@NonNull @NonNull ProductOptionDetail optionDetail, @NonNull @NonNull List<VariantDetail> variantDetails) -
createItemChoiceDetail
protected ItemChoiceDetail createItemChoiceDetail(@NonNull @NonNull ItemChoice itemChoice, @NonNull @NonNull ProductDetailsContext productDetailsContext, boolean narrowChoices) -
populateItemChoiceDefaults
protected ItemChoiceDetail populateItemChoiceDefaults(@NonNull @NonNull ItemChoiceDetail itemChoice, @NonNull @NonNull ProductDetailsContext productDetailsContext) -
createSpecificItemChoiceDetails
protected SpecificItemChoiceDetail createSpecificItemChoiceDetails(@NonNull @NonNull SpecificItemChoice specificChoice, @NonNull @NonNull ProductDetailsContext productDetailsContext, @Nullable PriceInfo itemChoicePriceInfo) -
populateSpecificChoice
protected SpecificItemChoiceDetail populateSpecificChoice(@NonNull @NonNull SpecificItemChoiceDetail specificChoice, @NonNull @NonNull ProductDetailsContext productDetailsContext) -
buildItemChoiceCategory
@Nullable protected ItemChoiceCategory buildItemChoiceCategory(ProductDetailsContext product, ItemChoice itemChoice, boolean narrowChoices) Builds out and prunes the category item choices. This is responsible for starting the recursive pruning for item choices of typeDefaultItemChoiceTargetType.CATEGORY
.- Parameters:
product
- The relevantProductDetailsContext
itemChoice
- The relevantItemChoice
narrowChoices
- Whether or not to narrow the category item choices- Returns:
- The valid
ItemChoiceCategory
for this item choice.
-
hasRequiredOptions
-
recursivelyNarrowItemChoices
protected Optional<ProductDetails> recursivelyNarrowItemChoices(ProductDetails product, Map<String, ProductDetails> relatedProducts, Map<String, VariantDetail> relatedVariants, Set<String> invalidProductChoiceIds, int currentDepth) Recursively builds out and prunes the item choices for the product. This will look at the item choices at the current depth and see if they can be configured. If they cannot be, then they are pruned to prevent errors. This uses the following conditions to prune choices:- The choice is as deep as
CatalogServiceProperties.getMaxConfigurableProductDepth()
and is itself configurable since it's options cannot be retrieved. - If the choice is pointing to a Product higher in the hierarchy, creating a circular reference.
- If the choice has more deeply nested choices that cannot be configured due to the previous conditions.
- Parameters:
product
- The product to narrow the item choices onrelatedProducts
- The relevant related productsrelatedVariants
- The relevant related variantsinvalidProductChoiceIds
- The set of invalid product choice IDscurrentDepth
- The current depth of the recursion- Returns:
- The product after its item choices have been pruned.
- The choice is as deep as
-
buildSpecificItemChoices
protected List<SpecificItemChoiceDetail> buildSpecificItemChoices(ProductDetailsContext productDetailsContext, ItemChoice itemChoice, @Nullable PriceInfo priceInfo, boolean narrowChoices) Builds out and prunes the specific item choices. This is responsible for starting the recursive pruning for item choices of typeDefaultItemChoiceTargetType.SPECIFIC_PRODUCTS
andDefaultItemChoiceTargetType.SPECIFIC_VARIANTS
. Note: Specific variant item choices are not configurable and therefore do not require recursive pruning.- Parameters:
productDetailsContext
- The relevantProductDetailsContext
itemChoice
- The relevantItemChoice
priceInfo
- The relevantPriceInfo
for the item choicenarrowChoices
- Whether or not to narrow the product item choices- Returns:
- The list of valid specific item choice details.
-
createItemChoiceCategoryProductPage
protected org.springframework.data.domain.Page<ProductDetails> createItemChoiceCategoryProductPage(@NonNull @NonNull Set<ProductDetails> productChoices) -
getPriceInfoContributionUtils
-
getProperties
-
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()
-