Class ProductUpdateActionUtils
- java.lang.Object
 - 
- com.commercetools.sync.products.utils.ProductUpdateActionUtils
 
 
- 
public final class ProductUpdateActionUtils extends java.lang.Object 
- 
- 
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildAddToCategoryUpdateActions(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theSetofCategoryReferences of aProductDraftand aProductProjection.static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildChangeMasterVariantUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct, ProductSyncOptions syncOptions)Create update action, ifnewProducthas#masterVariant#keydifferent thanoldProductstaged#masterVariant#key.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildChangeNameUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringnames of aProductDraftand aProductProjection.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildChangeSlugUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringslugs of aProductDraftand aProductProjection.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildPublishOrUnpublishUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct, boolean hasNewUpdateActions)Compares the 'published' field of aProductDraftand aProductProjectionwith the new update actions and hasStagedChanges of the old product.static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildRemoveFromCategoryUpdateActions(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theSetofCategoryReferences of aProductDraftand aProductProjection.static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildSetCategoryOrderHintUpdateActions(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theCategoryOrderHintsof aProductDraftand aProductProjection.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildSetDescriptionUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringdescriptions of aProductDraftand aProductProjection.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildSetMetaDescriptionUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringmeta descriptions of aProductDraftand aProduct.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildSetMetaKeywordsUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringmeta keywordss of aProductDraftand aProduct.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildSetMetaTitleUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringmeta titles of aProductDraftand aProduct.static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildSetSearchKeywordsUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theSearchKeywordsof aProductDraftand aProductProjection.static java.util.Optional<io.sphere.sdk.products.commands.updateactions.SetTaxCategory>buildSetTaxCategoryUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theTaxCategoryreferences of an oldProductand newProductDraft.static java.util.Optional<io.sphere.sdk.products.commands.updateactions.TransitionState>buildTransitionStateUpdateAction(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct)Compares theStatereferences of an oldProductProjectionand newProductDraft.static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>>buildVariantsUpdateActions(io.sphere.sdk.products.ProductProjection oldProduct, io.sphere.sdk.products.ProductDraft newProduct, ProductSyncOptions syncOptions, java.util.Map<java.lang.String,AttributeMetaData> attributesMetaData)Compares the variants (including the master variants) of aProductDraftand aProduct.static java.util.List<io.sphere.sdk.products.ProductVariantDraft>getAllVariants(io.sphere.sdk.products.ProductDraft productDraft)Returns a list containing all the variants (including the master variant) of the suppliedProductDraft. 
 - 
 
- 
- 
Method Detail
- 
buildChangeNameUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildChangeNameUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringnames of aProductDraftand aProductProjection. It returns anChangeNameas a result in anOptional. If both theProductProjectionand theProductDrafthave the same name, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new name.- Returns:
 - A filled optional with the update action or an empty optional if the names are identical.
 
 
- 
buildSetDescriptionUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildSetDescriptionUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringdescriptions of aProductDraftand aProductProjection. It returns anSetDescriptionas a result in anOptional. If both theProductProjectionand theProductDrafthave the same description, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new description.- Returns:
 - A filled optional with the update action or an empty optional if the descriptions are identical.
 
 
- 
buildChangeSlugUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildChangeSlugUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringslugs of aProductDraftand aProductProjection. It returns aChangeSlugupdate action as a result in anOptional. If both theProductProjectionand theProductDrafthave the same slug, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new slug.- Returns:
 - A filled optional with the update action or an empty optional if the slugs are identical.
 
 
