Class DefaultSegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>

  • 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>
    • 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 a ClearCustomerSegmentRequest
      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 interface com.broadleafcommerce.data.tracking.core.service.CrudEntityService

        create, createAll, createAllAllowingPartialSuccess, delete, readAll, readAll, readAll, readAllByContextId, readByContextId, replace, replaceAll, replaceAllAllowingPartialSuccess, update, updateAll, updateAllAllowingPartialSuccess, updateSort
      • Methods inherited from interface com.broadleafcommerce.data.tracking.core.service.RsqlCrudEntityService

        readAll, readAll, readAll, readAll
    • 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 interface SegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>
        Parameters:
        segmentId - The segment ID
        filters - An RSQL filter used to narrow query results. May be EmptyNode if no filters should be applied.
        pageable - The requested page of results from the database
        context - 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 interface SegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>
        Parameters:
        segmentId - The segment ID
        customerId - The customer ID
        context - 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 interface SegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>
        Parameters:
        segmentId - The segment ID
        customerId - The customer ID
        context - 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 interface SegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>
        Parameters:
        segmentId - The segment ID
        context - 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 interface SegmentMemberService<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 interface SegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>
        Parameters:
        segmentId - the CustomerSegment id
        filters - additional filters to apply in the query
        contextInfo - 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 interface SegmentMemberService<P extends SegmentMember,​S extends CustomerSegment>
        Parameters:
        segmentId - the CustomerSegment id
        emailAddresses - the set of Customer email
        contextInfo - 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 evaluate
        context - 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 validation
        context - 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.
      • notifySegmentClear

        protected void notifySegmentClear​(String segmentId,
                                          List<P> segmentMembers)
      • getRepository

        @NonNull
        protected SegmentMemberRepository<com.broadleafcommerce.data.tracking.core.Trackable> getRepository()
        Overrides:
        getRepository in class com.broadleafcommerce.data.tracking.core.service.BaseCrudEntityService<P extends SegmentMember>
      • getClearSegmentMemberBatchSize

        protected int getClearSegmentMemberBatchSize()
        The batch size of customers to be included in a ClearCustomerSegmentRequest