Class DefaultBulkUpdateManager
- All Implemented Interfaces:
BulkUpdateManager
- Author:
- Samarth Dhruva (samarthd)
-
Constructor Summary
ConstructorsConstructorDescriptionDefaultBulkUpdateManager
(BulkUpdateService<BulkUpdate> bulkUpdateService, BulkUpdateRequestValidator bulkUpdateRequestValidator, List<BulkUpdateProcessor<?>> bulkUpdateProcessors, com.broadleafcommerce.common.extension.TypeFactory typeFactory, com.broadleafcommerce.common.extension.data.DataRouteReference reference, List<com.broadleafcommerce.data.tracking.core.web.ContextRequestHydrator> contextRequestHydrators, com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils trackablePolicyUtils, int batchSize) -
Method Summary
Modifier and TypeMethodDescriptionprotected BulkUpdate
Builds aBulkUpdate
and initializes its basic fields from the values in theBulkUpdateRequest
.protected int
protected List<BulkUpdateProcessor<?>>
protected BulkUpdateRequestValidator
protected BulkUpdateService<BulkUpdate>
protected List<com.broadleafcommerce.data.tracking.core.web.ContextRequestHydrator>
protected Optional<BulkUpdateProcessor<?>>
getProcessorForUpdate
(BulkUpdate bulkUpdate) protected com.broadleafcommerce.common.extension.data.DataRouteReference
protected com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils
Used to validate that the user initiating an operation is able to access and mutate the context in which the operation will apply.protected com.broadleafcommerce.common.extension.TypeFactory
protected void
initializeContextFields
(BulkUpdate target, BulkUpdateRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Initializes the context-related fields on the givenBulkUpdate
, including the fields describing the context where the operation itself was initiated (such asBulkUpdate.getApplicationId()
), and "updating context" fields describing the context where the operation will be performed (such asBulkUpdate.getUpdatingApplicationId()
).protected void
initializeGeneralFields
(BulkUpdate toInitialize) initiateBulkUpdate
(BulkUpdateRequest request, String target, String filterString, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) This method accepts a bulk update request and the context of the request to build aBulkUpdate
and persist it in the data store.protected boolean
isSandboxBulkUpdate
(BulkUpdate bulkUpdate) protected BulkUpdate
notifyOfCreateSandboxRequest
(String bulkUpdateId) void
processBulkUpdate
(BulkUpdate bulkUpdate) Performs aBulkUpdate
, processing the requested records in batches and updating the status for theBulkUpdate
as it goes.protected <P> void
processInBatches
(BulkUpdateProcessor<P> processor, BulkUpdate bulkUpdate) protected void
setTotalRecordsToProcess
(BulkUpdate update) protected void
Validates theBulkUpdateRequest
, throwing aValidationException
in the event that there is a validation failure.protected void
protected void
Builds aContextInfo
matching the updating context fields fromupdate
, and then evaluates whether the currently authenticated user is allowed to perform the operation in that context.
-
Constructor Details
-
DefaultBulkUpdateManager
public DefaultBulkUpdateManager(BulkUpdateService<BulkUpdate> bulkUpdateService, BulkUpdateRequestValidator bulkUpdateRequestValidator, List<BulkUpdateProcessor<?>> bulkUpdateProcessors, com.broadleafcommerce.common.extension.TypeFactory typeFactory, @Nullable com.broadleafcommerce.common.extension.data.DataRouteReference reference, List<com.broadleafcommerce.data.tracking.core.web.ContextRequestHydrator> contextRequestHydrators, @Nullable com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils trackablePolicyUtils, int batchSize)
-
-
Method Details
-
initiateBulkUpdate
public BulkUpdate initiateBulkUpdate(BulkUpdateRequest request, String target, @Nullable String filterString, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:BulkUpdateManager
This method accepts a bulk update request and the context of the request to build aBulkUpdate
and persist it in the data store.Will send a
ProcessBulkUpdateRequest
message to request that the update be processed.- Specified by:
initiateBulkUpdate
in interfaceBulkUpdateManager
- Parameters:
request
- a request to perform aBulkUpdate
.For each of the "updating context" fields describing where the operation will be performed, the default implementation will first check if the field is supplied in
BulkUpdateRequest
, and if not, use the value from theContextInfo
.target
- the target of the bulk update. This is some value that can be mapped to a particular domain by the logic performing an update, rather than explicitly requiring the fully qualified classname. Used to populateBulkUpdate.getTarget()
.filterString
- the filter string that should be used to find the records to update. Used to populateBulkUpdate.getFilterString()
.contextInfo
- context information surrounding sandboxing and multitenant state. This is the context from which the operation itself is being initiated.- Returns:
- The created
BulkUpdate
.
-
validateBulkUpdateRequest
Validates theBulkUpdateRequest
, throwing aValidationException
in the event that there is a validation failure.- Parameters:
request
- the user-supplied bulk update request- Throws:
com.broadleafcommerce.common.error.validation.ValidationException
- in the event that there is a validation failure
-
generateBulkUpdateFromRequest
Builds aBulkUpdate
and initializes its basic fields from the values in theBulkUpdateRequest
.Note that context-related fields such as
BulkUpdate.getUpdatingApplicationId()
,BulkUpdate.getUpdatingCatalogId()
, etc are not initialized in this method. This responsibility belongs toinitializeContextFields(BulkUpdate, BulkUpdateRequest, ContextInfo)
.- Parameters:
request
- the bulk update request that was received- Returns:
- an
BulkUpdate
object initialized from theBulkUpdateRequest
-
initializeGeneralFields
-
initializeContextFields
protected void initializeContextFields(BulkUpdate target, BulkUpdateRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Initializes the context-related fields on the givenBulkUpdate
, including the fields describing the context where the operation itself was initiated (such asBulkUpdate.getApplicationId()
), and "updating context" fields describing the context where the operation will be performed (such asBulkUpdate.getUpdatingApplicationId()
).For each of the "updating context" fields describing where the operation will be performed, the default implementation will first check if the field is supplied in
BulkUpdateRequest
, and if not, use the value from theContextInfo
.- Parameters:
target
- theBulkUpdate
whose context-related fields should be initializedrequest
- theBulkUpdateRequest
which should be checked as a potential source for context fieldscontextInfo
- context information surrounding sandboxing and multitenant state. This is the context from which the operation itself is being initiated.
-
setTotalRecordsToProcess
-
validateCanPerformBulkUpdate
-
validateUpdatingContextAccessibility
Builds aContextInfo
matching the updating context fields fromupdate
, and then evaluates whether the currently authenticated user is allowed to perform the operation in that context.In the event that policy validation is disabled, the
TrackablePolicyUtils
bean will be unavailable and thus this step will be skipped.- Parameters:
update
- the bulk update whose updating context fields should be checked for accessibility- Throws:
com.broadleafcommerce.data.tracking.core.exception.NotVisibleException
- if the updating context is not visible by the current usercom.broadleafcommerce.data.tracking.core.exception.NotMutableException
- if the updating context is not mutable by the current user
-
processBulkUpdate
Description copied from interface:BulkUpdateManager
Performs aBulkUpdate
, processing the requested records in batches and updating the status for theBulkUpdate
as it goes.Note: this method should always be called with the result of
BulkUpdateService.setProcessingStatus(String)
if the value is not null.The
BulkUpdateManager
will delegate processing to the firstBulkUpdateProcessor
for whichBulkUpdateProcessor.canHandle(BulkUpdate)
returns true. Thus if more than oneBulkUpdateProcessor
can handle a request, the bean registered with the higher priority will be used.- Specified by:
processBulkUpdate
in interfaceBulkUpdateManager
- Parameters:
bulkUpdate
- the bulk update to perform - this should always be the result ofBulkUpdateService.setProcessingStatus(String)
if it is not null
-
getProcessorForUpdate
-
isSandboxBulkUpdate
-
notifyOfCreateSandboxRequest
- Parameters:
bulkUpdateId
-- Returns:
-
processInBatches
-
getBulkUpdateService
-
getBulkUpdateRequestValidator
-
getBulkUpdateProcessors
-
getTypeFactory
@NonNull protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory() -
getReference
@Nullable protected com.broadleafcommerce.common.extension.data.DataRouteReference getReference() -
getContextRequestHydrators
protected List<com.broadleafcommerce.data.tracking.core.web.ContextRequestHydrator> getContextRequestHydrators() -
getTrackablePolicyUtils
@Nullable protected com.broadleafcommerce.data.tracking.core.policy.trackable.TrackablePolicyUtils getTrackablePolicyUtils()Used to validate that the user initiating an operation is able to access and mutate the context in which the operation will apply.If policy validation is disabled, this bean will be unavailable and policy validation will be skipped.
-
getBatchSize
protected int getBatchSize()
-