Class ProfileServiceImpl

java.lang.Object
org.apache.unomi.services.impl.profiles.ProfileServiceImpl
All Implemented Interfaces:
EventListener, ProfileService, org.osgi.framework.BundleListener, org.osgi.framework.SynchronousBundleListener

public class ProfileServiceImpl extends Object implements ProfileService, org.osgi.framework.SynchronousBundleListener
  • Constructor Details

    • ProfileServiceImpl

      public ProfileServiceImpl()
  • Method Details

    • setBundleContext

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

      public void setPersistenceService(PersistenceService persistenceService)
    • setDefinitionsService

      public void setDefinitionsService(DefinitionsService definitionsService)
    • setSchedulerService

      public void setSchedulerService(SchedulerService schedulerService)
    • setSegmentService

      public void setSegmentService(SegmentService segmentService)
    • setForceRefreshOnSave

      public void setForceRefreshOnSave(boolean forceRefreshOnSave)
    • setPropertiesRefreshInterval

      public void setPropertiesRefreshInterval(long propertiesRefreshInterval)
    • postConstruct

      public void postConstruct()
    • preDestroy

      public void preDestroy()
    • setPurgeProfileExistTime

      public void setPurgeProfileExistTime(Integer purgeProfileExistTime)
    • setPurgeProfileInactiveTime

      public void setPurgeProfileInactiveTime(Integer purgeProfileInactiveTime)
    • setPurgeSessionsAndEventsTime

      @Deprecated public void setPurgeSessionsAndEventsTime(Integer purgeSessionsAndEventsTime)
      Deprecated.
    • setPurgeProfileInterval

      public void setPurgeProfileInterval(Integer purgeProfileInterval)
    • setPurgeSessionExistTime

      public void setPurgeSessionExistTime(Integer purgeSessionExistTime)
    • setPurgeEventExistTime

      public void setPurgeEventExistTime(Integer purgeEventExistTime)
    • reloadPropertyTypes

      public void reloadPropertyTypes(boolean refresh)
    • purgeProfiles

      public void purgeProfiles(int inactiveNumberOfDays, int existsNumberOfDays)
      Description copied from interface: ProfileService
      Purge (delete) profiles example: Purge profile inactive since 10 days only: purgeProfiles(10, 0); example: Purge profile created since 30 days only: purgeProfiles(0, 30);
      Specified by:
      purgeProfiles in interface ProfileService
      Parameters:
      inactiveNumberOfDays - will purge profiles with no visits since this number of days (0 or negative value, will have no effect)
      existsNumberOfDays - will purge profiles created since this number of days (0 or negative value, will have no effect)
    • purgeSessionItems

      public void purgeSessionItems(int existsNumberOfDays)
      Description copied from interface: ProfileService
      Purge (delete) session items
      Specified by:
      purgeSessionItems in interface ProfileService
      Parameters:
      existsNumberOfDays - will purge sessions created since this number of days (0 or negative value, will have no effect)
    • purgeEventItems

      public void purgeEventItems(int existsNumberOfDays)
      Description copied from interface: ProfileService
      Purge (delete) event items
      Specified by:
      purgeEventItems in interface ProfileService
      Parameters:
      existsNumberOfDays - will purge events created since this number of days (0 or negative value, will have no effect)
    • purgeMonthlyItems

      @Deprecated public void purgeMonthlyItems(int existsNumberOfMonths)
      Deprecated.
      Description copied from interface: ProfileService
      Use purgeSessionItems and purgeEventItems to remove rollover items instead
      Specified by:
      purgeMonthlyItems in interface ProfileService
      Parameters:
      existsNumberOfMonths - used to remove monthly indices older than this number of months
    • getAllProfilesCount

      public long getAllProfilesCount()
      Description copied from interface: ProfileService
      Retrieves the number of unique profiles.
      Specified by:
      getAllProfilesCount in interface ProfileService
      Returns:
      the number of unique profiles.
    • search

      public <T extends Profile> PartialList<T> search(Query query, Class<T> clazz)
      Description copied from interface: ProfileService
      Retrieves profiles or personas matching the specified query.
      Specified by:
      search in interface ProfileService
      Type Parameters:
      T - the specific sub-type of Profile to retrieve
      Parameters:
      query - a Query specifying which elements to retrieve
      clazz - the class of elements to retrieve
      Returns:
      a PartialList of T instances matching the specified query
    • searchSessions

      public PartialList<Session> searchSessions(Query query)
      Description copied from interface: ProfileService
      Retrieves sessions matching the specified query.
      Specified by:
      searchSessions in interface ProfileService
      Parameters:
      query - a Query specifying which elements to retrieve
      Returns:
      a PartialList of sessions matching the specified query
    • setPropertyType

      public boolean setPropertyType(PropertyType property)
      Description copied from interface: ProfileService
      Persists the specified property type in the context server. TODO: move to a different class
      Specified by:
      setPropertyType in interface ProfileService
      Parameters:
      property - the property type to persist
      Returns:
      true if the property type was properly created, false otherwise (for example, if the property type already existed
    • deletePropertyType

      public boolean deletePropertyType(String propertyId)
      Description copied from interface: ProfileService
      Deletes the property type identified by the specified identifier. TODO: move to a different class
      Specified by:
      deletePropertyType in interface ProfileService
      Parameters:
      propertyId - the identifier of the property type to delete
      Returns:
      true if the property type was properly deleted, false otherwise
    • getExistingProperties

      public Set<PropertyType> getExistingProperties(String tag, String itemType)
      Description copied from interface: ProfileService
      Retrieves the existing property types for the specified type as defined by the Item subclass public field ITEM_TYPE and with the specified tag. TODO: move to a different class
      Specified by:
      getExistingProperties in interface ProfileService
      Parameters:
      tag - the tag we're interested in
      itemType - the String representation of the item type we want to retrieve the count of, as defined by its class' ITEM_TYPE field
      Returns:
      all property types defined for the specified item type and with the specified tag
    • getExistingProperties

      public Set<PropertyType> getExistingProperties(String tag, String itemType, boolean systemTag)
      Description copied from interface: ProfileService
      Retrieves the existing property types for the specified type as defined by the Item subclass public field ITEM_TYPE and with the specified tag (system or regular) TODO: move to a different class
      Specified by:
      getExistingProperties in interface ProfileService
      Parameters:
      tag - the tag we're interested in
      itemType - the String representation of the item type we want to retrieve the count of, as defined by its class' ITEM_TYPE field
      systemTag - whether the specified is a system tag or a regular one
      Returns:
      all property types defined for the specified item type and with the specified tag
    • exportProfilesPropertiesToCsv

      public String exportProfilesPropertiesToCsv(Query query)
      Description copied from interface: ProfileService
      Creates a String containing comma-separated values (CSV) formatted version of profiles matching the specified query.
      Specified by:
      exportProfilesPropertiesToCsv in interface ProfileService
      Parameters:
      query - the query specifying which profiles to export
      Returns:
      a CSV-formatted String version of the profiles matching the specified query
    • findProfilesByPropertyValue

      public PartialList<Profile> findProfilesByPropertyValue(String propertyName, String propertyValue, int offset, int size, String sortBy)
      Description copied from interface: ProfileService
      Find profiles which have the specified property with the specified value, ordered according to the specified sortBy String and paged: only size of them are retrieved, starting with the offset-th one. TODO: replace with version using a query instead of separate parameters TODO: remove as it's unused?
      Specified by:
      findProfilesByPropertyValue in interface ProfileService
      Parameters:
      propertyName - the name of the property we're interested in
      propertyValue - the value of the property we want profiles to have
      offset - zero or a positive integer specifying the position of the first profile in the total ordered collection of matching profiles
      size - a positive integer specifying how many matching profiles 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 matching profiles
    • load

      public Profile load(String profileId)
      Description copied from interface: ProfileService
      Retrieves the profile identified by the specified identifier.
      Specified by:
      load in interface ProfileService
      Parameters:
      profileId - the identifier of the profile to retrieve
      Returns:
      the profile identified by the specified identifier or null if no such profile exists
    • save

      public Profile save(Profile profile)
      Description copied from interface: ProfileService
      Saves the specified profile in the context server.
      Specified by:
      save in interface ProfileService
      Parameters:
      profile - the profile to be saved
      Returns:
      the newly saved profile
    • addAliasToProfile

      public void addAliasToProfile(String profileID, String alias, String clientID)
      Description copied from interface: ProfileService
      Adds the alias to the profile.
      Specified by:
      addAliasToProfile in interface ProfileService
      Parameters:
      profileID - the identifier of the profile
      alias - the alias which should be linked with of the profile
      clientID - the identifier of the client
    • removeAliasFromProfile

      public ProfileAlias removeAliasFromProfile(String profileID, String alias, String clientID)
      Description copied from interface: ProfileService
      Removes the alias from the profile.
      Specified by:
      removeAliasFromProfile in interface ProfileService
      Parameters:
      profileID - the identifier of the profile
      alias - the alias which should be unlinked from the profile
      clientID - the identifier of the client
    • findProfileAliases

      public PartialList<ProfileAlias> findProfileAliases(String profileId, int offset, int size, String sortBy)
      Description copied from interface: ProfileService
      Find profile aliases which have the specified property with the specified value, ordered according to the specified sortBy String and paged: only size of them are retrieved, starting with the offset-th one.
      Specified by:
      findProfileAliases in interface ProfileService
      Parameters:
      profileId - the identifier of the profile
      offset - zero or a positive integer specifying the position of the first profile in the total ordered collection of matching profiles
      size - a positive integer specifying how many matching profiles 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 matching profiles
    • saveOrMerge

      public Profile saveOrMerge(Profile profile)
      Description copied from interface: ProfileService
      Merge the specified profile properties in an existing profile,or save new profile if it does not exist yet
      Specified by:
      saveOrMerge in interface ProfileService
      Parameters:
      profile - the profile to be saved
      Returns:
      the newly saved or merged profile or null if the save or merge operation failed.
    • savePersona

      public Persona savePersona(Persona profile)
      Description copied from interface: ProfileService
      Persists the specified Persona in the context server.
      Specified by:
      savePersona in interface ProfileService
      Parameters:
      profile - the persona to persist
      Returns:
      the newly persisted persona
    • delete

      public void delete(String profileId, boolean persona)
      Description copied from interface: ProfileService
      Removes the profile (or persona if the persona parameter is set to true) identified by the specified identifier.
      Specified by:
      delete in interface ProfileService
      Parameters:
      profileId - the identifier of the profile or persona to delete
      persona - true if the specified identifier is supposed to refer to a persona, false if it is supposed to refer to a profile
    • mergeProfiles

      public Profile mergeProfiles(Profile masterProfile, List<Profile> profilesToMerge)
      Description copied from interface: ProfileService
      Merges the specified profiles into the provided so-called master profile, merging properties according to the PropertyMergeStrategyType specified on their PropertyType.
      Specified by:
      mergeProfiles in interface ProfileService
      Parameters:
      masterProfile - the profile into which the specified profiles will be merged
      profilesToMerge - the list of profiles to merge into the specified master profile
      Returns:
      the merged profile
    • getProfileSessions

      public PartialList<Session> getProfileSessions(String profileId, String query, int offset, int size, String sortBy)
      Description copied from interface: ProfileService
      Retrieves the sessions associated with the profile identified by the specified identifier that match the specified query (if specified), ordered according to the specified sortBy String and and paged: only size of them are retrieved, starting with the offset-th one. TODO: use a Query object instead of distinct parameter
      Specified by:
      getProfileSessions in interface ProfileService
      Parameters:
      profileId - the identifier of the profile we want to retrieve sessions from
      query - a String of text used for fulltext filtering which sessions we are interested in or null (or an empty String) if we want to retrieve all sessions
      offset - zero or a positive integer specifying the position of the first session in the total ordered collection of matching sessions
      size - a positive integer specifying how many matching sessions 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 matching sessions
    • getPropertyTypeMapping

      public String getPropertyTypeMapping(String fromPropertyTypeId)
      Description copied from interface: ProfileService
      TODO
      Specified by:
      getPropertyTypeMapping in interface ProfileService
      Parameters:
      fromPropertyTypeId - fromPropertyTypeId
      Returns:
      property type mapping
    • loadSession

      public Session loadSession(String sessionId, Date dateHint)
      Description copied from interface: ProfileService
      Retrieves the session identified by the specified identifier.
      Specified by:
      loadSession in interface ProfileService
      Parameters:
      sessionId - the identifier of the session to be retrieved
      dateHint - a Date helping in identifying where the item is located
      Returns:
      the session identified by the specified identifier
    • loadSession

      public Session loadSession(String sessionId)
      Description copied from interface: ProfileService
      Retrieves the session identified by the specified identifier.
      Specified by:
      loadSession in interface ProfileService
      Parameters:
      sessionId - the identifier of the session to be retrieved
      Returns:
      the session identified by the specified identifier
    • saveSession

      public Session saveSession(Session session)
      Description copied from interface: ProfileService
      Saves the specified session.
      Specified by:
      saveSession in interface ProfileService
      Parameters:
      session - the session to be saved
      Returns:
      the newly saved session
    • findProfileSessions

      public PartialList<Session> findProfileSessions(String profileId)
      Description copied from interface: ProfileService
      Retrieves sessions associated with the profile identified by the specified identifier.
      Specified by:
      findProfileSessions in interface ProfileService
      Parameters:
      profileId - the profile id for which we want to retrieve the sessions
      Returns:
      a PartialList of the profile's sessions
    • removeProfileSessions

      public void removeProfileSessions(String profileId)
      Description copied from interface: ProfileService
      Removes all sessions of the specified profile
      Specified by:
      removeProfileSessions in interface ProfileService
      Parameters:
      profileId - identifier of the profile that we want to remove it's sessions
    • matchCondition

      public boolean matchCondition(Condition condition, Profile profile, Session session)
      Description copied from interface: ProfileService
      Checks whether the specified profile and/or session satisfy the specified condition.
      Specified by:
      matchCondition in interface ProfileService
      Parameters:
      condition - the condition we're testing against which might or might not have profile- or session-specific sub-conditions
      profile - the profile we're testing
      session - the session we're testing
      Returns:
      true if the profile and/or sessions match the specified condition, false otherwise
    • batchProfilesUpdate

      public void batchProfilesUpdate(BatchUpdate update)
      Description copied from interface: ProfileService
      Update all profiles in batch according to the specified BatchUpdate
      Specified by:
      batchProfilesUpdate in interface ProfileService
      Parameters:
      update - the batch update specification
    • loadPersona

      public Persona loadPersona(String personaId)
      Description copied from interface: ProfileService
      Retrieves the persona identified by the specified identifier.
      Specified by:
      loadPersona in interface ProfileService
      Parameters:
      personaId - the identifier of the persona to retrieve
      Returns:
      the persona associated with the specified identifier or null if no such persona exists.
    • loadPersonaWithSessions

      public PersonaWithSessions loadPersonaWithSessions(String personaId)
      Description copied from interface: ProfileService
      Retrieves the persona identified by the specified identifier and all its associated sessions
      Specified by:
      loadPersonaWithSessions in interface ProfileService
      Parameters:
      personaId - the identifier of the persona to retrieve
      Returns:
      a PersonaWithSessions instance with the persona identified by the specified identifier and all its associated sessions
    • createPersona

      public Persona createPersona(String personaId)
      Description copied from interface: ProfileService
      Creates a persona with the specified identifier and automatically creates an associated session with it.
      Specified by:
      createPersona in interface ProfileService
      Parameters:
      personaId - the identifier to use for the new persona
      Returns:
      the newly created persona
    • getTargetPropertyTypes

      public Collection<PropertyType> getTargetPropertyTypes(String target)
      Description copied from interface: ProfileService
      Retrieves all the property types associated with the specified target. TODO: move to a different class
      Specified by:
      getTargetPropertyTypes in interface ProfileService
      Parameters:
      target - the target for which we want to retrieve the associated property types
      Returns:
      a collection of all the property types associated with the specified target
    • getTargetPropertyTypes

      public Map<String,Collection<PropertyType>> getTargetPropertyTypes()
      Description copied from interface: ProfileService
      Retrieves all known property types. TODO: move to a different class TODO: use Map instead of HashMap
      Specified by:
      getTargetPropertyTypes in interface ProfileService
      Returns:
      a Map associating targets as keys to related PropertyTypes
    • getPropertyTypeByTag

      public Set<PropertyType> getPropertyTypeByTag(String tag)
      Description copied from interface: ProfileService
      Retrieves all property types with the specified tag TODO: move to a different class
      Specified by:
      getPropertyTypeByTag in interface ProfileService
      Parameters:
      tag - the tag name marking property types we want to retrieve
      Returns:
      a Set of the property types with the specified tag
    • getPropertyTypeBySystemTag

      public Set<PropertyType> getPropertyTypeBySystemTag(String tag)
      Description copied from interface: ProfileService
      Retrieves all property types with the specified system tag TODO: move to a different class
      Specified by:
      getPropertyTypeBySystemTag in interface ProfileService
      Parameters:
      tag - the system tag name marking property types we want to retrieve
      Returns:
      a Set of the property types with the specified system tag
    • getPropertyTypeByMapping

      public Collection<PropertyType> getPropertyTypeByMapping(String propertyName)
      Description copied from interface: ProfileService
      TODO
      Specified by:
      getPropertyTypeByMapping in interface ProfileService
      Parameters:
      propertyName - the property name
      Returns:
      list of property types
    • getPropertyType

      public PropertyType getPropertyType(String id)
      Description copied from interface: ProfileService
      Retrieves the property type identified by the specified identifier. TODO: move to a different class
      Specified by:
      getPropertyType in interface ProfileService
      Parameters:
      id - the identifier of the property type to retrieve
      Returns:
      the property type identified by the specified identifier or null if no such property type exists
    • getPersonaSessions

      public PartialList<Session> getPersonaSessions(String personaId, int offset, int size, String sortBy)
      Description copied from interface: ProfileService
      Retrieves the sessions associated with the persona 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:
      getPersonaSessions in interface ProfileService
      Parameters:
      personaId - the persona id
      offset - zero or a positive integer specifying the position of the first session in the total ordered collection of matching sessions
      size - a positive integer specifying how many matching sessions 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 sessions for the persona identified by the specified identifier
    • savePersonaWithSessions

      public PersonaWithSessions savePersonaWithSessions(PersonaWithSessions personaToSave)
      Description copied from interface: ProfileService
      Save a persona with its sessions.
      Specified by:
      savePersonaWithSessions in interface ProfileService
      Parameters:
      personaToSave - the persona object containing all the persona information and sessions
      Returns:
      the persona with sessions
    • setPropertyTypeTarget

      public void setPropertyTypeTarget(URL predefinedPropertyTypeURL, PropertyType propertyType)
      Description copied from interface: ProfileService
      This function will try to set the target on the property type if not set already, based on the file URL
      Specified by:
      setPropertyTypeTarget in interface ProfileService
      Parameters:
      predefinedPropertyTypeURL - the URL to extract the target from if the target is not yet. By default it will use the 5's part after a "/" character
      propertyType - the property type to register
    • bundleChanged

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

      public void refresh()
      Description copied from interface: ProfileService
      Forces a refresh of the profile service, to load data from persistence immediately instead of waiting for scheduled tasks to execute. Warning : this may have serious impacts on performance so it should only be used in specific scenarios such as integration tests.
      Specified by:
      refresh in interface ProfileService