- 
buildAddToCategoryUpdateActions
@Nonnull public static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildAddToCategoryUpdateActions(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theSetofCategoryReferences of aProductDraftand aProductProjection. It returns aListofAddToCategoryupdate actions as a result, if the old product needs to be added to a category to have the same set of categories as the new product. If both theProductProjectionand theProductDrafthave the same set of categories, then no update actions are needed and hence an emptyListis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new slug.- Returns:
 - A list containing the update actions or an empty list if the category sets are identical.
 
 
- 
buildSetCategoryOrderHintUpdateActions
@Nonnull public static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildSetCategoryOrderHintUpdateActions(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theCategoryOrderHintsof aProductDraftand aProductProjection. It returns aSetCategoryOrderHintupdate action as a result in anList. If both theProductProjectionand theProductDrafthave the same categoryOrderHints, then no update actions are needed and hence an emptyListis returned.NOTE: Comparison is done against the staged projection of the old product.
ProductProjectionwhich should be updated.- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new categoryOrderHints.- Returns:
 - A list containing the update actions or an empty list if the categoryOrderHints are identical.
 
 
- 
buildRemoveFromCategoryUpdateActions
@Nonnull public static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildRemoveFromCategoryUpdateActions(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theSetofCategoryReferences of aProductDraftand aProductProjection. It returns aListofRemoveFromCategoryupdate actions as a result, if the old product needs to be removed from a category to have the same set of categories as the new product. If both theProductProjectionand theProductDrafthave the same set of categories, then no update actions are needed and hence an emptyListis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new slug.- Returns:
 - A list containing the update actions or an empty list if the category sets are identical.
 
 
- 
buildSetSearchKeywordsUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildSetSearchKeywordsUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theSearchKeywordsof aProductDraftand aProductProjection. It returns aSetSearchKeywordsupdate action as a result in anOptional. If both theProductProjectionand theProductDrafthave the same search keywords, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new search keywords.- Returns:
 - A filled optional with the update action or an empty optional if the search keywords are identical.
 
 
- 
buildSetMetaDescriptionUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildSetMetaDescriptionUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringmeta descriptions of aProductDraftand aProduct. It returns aSetMetaDescriptionupdate action as a result in anOptional. If both theProductProjectionand theProductDrafthave the same meta description, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new meta description.- Returns:
 - A filled optional with the update action or an empty optional if the meta descriptions are identical.
 
 
- 
buildSetMetaKeywordsUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildSetMetaKeywordsUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringmeta keywordss of aProductDraftand aProduct. It returns aSetMetaKeywordsupdate action as a result in anOptional. If both theProductProjectionand theProductDrafthave the same meta keywords, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productProjection which should be updated.newProduct- the product draft where we get the new meta keywords.- Returns:
 - A filled optional with the update action or an empty optional if the meta keywords are identical.
 
 
- 
buildSetMetaTitleUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildSetMetaTitleUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theLocalizedStringmeta titles of aProductDraftand aProduct. It returns aSetMetaTitleupdate action as a result in anOptional. If both theProductProjectionand theProductDrafthave the same meta title, then no update action is needed and hence an emptyOptionalis returned.NOTE: Comparison is done against the staged projection of the old product.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new meta title.- Returns:
 - A filled optional with the update action or an empty optional if the meta titles are identical.
 
 
- 
buildVariantsUpdateActions
@Nonnull public static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildVariantsUpdateActions(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct, @Nonnull ProductSyncOptions syncOptions, @Nonnull java.util.Map<java.lang.String,AttributeMetaData> attributesMetaData)Compares the variants (including the master variants) of aProductDraftand aProduct. It returns aListof variant related update actions. For example:AddVariantRemoveVariantChangeMasterVariantSetAttributeSetAttributeInAllVariantsSetSkuAddExternalImageRemoveImageAddPrice- ... and more variant level update actions.
 
ProductProjectionand theProductDrafthave identical variants, then no update actions are needed and hence an emptyListis returned.NOTE: Comparison is done against the staged projection of the old product.
ProductProjectionwhich should be updated.- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new meta title.syncOptions- the sync options wrapper which contains options related to the sync process supplied by the user. For example, custom callbacks to call in case of warnings or errors occurring on the build update action process. And other options (SeeProductSyncOptionsfor more info).attributesMetaData- a map of attribute name ->AttributeMetaData; which defines attribute information: its name and whether it has the constraint "SameForAll" or not.- Returns:
 - A list of product variant-specific update actions.
 
 
- 
getAllVariants
@Nonnull public static java.util.List<io.sphere.sdk.products.ProductVariantDraft> getAllVariants(@Nonnull io.sphere.sdk.products.ProductDraft productDraft)Returns a list containing all the variants (including the master variant) of the suppliedProductDraft.- Parameters:
 productDraft- the product draft that has the variants and master variant that should be returned.- Returns:
 - a list containing all the variants (including the master variant) of the supplied
     
ProductDraft. 
 
- 
buildPublishOrUnpublishUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildPublishOrUnpublishUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct, boolean hasNewUpdateActions)Compares the 'published' field of aProductDraftand aProductProjectionwith the new update actions and hasStagedChanges of the old product. Accordingly it returns aPublishorUnpublishupdate action as a result in anOptional. Check the calculation table below for all different combinations named as states.Mapping of product publish/unpublish update action calculation State New draft publish Old product publish New update actions Old product hasStagedChanges Action State 1 false false false false - State 2 false false false true - State 3 false false true false - State 4 false false true true - State 5 false true false false unpublish State 6 false true false true unpublish State 7 false true true false unpublish State 8 false true true true unpublish State 9 true false false false publish State 10 true false false true publish State 11 true false true false publish State 12 true false true true publish State 13 true true false false - State 14 true true false true publish State 15 true true true false publish State 16 true true true true publish NOTE: Comparison is done against the staged projection of the old product. If the new product's 'published' field is null, then the default false value is assumed.
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft where we get the new published field value.hasNewUpdateActions- the product draft has other update actions set.- Returns:
 - A filled optional with the update action or an empty optional if the flag values are identical.
 
 
- 
buildChangeMasterVariantUpdateAction
@Nonnull public static java.util.List<io.sphere.sdk.commands.UpdateAction<io.sphere.sdk.products.Product>> buildChangeMasterVariantUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct, @Nonnull ProductSyncOptions syncOptions)Create update action, ifnewProducthas#masterVariant#keydifferent thanoldProductstaged#masterVariant#key.If update action is created - it is created of
newProduct.getMasterVariant().getSku()If old master variant is missing in the new variants list - add
RemoveVariantaction at the end.- Parameters:
 oldProduct- old productprojections with variantsnewProduct- new product draft with variants with resolved references prices referencessyncOptions- the sync options wrapper which contains options related to the sync process- Returns:
 - a list of maximum two elements: 
ChangeMasterVariantif the keys are different, optionally followed byRemoveVariantif the changed variant does not exist in the new variants list. 
 
- 
buildSetTaxCategoryUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.products.commands.updateactions.SetTaxCategory> buildSetTaxCategoryUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theTaxCategoryreferences of an oldProductand newProductDraft. If they are different - returnSetTaxCategoryupdate action.If the old value is set, but the new one is empty - the command will unset the tax category.
ProductProjectionwhich should be updated.- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft with newTaxCategoryreference.- Returns:
 - An optional with 
SetTaxCategoryupdate action. 
 
- 
buildTransitionStateUpdateAction
@Nonnull public static java.util.Optional<io.sphere.sdk.products.commands.updateactions.TransitionState> buildTransitionStateUpdateAction(@Nonnull io.sphere.sdk.products.ProductProjection oldProduct, @Nonnull io.sphere.sdk.products.ProductDraft newProduct)Compares theStatereferences of an oldProductProjectionand newProductDraft. If they are different - returnTransitionStateupdate action.If the old value is set, but the new one is empty - return empty object, because unset transition state is not possible.
Note: the transition state action is called with force == true, i.e. the platform won't verify transition
- Parameters:
 oldProduct- the productprojection which should be updated.newProduct- the product draft with newStatereference.- Returns:
 - An optional with 
TransitionStateupdate action. 
 
 - 
 
 -