Class UpdateValidationDomainMapperMember
java.lang.Object
com.broadleafcommerce.data.tracking.core.mapping.UpdateValidationDomainMapperMember
- All Implemented Interfaces:
com.broadleafcommerce.common.extension.data.DataRoutePartitionAware,DomainMapper,DomainMapperMember,IdAware,org.springframework.core.Ordered
public class UpdateValidationDomainMapperMember
extends Object
implements DomainMapperMember, IdAware
A special DomainMapperMember which is responsible for validating the id variable state
for update requests. Update requests (including replace) include a path parameter in the API that
identifies the entity receiving the update. However, the payload may also contain an id value
that may end up being applied during the mapping phase to the repository state. This mapper
member performs some lightweight checks and mitigations:
- If the id in the payload is null, change it's value to the requested id from the path parameter
- If the id in the payload is populated, and it matches the path parameter, pass through
- If the id in the payload is populated, and does not match the path parameter, throw a
ValidationException.
CrudEntityService.replace(String, Object, ContextInfo) and
CrudEntityService.update(String, Object, ContextInfo), and is used to find the entity
which will be replaced or updated. If found, this is the entity that becomes the
repositoryDomain argument to fromBusinessDomain(Object, Object, ContextInfo).
Thus, its contextId can be reliably used as the "path parameter" source of truth on what
the ID should be, and this implementation uses it as such.- Author:
- Jeff Fischer
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.broadleafcommerce.data.tracking.core.mapping.IdAware
IdAware.Id -
Field Summary
Fields inherited from interface com.broadleafcommerce.common.extension.data.DataRoutePartitionAware
ALL_MATCHFields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription<D> DfromBusinessDomain(Object businessDomain, D repositoryDomain, ContextInfo contextInfo) Validates the identifier value state for a mutation request.intgetOrder()<D,P> D modifyMap(D repositoryDomain, P businessDomain, ContextInfo contextInfo, boolean allowNull) Validates the identifier value state for a mutation request.Methods 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.mapping.DomainMapper
deleteMap, getBusinessDomainTypeMethods inherited from interface com.broadleafcommerce.data.tracking.core.mapping.DomainMapperMember
fromRepositoryDomain
-
Constructor Details
-
UpdateValidationDomainMapperMember
public UpdateValidationDomainMapperMember()
-
-
Method Details
-
getDataRoutePartition
- Specified by:
getDataRoutePartitionin interfacecom.broadleafcommerce.common.extension.data.DataRoutePartitionAware
-
fromBusinessDomain
public <D> D fromBusinessDomain(@Nullable Object businessDomain, @Nullable D repositoryDomain, @Nullable ContextInfo contextInfo) Validates the identifier value state for a mutation request. Confirms the repository entity requested for update matches the id in the payload, if applicable.- Specified by:
fromBusinessDomainin interfaceDomainMapperMember- Type Parameters:
D- The repository entity type- Parameters:
businessDomain- The business instance containing the relevant property informationrepositoryDomain- The repository specific instance to affect and returncontextInfo- The context information used to make tracking determinations relevant to sandboxing and multitenant concerns. SeeTrackableRepositoryfor more info on persistence behavior based on context.- Returns:
- The validated (possibly altered) repository entity instance
-
modifyMap
public <D,P> D modifyMap(D repositoryDomain, P businessDomain, ContextInfo contextInfo, boolean allowNull) Validates the identifier value state for a mutation request. Confirms the repository entity requested for update matches the id in the payload, if applicable.- Specified by:
modifyMapin interfaceDomainMapper- Type Parameters:
D- The repository entity typeP- The projection type- Parameters:
repositoryDomain- The persistence domain instance to modifybusinessDomain- The business instance containing changes to map to the repository domaincontextInfo- The context information used to make tracking determinations relevant to sandboxing and multitenant concerns. SeeTrackableRepositoryfor more info on persistence behavior based on context.allowNull- Whether or not null values in properties in the payload instance should be ignored during the mapping operation.- Returns:
- The validated (possibly altered) repository entity instance
-
getOrder
public int getOrder()- Specified by:
getOrderin interfaceDomainMapperMember- Specified by:
getOrderin interfaceorg.springframework.core.Ordered
-