Class DefaultSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- java.lang.Object
-
- com.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P>
-
- com.broadleafcommerce.data.tracking.core.service.BaseRsqlCrudEntityService<P>
-
- com.broadleafcommerce.customer.service.DefaultSegmentMemberService<P,S>
-
- All Implemented Interfaces:
SegmentMemberService<P,S>
,com.broadleafcommerce.data.tracking.core.service.CrudEntityService<P>
,com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityService<P>
public class DefaultSegmentMemberService<P extends SegmentMember,S extends CustomerSegment> extends com.broadleafcommerce.data.tracking.core.service.BaseRsqlCrudEntityService<P> implements SegmentMemberService<P,S>
-
-
Constructor Summary
Constructors Constructor Description DefaultSegmentMemberService(CustomerSegmentService<S> customerSegmentService, int clearSegmentMemberBatchSize, SegmentMemberRepository<com.broadleafcommerce.data.tracking.core.Trackable> repository, com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityHelper helper)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
cannotAddCustomerToSegmentError(P segmentMember, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Creates and throws an error for use if manually adding customers to this segment is not supported.P
createSegmentMember(P segmentMember, String source, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Creates and adds a customer/segment relationship.protected void
customerAlreadyExistsInSegmentError(P segmentMember)
Creates and throws an error for use if the customer already exists in this segment.protected int
getClearSegmentMemberBatchSize()
The batch size of customers to be included in aClearCustomerSegmentRequest
protected CustomerSegmentService<S>
getCustomerSegmentService()
protected SegmentMemberRepository<com.broadleafcommerce.data.tracking.core.Trackable>
getRepository()
protected void
notifySegmentClear(String segmentId, List<P> segmentMembers)
Stream<P>
readAllBySegmentId(String segmentId, cz.jirutka.rsql.parser.ast.Node filters, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Reads the segment members for the specified customer segment id matching the given filters.List<P>
readAllBySegmentIdAndCustomerEmail(String segmentId, Set<String> emailAddresses, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Reads the segment members for the specified customer segment id and customer email addresses.Optional<P>
readMemberInSegment(String segmentId, String customerId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Returns a particular customer/segment relationship with the designated customer and segment IDs.org.springframework.data.domain.Page<P>
readMembersInSegment(String segmentId, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Reads a page of customers who are members of a segment.void
removeAllMembersFromSegment(String segmentId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Removes all customer/segment relationships from a particular segment.void
removeMemberFromSegment(String segmentId, String customerId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Removes a particular customer/segment relationship with the designated customer and segment IDs.protected void
sendRemoveAllMembersNotification(String segmentId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Send a batch or batches of notification containing user and segment IDs to ensure segments are properly cleared in auth.protected void
validateCustomerAddToSegment(P segmentMember, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Validates that a customer may be added to a segment.-
Methods inherited from class com.broadleafcommerce.data.tracking.core.service.BaseRsqlCrudEntityService
getRsqlHelper, readAll, readAll, readAll, readAll
-
Methods inherited from class com.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService
convertFromPersistentDomain, convertToPersistentDomain, create, createAll, createAllAllowingPartialSuccess, delete, getHelper, getSortPositionStrategy, readAll, readAll, readAll, readAllByContextId, readByContextId, replace, replaceAll, replaceAllAllowingPartialSuccess, setSortPositionStrategy, update, updateAll, updateAllAllowingPartialSuccess, updateSort
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.broadleafcommerce.data.tracking.core.service.CrudEntityService
create, createAll, createAllAllowingPartialSuccess, delete, readAll, readAll, readAll, readAllByContextId, readByContextId, replace, replaceAll, replaceAllAllowingPartialSuccess, update, updateAll, updateAllAllowingPartialSuccess, updateSort
-
-
-
-
Constructor Detail
-
DefaultSegmentMemberService
public DefaultSegmentMemberService(CustomerSegmentService<S> customerSegmentService, int clearSegmentMemberBatchSize, SegmentMemberRepository<com.broadleafcommerce.data.tracking.core.Trackable> repository, com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityHelper helper)
-
-
Method Detail
-
readMembersInSegment
public org.springframework.data.domain.Page<P> readMembersInSegment(String segmentId, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Description copied from interface:SegmentMemberService
Reads a page of customers who are members of a segment.- Specified by:
readMembersInSegment
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentId
- The segment IDfilters
- An RSQL filter used to narrow query results. May beEmptyNode
if no filters should be applied.pageable
- The requested page of results from the databasecontext
- Context information surrounding sandboxing and multitenant state- Returns:
- A page of customer/segment relationships
-
readMemberInSegment
public Optional<P> readMemberInSegment(String segmentId, String customerId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Description copied from interface:SegmentMemberService
Returns a particular customer/segment relationship with the designated customer and segment IDs.- Specified by:
readMemberInSegment
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentId
- The segment IDcustomerId
- The customer IDcontext
- Context information surrounding sandboxing and multitenant state- Returns:
- The customer/segment relationship.
-
removeMemberFromSegment
public void removeMemberFromSegment(String segmentId, String customerId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Description copied from interface:SegmentMemberService
Removes a particular customer/segment relationship with the designated customer and segment IDs.- Specified by:
removeMemberFromSegment
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentId
- The segment IDcustomerId
- The customer IDcontext
- Context information surrounding sandboxing and multitenant state
-
removeAllMembersFromSegment
@Transactional("customerTransactionManager") public void removeAllMembersFromSegment(String segmentId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Description copied from interface:SegmentMemberService
Removes all customer/segment relationships from a particular segment.- Specified by:
removeAllMembersFromSegment
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentId
- The segment IDcontext
- Context information surrounding sandboxing and multitenant state
-
createSegmentMember
public P createSegmentMember(P segmentMember, String source, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Description copied from interface:SegmentMemberService
Creates and adds a customer/segment relationship.This differs from a standard create in that additional validation is performed based on the segment's type. For example, attempting to manually add a customer to a segment with the type
RULE_BASED
is not allowed and an exception should be thrown.For performance critical operations (e.g. a bulk import), use
CrudEntityService.create(Object, ContextInfo)
- Specified by:
createSegmentMember
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentMember
- The customer/segment relationship to create.source
- The source of this segment/customer relationship.context
- Context information surrounding sandboxing and multitenant state- Returns:
- The customer/segment relationship if added successfully.
- See Also:
CustomerSegmentType.canManuallyAddCustomers()
,SegmentMemberSource
-
readAllBySegmentId
public Stream<P> readAllBySegmentId(String segmentId, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Description copied from interface:SegmentMemberService
Reads the segment members for the specified customer segment id matching the given filters.- Specified by:
readAllBySegmentId
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentId
- theCustomerSegment
idfilters
- additional filters to apply in the querycontextInfo
- Request context information around sandbox and multitenant state- Returns:
- the segment members for the specified customer segment id matching the given filters
-
readAllBySegmentIdAndCustomerEmail
public List<P> readAllBySegmentIdAndCustomerEmail(String segmentId, Set<String> emailAddresses, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Description copied from interface:SegmentMemberService
Reads the segment members for the specified customer segment id and customer email addresses.- Specified by:
readAllBySegmentIdAndCustomerEmail
in interfaceSegmentMemberService<P extends SegmentMember,S extends CustomerSegment>
- Parameters:
segmentId
- theCustomerSegment
idemailAddresses
- the set ofCustomer
emailcontextInfo
- Request context information around sandbox and multitenant state- Returns:
- the segment members for the specified customer segment id and customer email addresses
-
validateCustomerAddToSegment
protected void validateCustomerAddToSegment(P segmentMember, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Validates that a customer may be added to a segment.- Parameters:
segmentMember
- The SegmentMember to evaluatecontext
- The current context- Throws:
com.broadleafcommerce.common.error.validation.ValidationException
- if a customer cannot be added to the specific segment type, or the customer already exists in the segment
-
cannotAddCustomerToSegmentError
protected void cannotAddCustomerToSegmentError(P segmentMember, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Creates and throws an error for use if manually adding customers to this segment is not supported.- Parameters:
segmentMember
- The segment that failed validationcontext
- The current context- Throws:
com.broadleafcommerce.common.error.validation.ValidationException
- Always thrown
-
customerAlreadyExistsInSegmentError
protected void customerAlreadyExistsInSegmentError(P segmentMember)
Creates and throws an error for use if the customer already exists in this segment.- Parameters:
segmentMember
- The segment that failed validation- Throws:
com.broadleafcommerce.common.error.validation.ValidationException
- Always thrown
-
sendRemoveAllMembersNotification
protected void sendRemoveAllMembersNotification(String segmentId, com.broadleafcommerce.data.tracking.core.context.ContextInfo context)
Send a batch or batches of notification containing user and segment IDs to ensure segments are properly cleared in auth.- Parameters:
segmentId
- The segment ID that is to be cleared.context
- The current context.
-
getCustomerSegmentService
@NonNull protected CustomerSegmentService<S> getCustomerSegmentService()
-
getRepository
@NonNull protected SegmentMemberRepository<com.broadleafcommerce.data.tracking.core.Trackable> getRepository()
- Overrides:
getRepository
in classcom.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends SegmentMember>
-
getClearSegmentMemberBatchSize
protected int getClearSegmentMemberBatchSize()
The batch size of customers to be included in aClearCustomerSegmentRequest
-
-