Class DefaultProductService<P extends Product>
- All Implemented Interfaces:
ProductService<P>,com.broadleafcommerce.data.tracking.core.service.CrudEntityService<P>,com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityService<P>
- Author:
- Jeff Fischer, Samarth Dhruva (samarthd)
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionDefaultProductService(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 CategoryProductbuildPrimaryCategoryProduct(@NonNull String productId, @NonNull String categoryId) Builds a newCategoryProductPOJO forproductIdandcategoryIdwithCategoryProduct.isPrimary()set to true.protected booleanchangeContainerIdAlreadySet(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected List<ProductOption>clearReferencedOptions(P businessInstance) Iterates through aProduct.getOptions()list to clear generated fields ofoptionswhereProductOption.isAddedByReference()is true.protected booleancontainsAnyProductionLevelFieldChanges(com.broadleafcommerce.data.tracking.core.filtering.business.domain.ContextState contextState) protected com.broadleafcommerce.data.tracking.core.filtering.domain.ChangeContainercopyChangeContainer(com.broadleafcommerce.data.tracking.core.filtering.domain.ChangeContainer changeContainer) Performs the same behavior asBaseCrudEntityService.create(Object, ContextInfo)with the addition ofProduct.getPrimaryCategory()andProductCharacteristicmanagement.createAll(List<P> businessInstances, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.createAll(List, ContextInfo)with the addition ofProductCharacteristicmanagement.com.broadleafcommerce.data.tracking.core.service.BulkPersistenceResponse<P>createAllAllowingPartialSuccess(List<P> businessInstances, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) voidprotected StringdetermineTargetCatalogIdForDelete(P product, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Seedelete(String, ContextInfo)for broader context on why this evaluation is necessary.protected <V> VdoWithForceBuiltAndSuppressedSingleIndexRequest(Supplier<V> supplier) Do the requested work, simultaneously leveragingSuppressNotificationContextforSingleIndexRequestto prevent initial message send, but still forcing the notification state to be built viaSingleIndexRequestNotificationStateBuildContextbooleanexistsByBusinessType(String typeKey, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Checks whether anyProductsexist that use the givenBusinessType typeKey.booleanexistsById(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.extractSuccessfulProductIds(com.broadleafcommerce.data.tracking.core.service.BulkPersistenceResponse<P> bulkPersistenceResponse) protected List<ProductCharacteristic>gatherAndValidateDeletableProductCharacteristics(P product, String targetCatalogId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) protected BusinessTypeService<BusinessType>protected com.broadleafcommerce.common.extension.cache.key.ContextKeyGenprotected com.broadleafcommerce.common.extension.cache.key.ContextKeyGenprotected com.broadleafcommerce.data.tracking.core.policy.trackable.CatalogFinder<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog>protected CategoryProductService<CategoryProduct>protected ProductCharacteristicManagementUtility<P>protected CharacteristicService<Characteristic>protected voidgetCollectedPersistedDomainInstancesAndNotifySingleIndexRequest(Set<String> productContextIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) In product CRUD flows, we don't want to emit theSingleIndexRequeston the product until the characteristics have been properly persisted/updated as well (thereby guaranteeing that reindexing will only be requested once everything has settled).protected Optional<CategoryProduct>getCurrentPrimaryCategoryProduct(@NonNull String productId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the currentprimarycategory product for the givenproductId.protected com.broadleafcommerce.common.messaging.notification.NotificationManagerprotected com.broadleafcommerce.data.tracking.core.context.ContextInfogetOverriddenChangeContainerContext(com.broadleafcommerce.data.tracking.core.context.ContextInfo context, String product) protected StringgetOverrideOrBaseCatalogId(com.broadleafcommerce.data.tracking.core.filtering.business.domain.ContextState contextState) protected com.broadleafcommerce.data.tracking.core.filtering.fetch.FilterParser<cz.jirutka.rsql.parser.ast.Node>protected ProductAssetService<ProductAsset>protected ProductHydrationServiceprotected ProductTagService<ProductTag>protected PromotionalProductService<PromotionalProduct>protected ProductRepository<com.broadleafcommerce.data.tracking.core.Trackable>protected StringgetSandboxRecordValidationError(@NonNull String entityType, @NonNull String productIdToDelete, long count) protected com.broadleafcommerce.data.tracking.core.messaging.search.SingleIndexRequestMessageFactoryprotected com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtilprotected com.broadleafcommerce.translation.service.TranslationEntityService<com.broadleafcommerce.translation.domain.Translation>protected com.broadleafcommerce.common.extension.TypeFactoryprotected VariantService<Variant>protected booleanisEligibleForClearOverride(Product product, String targetCatalogId) protected booleanisEntityDirectlyDefinedInTargetCatalog(Product product, String targetCatalogId) protected voidmanagePrimaryCategory(@NonNull String productId, Category requestedPrimary, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Enables direct management of theprimarycategory product relationship for a product.protected ProductCharacteristicManagementResultmanageProductCharacteristics(@NonNull String id, P apiPayload, P persistedProduct, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Manages the characteristics of a single product.protected voidnotifySingleIndexRequest(com.broadleafcommerce.data.tracking.core.Trackable domain, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Replicates whatCrudEntityHelper.notify(Trackable, ContextInfo, NotificationStateRepository)does forSingleIndexRequest.protected com.broadleafcommerce.data.tracking.core.context.ContextInfooverrideChangeContainerId(String changeContainerId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidpopulateFullyPersistedProducts(ProductCharacteristicManagementRequest request, com.broadleafcommerce.data.tracking.core.service.BulkPersistenceResponse<P> response) protected voidpopulateFullyPersistedProducts(ProductCharacteristicManagementRequest request, List<P> persistedProducts) 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.org.springframework.data.domain.Page<P>readAllByCategoryContextIdAndSortType(String categoryId, String sortType, 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 and sorts them by the given sort type.readAllByContextIdAndInheritanceLine(Set<String> contextIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds all products by context id for a given catalog inheritance linereadAllByContextIds(@NonNull Collection<String> productIds, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Return all of the products with IDs in the supplied collection.readAllByContextIds(@NonNull Collection<String> ids, cz.jirutka.rsql.parser.ast.Node filters, 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 aContextInforeadAllUniqueIdsPerContextWithOptionalStipulations(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 aContextInfoorg.springframework.data.domain.Page<P>readAllWithSortType(String sortType, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable page, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Finds all products and sorts them by the given sort type.Read a product by a given URIlongreadProductCountUsingReferencedOptionTemplate(@NonNull String optionTemplateId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Returns the count of products that haveProductOptionthat isisAddedByReferencewith the given option template ID.replace(@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()andProductCharacteristicmanagement.replaceAll(List<com.broadleafcommerce.data.tracking.core.service.Update<P>> replacements, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.replaceAll(List, ContextInfo)with the addition ofProductCharacteristicmanagement.com.broadleafcommerce.data.tracking.core.service.BulkPersistenceResponse<P>replaceAllAllowingPartialSuccess(List<com.broadleafcommerce.data.tracking.core.service.Update<P>> replacements, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) voidsetBusinessTypeService(BusinessTypeService<BusinessType> businessTypeService) voidsetCacheByActiveProductKeyGen(com.broadleafcommerce.common.extension.cache.key.ContextKeyGen cacheByActiveProductKeyGen) voidsetCacheByActiveProductUriKeyGen(com.broadleafcommerce.common.extension.cache.key.ContextKeyGen cacheByActiveProductUriKeyGen) voidsetCatalogFinder(com.broadleafcommerce.data.tracking.core.policy.trackable.CatalogFinder<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> catalogFinder) voidsetCharacteristicManagementUtility(ProductCharacteristicManagementUtility<P> characteristicManagementUtility) voidsetCharacteristicService(CharacteristicService<Characteristic> characteristicService) voidsetNotificationManager(com.broadleafcommerce.common.messaging.notification.NotificationManager notificationManager) voidsetProductAssetService(ProductAssetService<ProductAsset> productAssetService) voidsetProductCharacteristicService(ProductCharacteristicService<ProductCharacteristic> productCharacteristicService) voidsetProductHydrationService(ProductHydrationService productHydrationService) voidsetProductTagService(ProductTagService<ProductTag> productTagService) voidsetPromotionalProductService(PromotionalProductService<PromotionalProduct> promotionalProductService) voidsetSingleIndexRequestMessageFactory(com.broadleafcommerce.common.messaging.notification.MessageFactory<com.broadleafcommerce.data.tracking.core.messaging.search.domain.SingleIndexRequest<com.broadleafcommerce.data.tracking.core.Identifiable>> singleIndexRequestMessageFactory) voidsetTrackableBehaviorUtil(com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil trackableBehaviorUtil) voidsetTranslationEntityService(com.broadleafcommerce.translation.service.TranslationEntityService<com.broadleafcommerce.translation.domain.Translation> translationEntityService) protected voidthrowIfHasRecords(@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 anUnsupportedOperationExceptionif the given count function has a count > 0.protected voidunsetCurrentPrimaryCategoryProduct(@NonNull String productId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Finds the currentprimarycategory product for the givenproductIdand unmarks it as primary if it exists.update(@NonNull String id, P businessInstance, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.update(String, Object, ContextInfo)with the addition ofProductCharacteristicmanagement.updateAll(List<com.broadleafcommerce.data.tracking.core.service.Update<P>> updates, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.updateAll(List, ContextInfo)with the addition ofProductCharacteristicmanagement.com.broadleafcommerce.data.tracking.core.service.BulkPersistenceResponse<P>updateAllAllowingPartialSuccess(List<com.broadleafcommerce.data.tracking.core.service.Update<P>> updates, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) protected voidvalidateNoNonProductionRecordsForRelatedEntities(@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, readAllMethods inherited from class com.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService
convertFromPersistentDomain, convertToPersistentDomain, getHelper, getSortPositionStrategy, readAll, readAll, readAll, readAllByContextId, readByContextId, setSortPositionStrategy, updateSortMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.broadleafcommerce.data.tracking.core.service.CrudEntityService
readAll, readAll, readAll, readAllByContextId, readByContextId, updateSortMethods 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
-
setSingleIndexRequestMessageFactory
@Autowired(required=false) public void setSingleIndexRequestMessageFactory(@Nullable com.broadleafcommerce.common.messaging.notification.MessageFactory<com.broadleafcommerce.data.tracking.core.messaging.search.domain.SingleIndexRequest<com.broadleafcommerce.data.tracking.core.Identifiable>> singleIndexRequestMessageFactory) -
existsById
public boolean existsById(String id, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductServiceReturns whether there is a product with the given context ID in the data store.- Specified by:
existsByIdin 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
-
existsByBusinessType
public boolean existsByBusinessType(String typeKey, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductServiceChecks whether anyProductsexist that use the givenBusinessType typeKey.- Specified by:
existsByBusinessTypein interfaceProductService<P extends Product>- Parameters:
typeKey- TheBusinessType.getTypeKey()to match with.contextInfo- Additional multitenant and sandbox information.- Returns:
- Whether any
Productsexist that use the giventypeKey.
-
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:
readAllByNamein 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:ProductServiceReturn all of the products with IDs in the supplied list.- Specified by:
readAllByContextIdsin 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:ProductServiceFinds all products in a given category.- Specified by:
readAllByCategoryContextIdin 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
-
readAllByCategoryContextIdAndSortType
public org.springframework.data.domain.Page<P> readAllByCategoryContextIdAndSortType(String categoryId, String sortType, @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:ProductServiceFinds all products in a given category and sorts them by the given sort type.- Specified by:
readAllByCategoryContextIdAndSortTypein interfaceProductService<P extends Product>- Parameters:
categoryId- the context id of the categorysortType- the sort type to applyfilters- 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 sorted by the given sort type
-
readAllWithSortType
public org.springframework.data.domain.Page<P> readAllWithSortType(String sortType, @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:ProductServiceFinds all products and sorts them by the given sort type.- Specified by:
readAllWithSortTypein interfaceProductService<P extends Product>- Parameters:
sortType- the sort type to applyfilters- 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 products sorted by the given sort type
-
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:ProductServiceReturns all of the products matching the given filters, excluding any products whose IDs match any of the values inexclusions.- Specified by:
readAllByFiltersExcludingin interfaceProductService<P extends Product>- Parameters:
filters- the RSQLNodeused 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:ProductServiceReturn all of the products with IDs in the supplied collection.- Specified by:
readAllByContextIdsin 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
-
readAllByContextIds
public List<P> readAllByContextIds(@NonNull @NonNull Collection<String> ids, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductServiceReturn all of the products with IDs in the supplied collection.- Specified by:
readAllByContextIdsin interfaceProductService<P extends Product>- Parameters:
ids- the products context IDs to search forfilters- the filters to apply to the searchcontextInfo- 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:ProductServiceRead a product by a given URI- Specified by:
readByUriin 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:ProductServiceReturn all of the unique product IDs.- Specified by:
readAllUniqueIdsin 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 beEmptyNodeif 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:ProductServiceRetrieves a narrowed list of unique product context IDs narrowed on aContextInfo- Specified by:
readAllUniqueIdsPerContextin 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 beEmptyNodeif 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:ProductServiceRetrieves a list of unique product context IDs narrowed on aContextInfo- Specified by:
readAllUniqueIdsPerContextWithOptionalStipulationsin 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:ProductServiceReads all the SKUs for the the specified product ID.- Specified by:
readAllSkusByProductIdin interfaceProductService<P extends Product>- Parameters:
productId- the product IDcontext- the information surrounding sandboxing and multitenant state- Returns:
- the list of
SKUContainerfor 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:ProductServiceReads all the SKUs for the the specified product. This method is the same asProductService.readAllSkusByProductId(String, ContextInfo)except it does not perform any query forProductand directly uses the POJO's id and sku for producing the result.- Specified by:
readAllSkusByProductin interfaceProductService<P extends Product>- Parameters:
product- theProductcontext- the information surrounding sandboxing and multitenant state- Returns:
- the list of
SKUContainerfor 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:ProductServiceReads all the SKUs for the the specified product ID and SKU identifier.- Specified by:
readAllSkusByProductIdAndQueryin interfaceProductService<P extends Product>- Parameters:
productId- the product IDsku- the SKU identifier to searchfilters- the RSQLNodeused to restrict resultpage- the requested page of results from the databasecontext- the information surrounding sandboxing and multitenant state- Returns:
- the list of
SKUContainerfor the specified Product id
-
getRepositoryDomain
- Specified by:
getRepositoryDomainin 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:ProductServiceFinds the product matching theuris.- Specified by:
readAllByUrisin 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:ProductServiceFetches products based on the provided external IDs.- Specified by:
readAllByExternalIdsin 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
-
readAllByContextIdAndInheritanceLine
public List<P> readAllByContextIdAndInheritanceLine(Set<String> contextIds, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:ProductServiceFinds all products by context id for a given catalog inheritance line- Specified by:
readAllByContextIdAndInheritanceLinein interfaceProductService<P extends Product>- Parameters:
contextIds- the context ids to findcontextInfo- the information surrounding sandboxing and multitenant state, used to determine the catalog inheritance line- Returns:
- All products by context id for a given catalog inheritance line
-
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()andProductCharacteristicmanagement.- Specified by:
createin interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>- Overrides:
createin classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends Product>- Parameters:
businessInstance- The business domain instance. In general, theDomainMapperManageris 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
-
doWithForceBuiltAndSuppressedSingleIndexRequest
Do the requested work, simultaneously leveragingSuppressNotificationContextforSingleIndexRequestto prevent initial message send, but still forcing the notification state to be built viaSingleIndexRequestNotificationStateBuildContext- Type Parameters:
V- return type of the supplier- Parameters:
supplier- the requested work to do- Returns:
- the result of executing the requested supplier
- Since:
- DataTracking 2.0.7
-
getCollectedPersistedDomainInstancesAndNotifySingleIndexRequest
protected void getCollectedPersistedDomainInstancesAndNotifySingleIndexRequest(Set<String> productContextIds, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) In product CRUD flows, we don't want to emit the
SingleIndexRequeston the product until the characteristics have been properly persisted/updated as well (thereby guaranteeing that reindexing will only be requested once everything has settled).Thus, we expect that when the product is persisted,
SuppressNotificationContextis used to disable emission ofSingleIndexRequestmessages. Note that we still expectSingleIndexRequestNotificationStateMapperMemberto run and establish theNotificationState- we just want to delay the initial send until after the characteristics have all been persisted. We also expect that the product persistence flow leveragesCollectedProductPersistedDomainContextto collect the persisted domain instances into a thread local.After the product and characteristics are finished persisting, this method should be called to access the
CollectedProductPersistedDomainContextand invoke the single index request notification on those instances.- Parameters:
productContextIds- context IDs that we want to notify oncontextInfo- context information
-
notifySingleIndexRequest
protected void notifySingleIndexRequest(com.broadleafcommerce.data.tracking.core.Trackable domain, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Replicates whatCrudEntityHelper.notify(Trackable, ContextInfo, NotificationStateRepository)does forSingleIndexRequest.- Parameters:
domain- the persisted domain instance to pass toNotificationManager.handleAsync(NotificationStateRepository, NotificationStateAware, String)context- context information
-
update
public P update(@NonNull @NonNull String id, @NonNull P businessInstance, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.update(String, Object, ContextInfo)with the addition ofProductCharacteristicmanagement.- Specified by:
updatein interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>- Overrides:
updatein 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 updated product
-
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()andProductCharacteristicmanagement.- Specified by:
replacein interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>- Overrides:
replacein 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
-
readProductCountUsingReferencedOptionTemplate
public long readProductCountUsingReferencedOptionTemplate(@NonNull @NonNull String optionTemplateId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductServiceReturns the count of products that haveProductOptionthat isisAddedByReferencewith the given option template ID.This is useful for validation purposes to prevent deletion of an option template that is in use.
- Specified by:
readProductCountUsingReferencedOptionTemplatein interfaceProductService<P extends Product>- Parameters:
optionTemplateId- the option template ID to check for referencescontext- the context information surrounding sandboxing and multitenant state- Returns:
- the count of products that reference the given option template ID
-
createAll
public List<P> createAll(List<P> businessInstances, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.createAll(List, ContextInfo)with the addition ofProductCharacteristicmanagement.- Specified by:
createAllin interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>- Overrides:
createAllin classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends Product>- Parameters:
businessInstances- the list of business instances to createcontext- context information surrounding sandboxing and multitenant state- Returns:
- the created products
-
createAllAllowingPartialSuccess
-
replaceAll
public List<P> replaceAll(List<com.broadleafcommerce.data.tracking.core.service.Update<P>> replacements, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.replaceAll(List, ContextInfo)with the addition ofProductCharacteristicmanagement.- Specified by:
replaceAllin interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>- Overrides:
replaceAllin classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends Product>- Parameters:
replacements- the list of updates to replacecontext- context information surrounding sandboxing and multitenant state- Returns:
- the replaced products
-
replaceAllAllowingPartialSuccess
-
updateAll
public List<P> updateAll(List<com.broadleafcommerce.data.tracking.core.service.Update<P>> updates, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Performs the same behavior asBaseCrudEntityService.updateAll(List, ContextInfo)with the addition ofProductCharacteristicmanagement.- Specified by:
updateAllin interfacecom.broadleafcommerce.data.tracking.core.service.CrudEntityService<P extends Product>- Overrides:
updateAllin classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends Product>- Parameters:
updates- the list of updates to performcontext- context information surrounding sandboxing and multitenant state- Returns:
- the updated products
-
updateAllAllowingPartialSuccess
-
extractSuccessfulProductIds
-
populateFullyPersistedProducts
protected void populateFullyPersistedProducts(ProductCharacteristicManagementRequest request, List<P> persistedProducts) -
populateFullyPersistedProducts
protected void populateFullyPersistedProducts(ProductCharacteristicManagementRequest request, com.broadleafcommerce.data.tracking.core.service.BulkPersistenceResponse<P> response) -
managePrimaryCategory
protected void managePrimaryCategory(@NonNull @NonNull String productId, @Nullable Category requestedPrimary, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Enables direct management of theprimarycategory product relationship for a product.- If
requestedPrimaryis null or doesn't have an ID, the current primary category-product relationship will be unmarked as primary if it exists - If
requestedPrimaryis 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
-
getOverriddenChangeContainerContext
@Nullable protected com.broadleafcommerce.data.tracking.core.context.ContextInfo getOverriddenChangeContainerContext(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context, String product) -
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 currentprimarycategory product for the givenproductIdand 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 currentprimarycategory 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
Optionalcontaining the primary category product if found, elseOptional.empty()
-
buildPrimaryCategoryProduct
protected CategoryProduct buildPrimaryCategoryProduct(@NonNull @NonNull String productId, @NonNull @NonNull String categoryId) Builds a newCategoryProductPOJO forproductIdandcategoryIdwithCategoryProduct.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
CategoryProductPOJO for the given entities
-
delete
public void delete(@NonNull @NonNull String id, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) -
isEligibleForClearOverride
- Parameters:
product- the product instance for which a 'clear overrides' request has been submitted by the callertargetCatalogId- the catalog ID which the 'clear overrides' request has been determined to target its changes in- Returns:
- whether we should proceed with the 'clear overrides' request for the product, or if
we should skip. See
delete(String, ContextInfo)for broader context on why this precondition is necessary, particularly when considering characteristics management. - Since:
- Catalog Service 2.3.0, Release Train 2.3.0
-
isEntityDirectlyDefinedInTargetCatalog
protected boolean isEntityDirectlyDefinedInTargetCatalog(Product product, @Nullable String targetCatalogId) - Parameters:
product- the product instance to evaluatetargetCatalogId- the catalog ID which the API caller's request has been determined to target its changes in- Returns:
- whether the given product is directly defined in the specified target catalog (as opposed to being inherited from a parent catalog)
- Since:
- Catalog Service 2.3.0, Release Train 2.3.0
-
containsAnyProductionLevelFieldChanges
protected boolean containsAnyProductionLevelFieldChanges(com.broadleafcommerce.data.tracking.core.filtering.business.domain.ContextState contextState) - Parameters:
contextState- the context state of an entity- Returns:
- whether the entity contains any production-level field changes that would indicate it is a production-level override record
- Since:
- Catalog Service 2.3.0, Release Train 2.3.0
-
determineTargetCatalogIdForDelete
@Nullable protected String determineTargetCatalogIdForDelete(P product, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Seedelete(String, ContextInfo)for broader context on why this evaluation is necessary.- Parameters:
product- the product being targeted for deletecontextInfo- the current context from which to derive the catalog that the changes will target- Returns:
- the actual catalog ID that the delete operation will end up impacting
- Since:
- Catalog Service 2.3.0, Release Train 2.3.0
-
getOverrideOrBaseCatalogId
@Nullable protected String getOverrideOrBaseCatalogId(com.broadleafcommerce.data.tracking.core.filtering.business.domain.ContextState contextState) - Parameters:
contextState- the context state to extract catalog information from- Returns:
- the
ContextState.getOverrideCatalogId()if set, elseContextState.getCatalog()ID. This allows us to clearly identify the catalog in which the entity actually resides. SeeContextStateBuilderto understand where these fields come from - Since:
- Catalog Service 2.3.0, Release Train 2.3.0
-
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 anUnsupportedOperationExceptionif the given count function has a count > 0.- Parameters:
countFunction- aBiFunctionused 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 ofoptionswhereProductOption.isAddedByReference()is true.- Parameters:
businessInstance- the business instance- Returns:
- a List of
ProductOptionwithout fields generated by reference
-
gatherAndValidateDeletableProductCharacteristics
protected List<ProductCharacteristic> gatherAndValidateDeletableProductCharacteristics(P product, @Nullable String targetCatalogId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) - Parameters:
product- the product being targeted for deletetargetCatalogId- the catalog ID which the API caller's request has been determined to target its changes incontext- the current catalog/tenant context the request is operating in- Returns:
- the list of characteristics that should be requested for delete or clear override for the requested product
- Since:
- Catalog Service 2.3.0, Release Train 2.3.0
-
manageProductCharacteristics
protected ProductCharacteristicManagementResult manageProductCharacteristics(@NonNull @NonNull String id, @NonNull P apiPayload, @NonNull P persistedProduct, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Manages the characteristics of a single product. This is a convenience method that wraps the more generalProductCharacteristicManagementUtility.manageProductCharacteristics(ProductCharacteristicManagementRequest, ContextInfo)method for a single product.- Parameters:
id- the ID of the productapiPayload- the incoming product data from the APIpersistedProduct- the currently persisted state of the productcontext- the context information for the request- Returns:
- a
ProductCharacteristicManagementResultcontaining the latest state of the product characteristics
-
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) -
getProductCharacteristicService
-
setProductCharacteristicService
@Autowired @Lazy public void setProductCharacteristicService(ProductCharacteristicService<ProductCharacteristic> productCharacteristicService) -
getCatalogFinder
protected com.broadleafcommerce.data.tracking.core.policy.trackable.CatalogFinder<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> getCatalogFinder() -
setCatalogFinder
@Autowired @Lazy public void setCatalogFinder(com.broadleafcommerce.data.tracking.core.policy.trackable.CatalogFinder<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> catalogFinder) -
getNotificationManager
protected com.broadleafcommerce.common.messaging.notification.NotificationManager getNotificationManager() -
setNotificationManager
@Autowired public void setNotificationManager(com.broadleafcommerce.common.messaging.notification.NotificationManager notificationManager) -
getBusinessTypeService
-
setBusinessTypeService
@Autowired public void setBusinessTypeService(BusinessTypeService<BusinessType> businessTypeService) -
getCharacteristicService
-
setCharacteristicService
@Autowired public void setCharacteristicService(CharacteristicService<Characteristic> characteristicService) -
getSingleIndexRequestMessageFactory
@Nullable protected com.broadleafcommerce.data.tracking.core.messaging.search.SingleIndexRequestMessageFactory getSingleIndexRequestMessageFactory() -
getProductHydrationService
-
setProductHydrationService
@Autowired @Lazy public void setProductHydrationService(ProductHydrationService productHydrationService) -
getTrackableBehaviorUtil
@NonNull protected com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil getTrackableBehaviorUtil() -
setTrackableBehaviorUtil
@Autowired public void setTrackableBehaviorUtil(com.broadleafcommerce.data.tracking.core.TrackableBehaviorUtil trackableBehaviorUtil) -
getCharacteristicManagementUtility
-
setCharacteristicManagementUtility
@Autowired public void setCharacteristicManagementUtility(ProductCharacteristicManagementUtility<P> characteristicManagementUtility)
-