Class SegmentServiceImpl

java.lang.Object
org.apache.unomi.services.impl.AbstractServiceImpl
org.apache.unomi.services.impl.segments.SegmentServiceImpl
All Implemented Interfaces:
EventListener, SegmentService, org.osgi.framework.BundleListener, org.osgi.framework.SynchronousBundleListener

public class SegmentServiceImpl extends AbstractServiceImpl implements SegmentService, org.osgi.framework.SynchronousBundleListener
  • Constructor Details

    • SegmentServiceImpl

      public SegmentServiceImpl()
  • Method Details

    • setBundleContext

      public void setBundleContext(org.osgi.framework.BundleContext bundleContext)
    • setEventService

      public void setEventService(EventService eventService)
    • setRulesService

      public void setRulesService(RulesService rulesService)
    • setSchedulerService

      public void setSchedulerService(SchedulerService schedulerService)
    • setSegmentUpdateBatchSize

      public void setSegmentUpdateBatchSize(int segmentUpdateBatchSize)
    • setAggregateQueryBucketSize

      public void setAggregateQueryBucketSize(int aggregateQueryBucketSize)
    • setMaximumIdsQueryCount

      public void setMaximumIdsQueryCount(int maximumIdsQueryCount)
    • setPastEventsDisablePartitions

      public void setPastEventsDisablePartitions(boolean pastEventsDisablePartitions)
    • setSegmentRefreshInterval

      public void setSegmentRefreshInterval(long segmentRefreshInterval)
    • setMaxRetriesForUpdateProfileSegment

      public void setMaxRetriesForUpdateProfileSegment(int maxRetriesForUpdateProfileSegment)
    • setSecondsDelayForRetryUpdateProfileSegment

      public void setSecondsDelayForRetryUpdateProfileSegment(long secondsDelayForRetryUpdateProfileSegment)
    • setBatchSegmentProfileUpdate

      public void setBatchSegmentProfileUpdate(boolean batchSegmentProfileUpdate)
    • setSendProfileUpdateEventForSegmentUpdate

      public void setSendProfileUpdateEventForSegmentUpdate(boolean sendProfileUpdateEventForSegmentUpdate)
    • setDailyDateExprEvaluationHourUtc

      public void setDailyDateExprEvaluationHourUtc(int dailyDateExprEvaluationHourUtc)
    • postConstruct

      public void postConstruct() throws IOException
      Throws:
      IOException
    • preDestroy

      public void preDestroy()
    • getSegmentMetadatas

      public PartialList<Metadata> getSegmentMetadatas(int offset, int size, String sortBy)
      Description copied from interface: SegmentService
      Retrieves segment metadatas, ordered according to the specified sortBy String and and paged: only size of them are retrieved, starting with the offset-th one.
      Specified by:
      getSegmentMetadatas in interface SegmentService
      Parameters:
      offset - zero or a positive integer specifying the position of the first element in the total ordered collection of matching elements
      size - a positive integer specifying how many matching elements should be retrieved or -1 if all of them should be retrieved
      sortBy - an optional (null if no sorting is required) String of comma (,) separated property names on which ordering should be performed, ordering elements according to the property order in the String, considering each in turn and moving on to the next one in case of equality of all preceding ones. Each property name is optionally followed by a column (:) and an order specifier: asc or desc.
      Returns:
      a PartialList of segment metadata
    • getSegmentMetadatas

      public PartialList<Metadata> getSegmentMetadatas(String scope, int offset, int size, String sortBy)
      Description copied from interface: SegmentService
      Retrieves segment metadatas for segments in the specified scope, ordered according to the specified sortBy String and and paged: only size of them are retrieved, starting with the offset-th one. TODO: remove?
      Specified by:
      getSegmentMetadatas in interface SegmentService
      Parameters:
      scope - the scope for which we want to retrieve segment metadata
      offset - zero or a positive integer specifying the position of the first element in the total ordered collection of matching elements
      size - a positive integer specifying how many matching elements should be retrieved or -1 if all of them should be retrieved
      sortBy - an optional (null if no sorting is required) String of comma (,) separated property names on which ordering should be performed, ordering elements according to the property order in the String, considering each in turn and moving on to the next one in case of equality of all preceding ones. Each property name is optionally followed by a column (:) and an order specifier: asc or desc.
      Returns:
      a PartialList of segment metadata
    • getSegmentMetadatas

      public PartialList<Metadata> getSegmentMetadatas(Query query)
      Description copied from interface: SegmentService
      Retrieves the metadata for segments matching the specified Query.
      Specified by:
      getSegmentMetadatas in interface SegmentService
      Parameters:
      query - the query that the segments must match for their metadata to be retrieved
      Returns:
      a PartialList of segment metadata
    • getSegmentDefinition

      public Segment getSegmentDefinition(String segmentId)
      Description copied from interface: SegmentService
      Retrieves the segment identified by the specified identifier.
      Specified by:
      getSegmentDefinition in interface SegmentService
      Parameters:
      segmentId - the identifier of the segment to be retrieved
      Returns:
      the segment identified by the specified identifier or null if no such segment exists
    • setSegmentDefinition

      public void setSegmentDefinition(Segment segment)
      Description copied from interface: SegmentService
      Persists the specified segment in the context server.
      Specified by:
      setSegmentDefinition in interface SegmentService
      Parameters:
      segment - the segment to be persisted
    • getSegmentDependentMetadata

      public DependentMetadata getSegmentDependentMetadata(String segmentId)
      Description copied from interface: SegmentService
      Retrieves the list of Segment and Scoring metadata depending on the specified segment. A segment or scoring is depending on a segment if it includes a profileSegmentCondition with a test on this segment.
      Specified by:
      getSegmentDependentMetadata in interface SegmentService
      Parameters:
      segmentId - the segment identifier
      Returns:
      a list of Segment/Scoring Metadata depending on the specified segment
    • removeSegmentDefinition

      public DependentMetadata removeSegmentDefinition(String segmentId, boolean validate)
      Description copied from interface: SegmentService
      Removes the segment definition identified by the specified identifier. We can specify that we want the operation to be validated beforehand so that we can know if any other segment that might use the segment we're trying to delete as a condition might be impacted. If validate is set to false, no validation is performed. If set to true, we will first check if any segment or scoring depends on the segment we're trying to delete and if so we will not delete the segment but rather return the list of the metadata of the impacted items. If no dependents are found, then we properly delete the segment.
      Specified by:
      removeSegmentDefinition in interface SegmentService
      Parameters:
      segmentId - the identifier of the segment we want to delete
      validate - whether or not to perform validation
      Returns:
      a list of impacted segment metadata if any or an empty list if none were found or validation was skipped
    • getMatchingIndividuals

      public PartialList<Profile> getMatchingIndividuals(String segmentID, int offset, int size, String sortBy)
      Description copied from interface: SegmentService
      Retrieves a list of profiles matching the conditions defined by the segment identified by the specified identifier, ordered according to the specified sortBy String and and paged: only size of them are retrieved, starting with the offset-th one.
      Specified by:
      getMatchingIndividuals in interface SegmentService
      Parameters:
      segmentID - the identifier of the segment for which we want to retrieve matching profiles
      offset - zero or a positive integer specifying the position of the first element in the total ordered collection of matching elements
      size - a positive integer specifying how many matching elements should be retrieved or -1 if all of them should be retrieved
      sortBy - an optional (null if no sorting is required) String of comma (,) separated property names on which ordering should be performed, ordering elements according to the property order in the String, considering each in turn and moving on to the next one in case of equality of all preceding ones. Each property name is optionally followed by a column (:) and an order specifier: asc or desc.
      Returns:
      a PartialList of profiles matching the specified segment
    • getMatchingIndividualsCount

      public long getMatchingIndividualsCount(String segmentID)
      Description copied from interface: SegmentService
      Retrieves the number of profiles matching the conditions defined by the segment identified by the specified identifier.
      Specified by:
      getMatchingIndividualsCount in interface SegmentService
      Parameters:
      segmentID - the identifier of the segment for which we want to retrieve matching profiles
      Returns:
      the number of profiles matching the conditions defined by the segment identified by the specified identifier
    • isProfileInSegment

      public Boolean isProfileInSegment(Profile profile, String segmentId)
      Description copied from interface: SegmentService
      Determines whether the specified profile is part of the segment identified by the specified identifier.
      Specified by:
      isProfileInSegment in interface SegmentService
      Parameters:
      profile - the profile we want to check
      segmentId - the identifier of the segment against which we want to check the profile
      Returns:
      true if the specified profile is in the specified segment, false otherwise
    • getSegmentsAndScoresForProfile

      public SegmentsAndScores getSegmentsAndScoresForProfile(Profile profile)
      Description copied from interface: SegmentService
      Retrieves the segments and scores for the specified profile.
      Specified by:
      getSegmentsAndScoresForProfile in interface SegmentService
      Parameters:
      profile - the profile for which we want to retrieve segments and scores
      Returns:
      a SegmentsAndScores instance encapsulating the segments and scores for the specified profile
    • getSegmentMetadatasForProfile

      public List<Metadata> getSegmentMetadatasForProfile(Profile profile)
      Description copied from interface: SegmentService
      Retrieves the list of segment metadata for the segments the specified profile is a member of.
      Specified by:
      getSegmentMetadatasForProfile in interface SegmentService
      Parameters:
      profile - the profile for which we want to retrieve the segment metadata
      Returns:
      the (possibly empty) list of segment metadata for the segments the specified profile is a member of
    • getScoringMetadatas

      public PartialList<Metadata> getScoringMetadatas(int offset, int size, String sortBy)
      Description copied from interface: SegmentService
      Retrieves the set of all scoring metadata.
      Specified by:
      getScoringMetadatas in interface SegmentService
      Parameters:
      offset - the offset
      size - the size
      sortBy - sort by
      Returns:
      the set of all scoring metadata
    • getScoringMetadatas

      public PartialList<Metadata> getScoringMetadatas(Query query)
      Description copied from interface: SegmentService
      Retrieves the set of scoring metadata for scorings matching the specified query.
      Specified by:
      getScoringMetadatas in interface SegmentService
      Parameters:
      query - the query the scorings must match for their metadata to be retrieved
      Returns:
      the set of scoring metadata for scorings matching the specified query
    • getScoringDefinition

      public Scoring getScoringDefinition(String scoringId)
      Description copied from interface: SegmentService
      Retrieves the scoring identified by the specified identifier.
      Specified by:
      getScoringDefinition in interface SegmentService
      Parameters:
      scoringId - the identifier of the scoring to be retrieved
      Returns:
      the scoring identified by the specified identifier or null if no such scoring exists
    • setScoringDefinition

      public void setScoringDefinition(Scoring scoring)
      Description copied from interface: SegmentService
      Persists the specified scoring in the context server.
      Specified by:
      setScoringDefinition in interface SegmentService
      Parameters:
      scoring - the scoring to be persisted
    • createScoringDefinition

      public void createScoringDefinition(String scope, String scoringId, String name, String description)
      Description copied from interface: SegmentService
      Creates a scoring with the specified scope, identifier, name and description.
      Specified by:
      createScoringDefinition in interface SegmentService
      Parameters:
      scope - the scope for the new scoring
      scoringId - the identifier for the new scoring
      name - the name of the new scoring
      description - the description of the new scoring
      See Also:
    • getScoringDependentMetadata

      public DependentMetadata getScoringDependentMetadata(String scoringId)
      Description copied from interface: SegmentService
      Retrieves the list of Segment and Scoring metadata depending on the specified scoring. A segment or scoring is depending on a segment if it includes a scoringCondition with a test on this scoring.
      Specified by:
      getScoringDependentMetadata in interface SegmentService
      Parameters:
      scoringId - the segment identifier
      Returns:
      a list of Segment/Scoring Metadata depending on the specified scoring
    • removeScoringDefinition

      public DependentMetadata removeScoringDefinition(String scoringId, boolean validate)
      Description copied from interface: SegmentService
      Removes the scoring definition identified by the specified identifier. We can specify that we want the operation to be validated beforehand so that we can know if any other segment that might use the segment we're trying to delete as a condition might be impacted. If validate is set to false, no validation is performed. If set to true, we will first check if any segment or scoring depends on the scoring we're trying to delete and if so we will not delete the scoring but rather return the list of the metadata of the impacted items. If no dependents are found, then we properly delete the scoring.
      Specified by:
      removeScoringDefinition in interface SegmentService
      Parameters:
      scoringId - the identifier of the scoring we want to delete
      validate - whether or not to perform validation
      Returns:
      a list of impacted items metadata if any or an empty list if none were found or validation was skipped
    • updateAutoGeneratedRules

      public void updateAutoGeneratedRules(Metadata metadata, Condition condition)
    • getGeneratedPropertyKey

      public String getGeneratedPropertyKey(Condition condition, Condition parentCondition)
      Description copied from interface: SegmentService
      Get generated property key for past event condition
      Specified by:
      getGeneratedPropertyKey in interface SegmentService
      Parameters:
      condition - The event condition
      parentCondition - The past event condition
      Returns:
      a String representing the condition and parent condition uniquelly
    • recalculatePastEventConditions

      public void recalculatePastEventConditions()
      Description copied from interface: SegmentService
      This will recalculate the past event conditions from existing rules It will also recalculate date relative Segments and Scorings (when they contains date expression conditions for example) This operation can be heavy and take time, it will: - browse existing rules to extract the past event condition, - query the matching events for those conditions, - update the corresponding profiles - reevaluate segments/scorings linked to this rules to engaged/disengaged profiles after the occurrences have been updated - reevaluate segments/scoring that contains date expressions So use it carefully or execute this method in a dedicated thread.
      Specified by:
      recalculatePastEventConditions in interface SegmentService
    • bundleChanged

      public void bundleChanged(org.osgi.framework.BundleEvent event)
      Specified by:
      bundleChanged in interface org.osgi.framework.BundleListener
    • setTaskExecutionPeriod

      public void setTaskExecutionPeriod(long taskExecutionPeriod)