Class DefaultProductService<P extends Product>
java.lang.Object
com.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P>
com.broadleafcommerce.data.tracking.core.service.BaseRsqlCrudEntityService<P>
com.broadleafcommerce.catalog.service.product.DefaultProductService<P>
- All Implemented Interfaces:
ProductService<P>
,com.broadleafcommerce.data.tracking.core.service.CrudEntityService<P>
,com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityService<P>
public class DefaultProductService<P extends Product>
extends com.broadleafcommerce.data.tracking.core.service.BaseRsqlCrudEntityService<P>
implements ProductService<P>
- Author:
- Jeff Fischer, Samarth Dhruva (samarthd)
-
Field Summary
-
Constructor Summary
ConstructorDescriptionDefaultProductService
(ProductRepository<com.broadleafcommerce.data.tracking.core.Trackable> repository, com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityHelper helper, VariantService<Variant> variantService, CategoryProductService<CategoryProduct> categoryProductService, com.broadleafcommerce.common.extension.cache.CacheStateManager cacheStateManager, com.broadleafcommerce.data.tracking.core.filtering.fetch.FilterParser<cz.jirutka.rsql.parser.ast.Node> parser, com.broadleafcommerce.common.extension.TypeFactory typeFactory) -
Method Summary
Modifier and TypeMethodDescriptionprotected CategoryProduct
buildPrimaryCategoryProduct
(@NonNull String productId, @NonNull String categoryId) Builds a newCategoryProduct
POJO forproductId
andcategoryId
withCategoryProduct.isPrimary()
set to true.protected boolean
changeContainerIdAlreadySet
(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected List<ProductOption>
clearReferencedOptions
(P businessInstance) Iterates through aProduct.getOptions()
list to clear generated fields ofoptions
whereProductOption.isAddedByReference()
is true.protected com.broadleafcommerce.data.tracking.core.filtering.domain.ChangeContainer
copyChangeContainer
(com.broadleafcommerce.data.tracking.core.filtering.domain.ChangeContainer changeContainer) Performs the same behavior asBaseCrudEntityService.create(Object, ContextInfo)
with the addition ofProduct.getPrimaryCategory()
management.void
boolean
existsById
(String id, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Returns whether there is a product with the given context ID in the data store.protected com.broadleafcommerce.common.extension.cache.key.ContextKeyGen
protected com.broadleafcommerce.common.extension.cache.key.ContextKeyGen
protected CategoryProductService<CategoryProduct>
protected Optional<CategoryProduct>
getCurrentPrimaryCategoryProduct
(@NonNull String productId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the currentprimary
category product for the givenproductId
.protected com.broadleafcommerce.data.tracking.core.filtering.fetch.FilterParser<cz.jirutka.rsql.parser.ast.Node>
protected ProductAssetService<ProductAsset>
protected ProductTagService<ProductTag>
protected PromotionalProductService<PromotionalProduct>
protected ProductRepository<com.broadleafcommerce.data.tracking.core.Trackable>
protected String
getSandboxRecordValidationError
(@NonNull String entityType, @NonNull String productIdToDelete, long count) protected com.broadleafcommerce.translation.service.TranslationEntityService<com.broadleafcommerce.translation.domain.Translation>
protected com.broadleafcommerce.common.extension.TypeFactory
protected VariantService<Variant>
protected void
managePrimaryCategory
(@NonNull String productId, Category requestedPrimary, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Enables direct management of theprimary
category product relationship for a product.protected com.broadleafcommerce.data.tracking.core.context.ContextInfo
overrideChangeContainerId
(String changeContainerId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) org.springframework.data.domain.Page<P>
readAllByCategoryContextId
(String categoryId, Boolean isSorted, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable page, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Finds all products in a given category.readAllByContextIds
(@NonNull Collection<String> productIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Return all of the products with IDs in the supplied collection.org.springframework.data.domain.Page<P>
readAllByContextIds
(Collection<String> productIds, org.springframework.data.domain.Pageable page, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Return all of the products with IDs in the supplied list.readAllByExternalIds
(Collection<String> externalIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Fetches products based on the provided external IDs.readAllByFiltersExcluding
(cz.jirutka.rsql.parser.ast.Node filters, List<String> exclusions, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Returns all of the products matching the given filters, excluding any products whose IDs match any of the values inexclusions
.org.springframework.data.domain.Page<P>
readAllByName
(String name, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable page, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) readAllByUris
(@NonNull Iterable<String> uris, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the product matching theuris
.readAllSkusByProduct
(P product, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Reads all the SKUs for the the specified product.readAllSkusByProductId
(@NonNull String productId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Reads all the SKUs for the the specified product ID.readAllSkusByProductIdAndQuery
(@NonNull String productId, @NonNull String sku, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable page, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Reads all the SKUs for the the specified product ID and SKU identifier.readAllUniqueIds
(int page, cz.jirutka.rsql.parser.ast.Node filters) Return all of the unique product IDs.readAllUniqueIdsPerContext
(int page, cz.jirutka.rsql.parser.ast.Node filters, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Retrieves a narrowed list of unique product context IDs narrowed on aContextInfo
readAllUniqueIdsPerContextWithOptionalStipulations
(cz.jirutka.rsql.parser.ast.Node filters, ProductStipulations stipulations, int pageSize, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Retrieves a list of unique product context IDs narrowed on aContextInfo
Read a product by a given URIreplace
(@NonNull String id, P businessInstance, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.replace(String, Object, ContextInfo)
with the addition ofProduct.getPrimaryCategory()
management.void
setCacheByActiveProductKeyGen
(com.broadleafcommerce.common.extension.cache.key.ContextKeyGen cacheByActiveProductKeyGen) void
setCacheByActiveProductUriKeyGen
(com.broadleafcommerce.common.extension.cache.key.ContextKeyGen cacheByActiveProductUriKeyGen) void
setProductAssetService
(ProductAssetService<ProductAsset> productAssetService) void
setProductTagService
(ProductTagService<ProductTag> productTagService) void
setPromotionalProductService
(PromotionalProductService<PromotionalProduct> promotionalProductService) void
setTranslationEntityService
(com.broadleafcommerce.translation.service.TranslationEntityService<com.broadleafcommerce.translation.domain.Translation> translationEntityService) protected void
throwIfHasRecords
(@NonNull BiFunction<Collection<String>, com.broadleafcommerce.data.tracking.core.context.ContextInfo, Long> countFunction, @NonNull String entityType, @NonNull String productIdToDelete, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Throws anUnsupportedOperationException
if the given count function has a count > 0.protected void
unsetCurrentPrimaryCategoryProduct
(@NonNull String productId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the currentprimary
category product for the givenproductId
and unmarks it as primary if it exists.update
(@NonNull String id, P businessInstance, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) protected void
validateNoNonProductionRecordsForRelatedEntities
(@NonNull String productIdToDelete, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Validates that there are no non-production records for the relationship entities for the product being deleted.Methods inherited from class com.broadleafcommerce.data.tracking.core.service.BaseRsqlCrudEntityService
getRsqlHelper, readAll, readAll, readAll, readAll
Methods inherited from class com.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService
convertFromPersistentDomain, convertToPersistentDomain, createAll, createAllAllowingPartialSuccess, getHelper, getSortPositionStrategy, readAll, readAll, readAll, readAllByContextId, readByContextId, replaceAll, replaceAllAllowingPartialSuccess, setSortPositionStrategy, updateAll, updateAllAllowingPartialSuccess, updateSort
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.broadleafcommerce.data.tracking.core.service.CrudEntityService
createAll, createAllAllowingPartialSuccess, readAll, readAll, readAll, readAllByContextId, readByContextId, replaceAll, replaceAllAllowingPartialSuccess, updateAll, updateAllAllowingPartialSuccess, updateSort
Methods inherited from interface com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityService
readAll, readAll, readAll, readAll
-
Field Details
-
CACHE_BY_ACTIVE_PRODUCT
- See Also:
-
CACHE_BY_ACTIVE_PRODUCT_URI
- See Also:
-
-
Constructor Details
-
DefaultProductService
public DefaultProductService(ProductRepository<com.broadleafcommerce.data.tracking.core.Trackable> repository, com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityHelper helper, VariantService<Variant> variantService, CategoryProductService<CategoryProduct> categoryProductService, @Nullable com.broadleafcommerce.common.extension.cache.CacheStateManager cacheStateManager, com.broadleafcommerce.data.tracking.core.filtering.fetch.FilterParser<cz.jirutka.rsql.parser.ast.Node> parser, com.broadleafcommerce.common.extension.TypeFactory typeFactory)
-
-
Method Details
-
existsById
public boolean existsById(String id, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductService
Returns whether there is a product with the given context ID in the data store.- Specified by:
existsById
in interfaceProductService<P extends Product>
- Parameters:
id
- the ID to search forcontextInfo
- context information around sandboxing and multitenant state- Returns:
- true if a product exists matching the given ID, false otherwise
-
readAllByName
public org.springframework.data.domain.Page<P> readAllByName(@Nullable String name, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable org.springframework.data.domain.Pageable page, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) - Specified by:
readAllByName
in interfaceProductService<P extends Product>
-
readAllByContextIds
public org.springframework.data.domain.Page<P> readAllByContextIds(Collection<String> productIds, @Nullable org.springframework.data.domain.Pageable page, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Return all of the products with IDs in the supplied list.- Specified by:
readAllByContextIds
in interfaceProductService<P extends Product>
- Parameters:
productIds
- the product context IDs to search forpage
- the requested page of results from the databasecontext
- the context to perform the operation in- Returns:
- the products that matched with the IDs in the given list
-
readAllByCategoryContextId
public org.springframework.data.domain.Page<P> readAllByCategoryContextId(String categoryId, @Nullable Boolean isSorted, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable org.springframework.data.domain.Pageable page, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Finds all products in a given category.- Specified by:
readAllByCategoryContextId
in interfaceProductService<P extends Product>
- Parameters:
categoryId
- the context id of the category.isSorted
- – Whether to return CategoryProducts where CategoryProduct.sorted is true, else false.filters
- additional filters to apply in the query. Should be EmptyNode if no additional filters should be applied.page
- the requested amount of results from the database. -1 indicates no limit.context
- Request context information around sandbox and multitenant state- Returns:
- All the products in the given category
-
readAllByFiltersExcluding
public Stream<P> readAllByFiltersExcluding(@Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable List<String> exclusions, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductService
Returns all of the products matching the given filters, excluding any products whose IDs match any of the values inexclusions
.- Specified by:
readAllByFiltersExcluding
in interfaceProductService<P extends Product>
- Parameters:
filters
- the RSQLNode
used to restrict results, must not be nullexclusions
- a list of product IDs that should be excluded from the resultscontextInfo
- context information surrounding sandboxing and multitenant state- Returns:
- all of the products matching the given filters, excluding any products whose IDs
match any of the values in
exclusions
-
readAllByContextIds
public List<P> readAllByContextIds(@NonNull @NonNull @NonNull Collection<String> productIds, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductService
Return all of the products with IDs in the supplied collection.- Specified by:
readAllByContextIds
in interfaceProductService<P extends Product>
- Parameters:
productIds
- the product context IDs to search forcontextInfo
- context information surrounding sandboxing and multitenant state- Returns:
- the products that matched with the IDs in the given collection
-
readByUri
public Optional<P> readByUri(String uri, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Read a product by a given URI- Specified by:
readByUri
in interfaceProductService<P extends Product>
- Parameters:
uri
- the URI to search for- Returns:
- an Optional representing a found Product or an empty optional if none found
-
readAllUniqueIds
Description copied from interface:ProductService
Return all of the unique product IDs.- Specified by:
readAllUniqueIds
in interfaceProductService<P extends Product>
- Parameters:
page
- the requested amount of results from the database. -1 indicates no limit.filters
- additional filters to apply in the query. Should beEmptyNode
if no additional filters should be applied.- Returns:
- unique product IDs
-
readAllUniqueIdsPerContext
public List<String> readAllUniqueIdsPerContext(int page, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Retrieves a narrowed list of unique product context IDs narrowed on aContextInfo
- Specified by:
readAllUniqueIdsPerContext
in interfaceProductService<P extends Product>
- Parameters:
page
- the requested amount of results from the database. -1 indicates no limit.filters
- additional filters to apply in the query. Should beEmptyNode
if no additional filters should be applied.context
- The context used to help narrowing. For example, narrowing results to a particular catalog.- Returns:
- The narrowed list of unique product context IDs
-
readAllUniqueIdsPerContextWithOptionalStipulations
public List<String> readAllUniqueIdsPerContextWithOptionalStipulations(@Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable ProductStipulations stipulations, int pageSize, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Retrieves a list of unique product context IDs narrowed on aContextInfo
- Specified by:
readAllUniqueIdsPerContextWithOptionalStipulations
in interfaceProductService<P extends Product>
- Parameters:
filters
- additional filters to apply in the query.stipulations
- Additional filtering context to be applied during product fetch. Optional.pageSize
- the requested amount of results from the database. -1 indicates no limit.context
- The context used to help narrowing. For example, narrowing results to a particular catalog.- Returns:
- The narrowed list of unique product context IDs
-
readAllSkusByProductId
public List<SKUContainer> readAllSkusByProductId(@NonNull @NonNull @NonNull String productId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Reads all the SKUs for the the specified product ID.- Specified by:
readAllSkusByProductId
in interfaceProductService<P extends Product>
- Parameters:
productId
- the product IDcontext
- the information surrounding sandboxing and multitenant state- Returns:
- the list of
SKUContainer
for the specified product ID - See Also:
-
readAllSkusByProduct
public List<SKUContainer> readAllSkusByProduct(@NonNull @NonNull P product, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Reads all the SKUs for the the specified product. This method is the same asProductService.readAllSkusByProductId(String, ContextInfo)
except it does not perform any query forProduct
and directly uses the POJO's id and sku for producing the result.- Specified by:
readAllSkusByProduct
in interfaceProductService<P extends Product>
- Parameters:
product
- theProduct
context
- the information surrounding sandboxing and multitenant state- Returns:
- the list of
SKUContainer
for the specified product ID
-
readAllSkusByProductIdAndQuery
public List<SKUContainer> readAllSkusByProductIdAndQuery(@NonNull @NonNull @NonNull String productId, @NonNull @NonNull @NonNull String sku, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable org.springframework.data.domain.Pageable page, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductService
Reads all the SKUs for the the specified product ID and SKU identifier.- Specified by:
readAllSkusByProductIdAndQuery
in interfaceProductService<P extends Product>
- Parameters:
productId
- the product IDsku
- the SKU identifier to searchfilters
- the RSQLNode
used to restrict resultpage
- the requested page of results from the databasecontext
- the information surrounding sandboxing and multitenant state- Returns:
- the list of
SKUContainer
for the specified Product id
-
getRepositoryDomain
- Specified by:
getRepositoryDomain
in interfaceProductService<P extends Product>
-
readAllByUris
public List<P> readAllByUris(@NonNull @NonNull Iterable<String> uris, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductService
Finds the product matching theuris
.- Specified by:
readAllByUris
in interfaceProductService<P extends Product>
- Parameters:
uris
- URIs to matchcontextInfo
- the information surrounding sandboxing and multitenant state- Returns:
- The product matching the
uris
-
readAllByExternalIds
public List<P> readAllByExternalIds(Collection<String> externalIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductService
Fetches products based on the provided external IDs.- Specified by:
readAllByExternalIds
in interfaceProductService<P extends Product>
- Parameters:
externalIds
- a collection of external IDscontextInfo
- the information surrounding sandboxing and multitenant state- Returns:
- Products matching the provided external IDs
-
create
public P create(@NonNull P businessInstance, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.create(Object, ContextInfo)
with the addition ofProduct.getPrimaryCategory()
management.- Specified by:
create
in interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>
- Overrides:
create
in classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends Product>
- Parameters:
businessInstance
- The business domain instance. In general, theDomainMapperManager
is responsible for converting to a repository platform type for persistence.context
- Context information used to discriminate the correct version of an entity by context id when multiple verions may be available across sandboxes, catalogs and applications.- Returns:
- the created product
-
update
-
replace
public P replace(@NonNull @NonNull String id, @NonNull P businessInstance, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.replace(String, Object, ContextInfo)
with the addition ofProduct.getPrimaryCategory()
management.- Specified by:
replace
in interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>
- Overrides:
replace
in classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends Product>
- Parameters:
id
- The context id for the entity. This is the id by which the business recognizes the item.businessInstance
- The payload type that domain class should be converted to. In general, the payload is what the rest API responds with.context
- Context information used to discriminate the correct version of an entity by context id when multiple versions may be available across sandboxes, catalogs and applications.- Returns:
- the replaced product
-
managePrimaryCategory
protected void managePrimaryCategory(@NonNull @NonNull String productId, @Nullable Category requestedPrimary, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Enables direct management of theprimary
category product relationship for a product.- If
requestedPrimary
is null or doesn't have an ID, the current primary category-product relationship will be unmarked as primary if it exists - If
requestedPrimary
is already the primary category for the product, nothing will be changed - If the product currently has a different primary category, it will be unmarked as primary before the new primary is set
- If there is already a category-product relationship between the product and the requested primary, it will simply be updated to be set as primary
- If there is not already a category-product relationship between the product and the requested primary, a new one will be created
- Parameters:
productId
- the id of the product for which the primary category needs to be managedrequestedPrimary
- the requested primary category (typically supplied by an API caller inProduct.getPrimaryCategory()
)contextInfo
- context information surrounding sandboxing and multitenant state
- If
-
changeContainerIdAlreadySet
protected boolean changeContainerIdAlreadySet(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
overrideChangeContainerId
@Nullable protected com.broadleafcommerce.data.tracking.core.context.ContextInfo overrideChangeContainerId(String changeContainerId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
copyChangeContainer
protected com.broadleafcommerce.data.tracking.core.filtering.domain.ChangeContainer copyChangeContainer(com.broadleafcommerce.data.tracking.core.filtering.domain.ChangeContainer changeContainer) -
unsetCurrentPrimaryCategoryProduct
protected void unsetCurrentPrimaryCategoryProduct(@NonNull @NonNull String productId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the currentprimary
category product for the givenproductId
and unmarks it as primary if it exists.- Parameters:
productId
- the ID of the product whose primary category product should be unmarkedcontextInfo
- context information surrounding sandboxing and multitenant state
-
getCurrentPrimaryCategoryProduct
protected Optional<CategoryProduct> getCurrentPrimaryCategoryProduct(@NonNull @NonNull String productId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the currentprimary
category product for the givenproductId
.- Parameters:
productId
- the ID of the product whose primary category product should be foundcontextInfo
- context information surrounding sandboxing and multitenant state- Returns:
- an
Optional
containing the primary category product if found, elseOptional.empty()
-
buildPrimaryCategoryProduct
protected CategoryProduct buildPrimaryCategoryProduct(@NonNull @NonNull String productId, @NonNull @NonNull String categoryId) Builds a newCategoryProduct
POJO forproductId
andcategoryId
withCategoryProduct.isPrimary()
set to true.- Parameters:
productId
- the ID of the product to set on the new category-productcategoryId
- the ID of the category to set on the new category-product- Returns:
- a new primary
CategoryProduct
POJO for the given entities
-
delete
public void delete(@NonNull @NonNull String id, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) -
validateNoNonProductionRecordsForRelatedEntities
protected void validateNoNonProductionRecordsForRelatedEntities(@NonNull @NonNull String productIdToDelete, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Validates that there are no non-production records for the relationship entities for the product being deleted.- Parameters:
productIdToDelete
- the id of the product being deletedcontext
- context info for multitenant and sandbox conditions
-
throwIfHasRecords
protected void throwIfHasRecords(@NonNull @NonNull BiFunction<Collection<String>, com.broadleafcommerce.data.tracking.core.context.ContextInfo, Long> countFunction, @NonNull @NonNull String entityType, @NonNull @NonNull String productIdToDelete, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Throws anUnsupportedOperationException
if the given count function has a count > 0.- Parameters:
countFunction
- aBiFunction
used to get the count of non-production records matching the product identityType
- the type of entity that the count function is for, e.g. Variant, ProductTagproductIdToDelete
- the id of the product being deletedcontext
- context info for multitenant and sandbox conditions
-
getSandboxRecordValidationError
-
clearReferencedOptions
Iterates through aProduct.getOptions()
list to clear generated fields ofoptions
whereProductOption.isAddedByReference()
is true.- Parameters:
businessInstance
- the business instance- Returns:
- a List of
ProductOption
without fields generated by reference
-
getRepository
-
getVariantService
-
getCategoryProductService
-
setCacheByActiveProductKeyGen
@Autowired @Qualifier("catalogCacheByActiveProduct") public void setCacheByActiveProductKeyGen(@Nullable com.broadleafcommerce.common.extension.cache.key.ContextKeyGen cacheByActiveProductKeyGen) - See Also:
-
getCacheByActiveProductKeyGen
@Nullable protected com.broadleafcommerce.common.extension.cache.key.ContextKeyGen getCacheByActiveProductKeyGen()- See Also:
-
setCacheByActiveProductUriKeyGen
@Autowired @Qualifier("catalogCacheByActiveProductUri") public void setCacheByActiveProductUriKeyGen(@Nullable com.broadleafcommerce.common.extension.cache.key.ContextKeyGen cacheByActiveProductUriKeyGen) - See Also:
-
getCacheByActiveProductUriKeyGen
@Nullable protected com.broadleafcommerce.common.extension.cache.key.ContextKeyGen getCacheByActiveProductUriKeyGen()- See Also:
-
getParser
protected com.broadleafcommerce.data.tracking.core.filtering.fetch.FilterParser<cz.jirutka.rsql.parser.ast.Node> getParser() -
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory() -
getProductTagService
-
setProductTagService
-
getPromotionalProductService
-
setPromotionalProductService
@Autowired @Lazy public void setPromotionalProductService(PromotionalProductService<PromotionalProduct> promotionalProductService) -
getProductAssetService
-
setProductAssetService
@Autowired public void setProductAssetService(ProductAssetService<ProductAsset> productAssetService) -
getTranslationEntityService
protected com.broadleafcommerce.translation.service.TranslationEntityService<com.broadleafcommerce.translation.domain.Translation> getTranslationEntityService() -
setTranslationEntityService
@Autowired public void setTranslationEntityService(com.broadleafcommerce.translation.service.TranslationEntityService<com.broadleafcommerce.translation.domain.Translation> translationEntityService)
-