java.lang.Object
com.broadleafcommerce.catalog.domain.product.option.ItemChoice
All Implemented Interfaces:
Serializable

public class ItemChoice extends Object implements Serializable
Configuration state for DefaultProductOptionType.ITEM_CHOICE.
Author:
Phillip Verheyden (phillipuniverse)
See Also:
  • Constructor Details

    • ItemChoice

      public ItemChoice()
  • Method Details

    • getAttribute

      public <T> T getAttribute(String name)
    • getDefaultPrice

      public javax.money.MonetaryAmount getDefaultPrice()
      Gets the default price as appropriate for the targetType.
      Returns:
      The default price as appropriate for the targetType.
    • getDefaultChoicePrice

      public javax.money.MonetaryAmount getDefaultChoicePrice()
      Gets the price of the default SpecificItemChoice or Product as appropriate for the targetType.
      Returns:
      The price of the default SpecificItemChoice or Product as appropriate for the targetType.
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getDefaultChoiceOverridePrice

      @Nullable public javax.money.MonetaryAmount getDefaultChoiceOverridePrice()
      Gets the explicit override price of the default SpecificItemChoice or null if none.
      Returns:
      The explicit override price of the default SpecificItemChoice or null if none.
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getDefaultChoiceUnderlyingSku

      @Nullable public String getDefaultChoiceUnderlyingSku()
      Gets the underlying SKU of the default SpecificItemChoice or Product as appropriate for the targetType.
      Returns:
      The underlying SKU of the default SpecificItemChoice or Product as appropriate for the targetType.
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getDefaultChoiceUnderlyingPricingKey

      @Nullable public String getDefaultChoiceUnderlyingPricingKey()
      Gets the underlying pricing key of the default SpecificItemChoice or Product as appropriate for the targetType.
      Returns:
      The underlying pricing key of the default SpecificItemChoice or Product as appropriate for the targetType.
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getDefaultChoiceUnderlyingDefaultTerm

      @Nullable public ProductTerm getDefaultChoiceUnderlyingDefaultTerm()
      Gets the underlying default ProductTerm of the default SpecificItemChoice or Product as appropriate for the targetType.
      Returns:
      The underlying default ProductTerm of the default SpecificItemChoice or Product as appropriate for the targetType.
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getDefaultChoicePricingKey

      @Nullable public String getDefaultChoicePricingKey()
      Gets the pricing key of the default SpecificItemChoice if applicable for the targetType.
      Returns:
      The pricing key of the default SpecificItemChoice if applicable for the targetType.
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • isDiscountAllowed

      public boolean isDiscountAllowed()
    • getFirstChoicesDefaultPrice

      protected javax.money.MonetaryAmount getFirstChoicesDefaultPrice()
    • getFirstChoicesDefaultOverridePrice

      @Nullable protected javax.money.MonetaryAmount getFirstChoicesDefaultOverridePrice()
    • getFirstChoicesUnderlyingSku

      @Nullable protected String getFirstChoicesUnderlyingSku()
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getFirstChoicesUnderlyingPricingKey

      @Nullable protected String getFirstChoicesUnderlyingPricingKey()
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getFirstChoicesUnderlyingDefaultTerm

      @Nullable protected ProductTerm getFirstChoicesUnderlyingDefaultTerm()
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getFirstChoicesPricingKey

      @Nullable protected String getFirstChoicesPricingKey()
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • matchesDefaultVariantOrProduct

      protected boolean matchesDefaultVariantOrProduct(@NonNull @NonNull SpecificItemChoice choice)
      Whether the underlying Variant or Product of the SpecificItemChoice matches the default of the ItemChoice.
      Parameters:
      choice - The SpecificItemChoice to check
      Returns:
      True if the SpecificItemChoice matches the default of the ItemChoice,
      Since:
      Catalog Service 2.1.5, Release Train 2.1.5
    • getTargetType

      public String getTargetType()
      Identifies the type of items that a customer can choose from, whether specific products, specific variants, or products from a specific category.
      Returns:
      the DefaultItemChoiceTargetType of this item choice
      See Also:
    • getSelectionType

      public String getSelectionType()
      Describes restrictions placed on the customer's ability to select items from the targeted set. Generally, this is a restriction on how many choices can be selected for a single add-to-cart request and, potentially, how quantity is distributed among multiple selected choices.
      Returns:
      the DefaultItemChoiceSelectionType of this item choice
      See Also:
    • getChoiceKey

      public String getChoiceKey()
      The key used during the validation of cart item's configuration to relate this ItemChoice to one of the cart item's dependent items.
      Returns:
      The key used during the validation of cart item's configuration to relate this ItemChoice to one of the cart item's dependent items.
    • getMaximumQuantity

      public Integer getMaximumQuantity()
      The maximum amount of this item that a customer can purchase at a time. If null, this would allow a customer to specify their own quantity for how many of these items they can add to the cart.
      Returns:
      the maximum quantity of the choice's target product(s) that can be added
    • getMinimumQuantity

      public Integer getMinimumQuantity()
      The minimum amount of the item that a customer must purchase.
      Returns:
      the minimum quantity of the choice's target product(s)
    • getOverridePrice

      public javax.money.MonetaryAmount getOverridePrice()

      The price of this choice. If no pricing is specified here, the price of the target product, getDefaultVariant() () variant}, or selected product from the category will be used.

      If this is a DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS or DefaultItemChoiceTargetType.SPECIFIC_VARIANTS then any price set here will be overridden by the item pricing set on any of the specificChoices for that choice.

      Returns:
      the price of this choice
    • getPricingKey

      public String getPricingKey()
      System-wide unique identifier to configure specific pricing for the choice. Relevant if pricing data is managed in a separate system or data store, like the Broadleaf pricing services.
      Returns:
      a unique key to identify this choice
    • getCategory

      public Category getCategory()
      The Category which the choice will be chosen from by the customer if the targetType is DefaultItemChoiceTargetType.CATEGORY.
      Returns:
      the category from which the choice will be chosen from or {@link null} if targetType is not DefaultItemChoiceTargetType.CATEGORY
    • getDefaultProductInCategory

      public Product getDefaultProductInCategory()
      The default product that can be used when driving customer selections if the targetType is DefaultItemChoiceTargetType.CATEGORY.
      Returns:
      the defaulted selection for this choice if the targetType is DefaultItemChoiceTargetType.CATEGORY, null otherwise or if there is no default selection
    • getDefaultProduct

      public Product getDefaultProduct()
      The default product that can be used when driving customer selections if the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS. Can be null.
      Returns:
      the defaulted selection for this choice if the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS, null otherwise or if there is no default selection
    • getDefaultVariant

      public Variant getDefaultVariant()
      The default variant that can be used when driving customer selections if the targetType is DefaultItemChoiceTargetType.SPECIFIC_VARIANTS. Can be null.
      Returns:
      the defaulted selection for this choice if the targetType is DefaultItemChoiceTargetType.SPECIFIC_VARIANTS, null otherwise or if there is no default selection
    • getSpecificChoices

      public List<SpecificItemChoice> getSpecificChoices()
      If the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS or DefaultItemChoiceTargetType.SPECIFIC_VARIANTS this holds the manually-curated options that the customer can choose from. This also allows for specific override pricing on an item-by-item basis
      Returns:
      the explicit choices for DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS or DefaultItemChoiceTargetType.SPECIFIC_VARIANTS value of the targetType
    • getSpecificItemChoice

      public SpecificItemChoice getSpecificItemChoice()
      If the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCT or DefaultItemChoiceTargetType.SPECIFIC_VARIANT this holds the manually selected option that the customer can choose to add on. This also allows for specific override pricing.
      Returns:
      the explicit choice for DefaultItemChoiceTargetType.SPECIFIC_PRODUCT or DefaultItemChoiceTargetType.SPECIFIC_VARIANT value of the targetType
    • isPriceOverridden

      public boolean isPriceOverridden()
      Whether this item choice's price is overridden, via the direct overridePrice or a price data targeting its pricingKey. This serves validation and metadata purposes.
      Since:
      Catalog Services 2.3.0, ReleaseTrain 2.3.0
    • getAttributes

      public Map<String,Object> getAttributes()
      Miscellaneous attributes for this tag.
      Returns:
      Miscellaneous attributes for this tag.
    • isSubscription

      public boolean isSubscription()
      Whether this addon is a subscription addon.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • isHasPostPurchaseEditRules

      public boolean isHasPostPurchaseEditRules()
      Whether this has post purchase edit rules.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • isAllowEditAfterInitialPurchase

      public boolean isAllowEditAfterInitialPurchase()
      Whether edit is allowed after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • isAllowQtyEditAfterInitialPurchase

      public boolean isAllowQtyEditAfterInitialPurchase()
      Whether quantity can be edited after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • isAllowAddAfterInitialPurchase

      public boolean isAllowAddAfterInitialPurchase()
      Whether the customer is allowed to add an optional item after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • isAllowRemoveAfterInitialPurchase

      public boolean isAllowRemoveAfterInitialPurchase()
      Whether the customer is allowed to remove an optional item after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • getRestrictQtyDecreaseAfterDays

      public Integer getRestrictQtyDecreaseAfterDays()
      The number of days after which a quantity decrease is not allowed until the window re-opens at the next billing cycle. null means no restriction.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • getRestrictRemovalAfterDays

      public Integer getRestrictRemovalAfterDays()
      The number of days after which an item can't be removed from the subscription, until the window re-opens at the next billing cycle. null means no restriction.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • isSeparateFromPrimaryItem

      public boolean isSeparateFromPrimaryItem()
      Whether this is a sub-item on the main subscription or a separate item.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setTargetType

      public void setTargetType(String targetType)
      Identifies the type of items that a customer can choose from, whether specific products, specific variants, or products from a specific category.
      Parameters:
      targetType - the DefaultItemChoiceTargetType of this item choice
      See Also:
    • setSelectionType

      public void setSelectionType(String selectionType)
      Describes restrictions placed on the customer's ability to select items from the targeted set. Generally, this is a restriction on how many choices can be selected for a single add-to-cart request and, potentially, how quantity is distributed among multiple selected choices.
      Parameters:
      selectionType - the DefaultItemChoiceSelectionType of this item choice
      See Also:
    • setChoiceKey

      public void setChoiceKey(String choiceKey)
      The key used during the validation of cart item's configuration to relate this ItemChoice to one of the cart item's dependent items.
      Parameters:
      choiceKey - The key used during the validation of cart item's configuration to relate this ItemChoice to one of the cart item's dependent items.
    • setMaximumQuantity

      public void setMaximumQuantity(Integer maximumQuantity)
      The maximum amount of this item that a customer can purchase at a time. If null, this would allow a customer to specify their own quantity for how many of these items they can add to the cart.
      Parameters:
      maximumQuantity - the maximum quantity of the choice's target product(s) that can be added
    • setMinimumQuantity

      public void setMinimumQuantity(Integer minimumQuantity)
      The minimum amount of the item that a customer must purchase.
      Parameters:
      minimumQuantity - the minimum quantity of the choice's target product(s)
    • setOverridePrice

      public void setOverridePrice(javax.money.MonetaryAmount overridePrice)

      The price of this choice. If no pricing is specified here, the price of the target product, getDefaultVariant() () variant}, or selected product from the category will be used.

      If this is a DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS or DefaultItemChoiceTargetType.SPECIFIC_VARIANTS then any price set here will be overridden by the item pricing set on any of the specificChoices for that choice.

      Parameters:
      overridePrice - the price of this choice
    • setDiscountAllowed

      public void setDiscountAllowed(boolean discountAllowed)
      Dictates whether or not discounts are allowed to be applied to this choice.
      Parameters:
      discountAllowed - true if discounts are allowed to be applied to this choice, false otherwise
    • setPricingKey

      public void setPricingKey(String pricingKey)
      System-wide unique identifier to configure specific pricing for the choice. Relevant if pricing data is managed in a separate system or data store, like the Broadleaf pricing services.
      Parameters:
      pricingKey - a unique key to identify this choice (usually a UUID)
    • setCategory

      public void setCategory(Category category)
      The Category which the choice will be chosen from by the customer if the targetType is DefaultItemChoiceTargetType.CATEGORY.
      Parameters:
      category - the category from which the choice will be chosen from
    • setDefaultProductInCategory

      public void setDefaultProductInCategory(Product defaultProductInCategory)
      The default product that can be used when driving customer selections if the targetType is DefaultItemChoiceTargetType.CATEGORY.
      Parameters:
      defaultProduct - the default product that is automatically selected when the targetType is DefaultItemChoiceTargetType.CATEGORY. Should come from within the category
    • setDefaultProduct

      public void setDefaultProduct(Product defaultProduct)
      The default product that can be used when driving customer selections if the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS. Can be null.
      Parameters:
      defaultProduct - the default product that is automatically selected when the targetType is { DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS. Should come from the specific set of products in specificChoices
    • setDefaultVariant

      public void setDefaultVariant(Variant defaultVariant)
      The default variant that can be used when driving customer selections if the targetType is DefaultItemChoiceTargetType.SPECIFIC_VARIANTS. Can be null.
      Parameters:
      defaultVariant - the default variant that is automatically selected when the targetType is DefaultItemChoiceTargetType.SPECIFIC_VARIANTS. Should come from the explicit set of variants in specificChoices
    • setSpecificChoices

      public void setSpecificChoices(List<SpecificItemChoice> specificChoices)
      If the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCTS or DefaultItemChoiceTargetType.SPECIFIC_VARIANTS this holds the manually-curated options that the customer can choose from. This also allows for specific override pricing on an item-by-item basis
      Parameters:
      specificChoices - manually-curated options for the user to choose from for this choice
    • setSpecificItemChoice

      public void setSpecificItemChoice(SpecificItemChoice specificItemChoice)
      If the targetType is DefaultItemChoiceTargetType.SPECIFIC_PRODUCT or DefaultItemChoiceTargetType.SPECIFIC_VARIANT this holds the manually selected option that the customer can choose to add on. This also allows for specific override pricing.
      Parameters:
      specificChoice - manually selected option for the user to choose to add on
    • setPriceOverridden

      public void setPriceOverridden(boolean priceOverridden)
      Whether this item choice's price is overridden, via the direct overridePrice or a price data targeting its pricingKey. This serves validation and metadata purposes.
      Since:
      Catalog Services 2.3.0, ReleaseTrain 2.3.0
    • setAttributes

      public void setAttributes(Map<String,Object> attributes)
      Miscellaneous attributes for this tag.
      Parameters:
      attributes - Miscellaneous attributes for this tag.
    • setSubscription

      public void setSubscription(boolean isSubscription)
      Whether this addon is a subscription addon.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setHasPostPurchaseEditRules

      public void setHasPostPurchaseEditRules(boolean hasPostPurchaseEditRules)
      Whether this has post purchase edit rules.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setAllowEditAfterInitialPurchase

      public void setAllowEditAfterInitialPurchase(boolean allowEditAfterInitialPurchase)
      Whether edit is allowed after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setAllowQtyEditAfterInitialPurchase

      public void setAllowQtyEditAfterInitialPurchase(boolean allowQtyEditAfterInitialPurchase)
      Whether quantity can be edited after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setAllowAddAfterInitialPurchase

      public void setAllowAddAfterInitialPurchase(boolean allowAddAfterInitialPurchase)
      Whether the customer is allowed to add an optional item after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setAllowRemoveAfterInitialPurchase

      public void setAllowRemoveAfterInitialPurchase(boolean allowRemoveAfterInitialPurchase)
      Whether the customer is allowed to remove an optional item after initial purchase.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setRestrictQtyDecreaseAfterDays

      public void setRestrictQtyDecreaseAfterDays(Integer restrictQtyDecreaseAfterDays)
      The number of days after which a quantity decrease is not allowed until the window re-opens at the next billing cycle. null means no restriction.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setRestrictRemovalAfterDays

      public void setRestrictRemovalAfterDays(Integer restrictRemovalAfterDays)
      The number of days after which an item can't be removed from the subscription, until the window re-opens at the next billing cycle. null means no restriction.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • setSeparateFromPrimaryItem

      public void setSeparateFromPrimaryItem(boolean isSeparateFromPrimaryItem)
      Whether this is a sub-item on the main subscription or a separate item.
      Since:
      Catalog Services 2.3.0, Release Train 2.3.0
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • canEqual

      protected boolean canEqual(Object other)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object