Class DefaultProductConsolidationService
java.lang.Object
com.broadleafcommerce.catalog.service.product.consolidation.DefaultProductConsolidationService
- All Implemented Interfaces:
ProductConsolidationService
public class DefaultProductConsolidationService
extends Object
implements ProductConsolidationService
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionDefaultProductConsolidationService(List<ProductConsolidationContributor> productConsolidationContributors, ProductService<Product> productSvc, com.broadleafcommerce.common.extension.TypeFactory typeFactory, com.broadleafcommerce.data.tracking.core.tenant.service.CommonCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> catalogService, com.broadleafcommerce.data.tracking.core.marketplace.service.CommonMarketplaceApplicationCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog> marketplaceApplicationCatalogService, cz.jirutka.rsql.parser.RSQLParser rsqlParser) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidcleanAttributesFields(ConsolidatedProduct toClean) protected voidvoidConsolidatedProductconsists of many fields, each potentially containing a lot of data.protected voidprotected voidprotected voidInConsolidatedProduct, we almost never need the full values from the baseCharacteristic, so we exclude them by default.protected List<ConsolidatedProduct>consolidateProducts(List<Product> products, com.broadleafcommerce.data.tracking.core.tenant.domain.InheritanceLines inheritanceLines, Map<String, com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> baseCatalogsById, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Consolidate products with their related domain and translations.protected ConsolidatedProductPostProcessorcreatePostProcessor(List<ConsolidatedProduct> products, cz.jirutka.rsql.parser.ast.Node filters, com.broadleafcommerce.data.tracking.core.tenant.domain.InheritanceLines inheritanceLines, Map<String, Set<String>> marketplaceApplicationsForCatalogs, Map<String, Set<String>> pendingMarketplaceApplicationsForCatalogs, Map<String, com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> allCatalogsById) getBaseCatalogIds(List<Product> products) protected com.broadleafcommerce.data.tracking.core.tenant.service.CommonCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog>protected com.broadleafcommerce.data.tracking.core.marketplace.service.CommonMarketplaceApplicationCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog>getOverrideCatalogIds(List<Product> products) protected List<ProductConsolidationContributor>protected ProductService<Product>protected cz.jirutka.rsql.parser.RSQLParserprotected com.broadleafcommerce.common.extension.TypeFactorymapMarketplaceApplicationsByImplicitCatalogsForStatus(List<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog> marketplaceApplicationCatalogs, com.broadleafcommerce.data.tracking.core.type.CatalogStatus catalogStatus, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) protected voidprocessSandboxOwner(ConsolidatedProduct product) Populate the sandbox owner of the product, if in a user sandbox context.protected voidprocessVendorRef(ConsolidatedProduct consolidatedProduct, Map<String, com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> baseCatalogsById) Populate the vendor ref from the Product's catalog.readAllConsolidatedProducts(cz.jirutka.rsql.parser.ast.Node filters, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Read and consolidate products with their related domain.protected List<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog>readMarketplaceApplicationsForCatalogs(Set<String> catalogs, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
-
Field Details
-
ARCHIVED_FILTER
- See Also:
-
-
Constructor Details
-
DefaultProductConsolidationService
public DefaultProductConsolidationService(List<ProductConsolidationContributor> productConsolidationContributors, ProductService<Product> productSvc, com.broadleafcommerce.common.extension.TypeFactory typeFactory, com.broadleafcommerce.data.tracking.core.tenant.service.CommonCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> catalogService, @Nullable com.broadleafcommerce.data.tracking.core.marketplace.service.CommonMarketplaceApplicationCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog> marketplaceApplicationCatalogService, cz.jirutka.rsql.parser.RSQLParser rsqlParser)
-
-
Method Details
-
readAllConsolidatedProducts
public List<ConsolidatedProduct> readAllConsolidatedProducts(@NonNull cz.jirutka.rsql.parser.ast.Node filters, @NonNull com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:ProductConsolidationServiceRead and consolidate products with their related domain.- Specified by:
readAllConsolidatedProductsin interfaceProductConsolidationService- Parameters:
filters- the RSQLNodeused to restrict results, must not be nullcontext- context information around sandboxing and multitenant state- Returns:
- list of products consolidated with relations
-
getBaseCatalogIds
-
getOverrideCatalogIds
-
consolidateProducts
protected List<ConsolidatedProduct> consolidateProducts(List<Product> products, com.broadleafcommerce.data.tracking.core.tenant.domain.InheritanceLines inheritanceLines, Map<String, com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> baseCatalogsById, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Consolidate products with their related domain and translations. This includes both hydratingProductfields and combining external references likeCategoryProduct. Any catalog or sandbox overrides made to external references for non-overridden products will generate new placeholder products to store those overrides.- Parameters:
products- the products in all explicit context statesinheritanceLines- the catalog inheritance lines top-down from all of the productsbaseCatalogsById- the map of the found base catalogs with the catalog id as a keycontext- context information surrounding sandboxing/multitenant state- Returns:
- A list of products combined with all relations including every overridden state
-
processSandboxOwner
Populate the sandbox owner of the product, if in a user sandbox context.- Parameters:
product- the ConsolidatedProduct on which to populate the sandbox owner
-
processVendorRef
protected void processVendorRef(ConsolidatedProduct consolidatedProduct, Map<String, com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> baseCatalogsById) Populate the vendor ref from the Product's catalog.- Parameters:
consolidatedProduct- the ConsolidatedProduct on which to populate the vendor refbaseCatalogsById- the map of the found base catalogs with the catalog id as a key
-
readMarketplaceApplicationsForCatalogs
-
mapMarketplaceApplicationsByImplicitCatalogsForStatus
protected Map<String,Set<String>> mapMarketplaceApplicationsByImplicitCatalogsForStatus(List<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog> marketplaceApplicationCatalogs, com.broadleafcommerce.data.tracking.core.type.CatalogStatus catalogStatus, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) -
createPostProcessor
protected ConsolidatedProductPostProcessor createPostProcessor(List<ConsolidatedProduct> products, cz.jirutka.rsql.parser.ast.Node filters, com.broadleafcommerce.data.tracking.core.tenant.domain.InheritanceLines inheritanceLines, Map<String, Set<String>> marketplaceApplicationsForCatalogs, Map<String, Set<String>> pendingMarketplaceApplicationsForCatalogs, Map<String, com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> allCatalogsById) -
cleanConsolidatedProductFields
Description copied from interface:ProductConsolidationServiceConsolidatedProductconsists of many fields, each potentially containing a lot of data. This data is not necessarily always relevant, and can lead to large, bloated API responses. This method is intended to be called as a last-step before returning to the API caller. It takes a fully formed list ofConsolidatedProductand nullifies or trims any fields that are known to be irrelevant to the caller. This will result in those fields either being omitted in the final JSON output, or greatly reduced in size.- Specified by:
cleanConsolidatedProductFieldsin interfaceProductConsolidationService- Parameters:
toClean- the instances to clean the fields of
-
cleanConsolidatedProductFields
-
cleanAttributesFields
-
cleanProductCharacteristicsFields
-
cleanProductCharacteristicFields
-
cleanProductCharacteristicValues
InConsolidatedProduct, we almost never need the full values from the baseCharacteristic, so we exclude them by default. The only time the basevaluesare relevant are whenCharacteristic.isConfigurable()is 'true', but even then, we expect that hydration has updatedProduct.getOptions()to contain an option matching the configurable characteristic, so the data about those values should be available there.- Parameters:
pc- the product characteristic whose value-related fields should be cleaned
-
getProductConsolidationContributors
-
getProductSvc
-
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory() -
getCatalogService
protected com.broadleafcommerce.data.tracking.core.tenant.service.CommonCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.Catalog> getCatalogService() -
getMarketplaceApplicationCatalogService
@Nullable protected com.broadleafcommerce.data.tracking.core.marketplace.service.CommonMarketplaceApplicationCatalogService<com.broadleafcommerce.data.tracking.core.tenant.domain.MarketplaceApplicationCatalog> getMarketplaceApplicationCatalogService() -
getRsqlParser
protected cz.jirutka.rsql.parser.RSQLParser getRsqlParser()
-