Class DefaultChangeDetectionService

    • Field Detail

      • VERSION_MARKERS_FOR_STREAM_BY_PKS_QRY

        protected static final java.lang.String VERSION_MARKERS_FOR_STREAM_BY_PKS_QRY
        See Also:
        Constant Field Values
      • VERSION_MARKER_BY_PK

        protected static final java.lang.String VERSION_MARKER_BY_PK
        See Also:
        Constant Field Values
    • Constructor Detail

      • DefaultChangeDetectionService

        public DefaultChangeDetectionService()
    • Method Detail

      • getChangeForExistingItem

        public ItemChangeDTO getChangeForExistingItem​(ItemModel item,
                                                      java.lang.String streamId)
        Description copied from interface: ChangeDetectionService
        Detects change for a given existing item and stream. Finds changes of change type 'NEW' or "MODIFIED'.
        Specified by:
        getChangeForExistingItem in interface ChangeDetectionService
        Parameters:
        item - the item to be checked
        streamId - the streamId for which the changes should be detect
        Returns:
        ItemChangeDTO Object containing all the information about the change
      • getChangeForRemovedItem

        public ItemChangeDTO getChangeForRemovedItem​(PK pk,
                                                     java.lang.String streamId)
        Description copied from interface: ChangeDetectionService
        Detects potential change for a an not existing item - (change type 'DELETED'), stored under ItemVersionMarker referencing given item pk.
        Specified by:
        getChangeForRemovedItem in interface ChangeDetectionService
        Parameters:
        pk - the pk of the item to be checked
        streamId - the streamId for which the change should be detect
        Returns:
        ItemChangeDTO Object containing all the information about the change
      • getChangesForRemovedItems

        public java.util.List<ItemChangeDTO> getChangesForRemovedItems​(java.lang.String streamId)
        Description copied from interface: ChangeDetectionService
        Detects changes for all items, which doesn't exist anymore (change type 'DELETED'), stored under ItemVersionMarker referencing the not existing item pks.
        Specified by:
        getChangesForRemovedItems in interface ChangeDetectionService
        Parameters:
        streamId - the streamId for which the change should be detect
        Returns:
        List of ItemChangeDTO Objects containing all the information about the changes
      • collectChangesForType

        public void collectChangesForType​(ComposedTypeModel composedType,
                                          java.lang.String streamId,
                                          ChangesCollector collector)
        Description copied from interface: ChangeDetectionService
        Detects all kind of changes (NEW, MODIFIED, DELETED) on items for the given composed type.
        Specified by:
        collectChangesForType in interface ChangeDetectionService
        Parameters:
        composedType - the type for which the change detection should be executed (including subtypes)
        streamId - the streamId for which the change should be detect
        collector - responsible for collecting the changes in specified way, e.g. store them in memory or generate csv file.
      • collectChangesForType

        public void collectChangesForType​(ComposedTypeModel composedType,
                                          StreamConfiguration configuration,
                                          ChangesCollector collector)
        Description copied from interface: ChangeDetectionService
        Detects all kind of changes (NEW, MODIFIED, DELETED) on items for the given composed type.
        Specified by:
        collectChangesForType in interface ChangeDetectionService
        Parameters:
        composedType - the type for which the change detection should be executed (including subtypes)
        configuration - the stream configuration defining which item should be included into the stream.
        collector - responsible for collecting the changes in specified way, e.g. store them in memory or generate csv file.
        See Also:
        StreamConfiguration
      • getChangeFromRow

        protected ItemChangeDTO getChangeFromRow​(java.util.List<java.lang.Object> row,
                                                 java.lang.String streamId)
      • getQueryForDeletedItems

        protected java.lang.String getQueryForDeletedItems​(java.lang.String typePksAsQueryParams,
                                                           java.lang.String baseType,
                                                           java.lang.String itemSelector)
      • getQueryForModifiedItems

        protected java.lang.String getQueryForModifiedItems​(java.lang.String typePksAsQueryParams,
                                                            java.lang.String baseType,
                                                            java.lang.String itemSelector,
                                                            java.lang.String versionValuePart)
      • getQueryForNewItems

        protected java.lang.String getQueryForNewItems​(java.lang.String typePksAsQueryParams,
                                                       java.lang.String baseType,
                                                       java.lang.String itemSelector,
                                                       java.lang.String versionValuePart)
      • preloadVersionMarkers

        protected java.util.Map<java.lang.Long,​ItemVersionMarkerModel> preloadVersionMarkers​(java.util.List<ItemChangeDTO> changes,
                                                                                                   java.lang.String streamId)
      • consumeChangesBatch

        protected int consumeChangesBatch​(java.util.List<ItemChangeDTO> changes,
                                          java.lang.String streamId)
      • consumeChanges

        public void consumeChanges​(java.util.List<ItemChangeDTO> allChanges)
        Description copied from interface: ChangeDetectionService
        Consumes all given changes. it Means, for the changes of change type NEW - a new ItemVersionMarker is created, in case of change type MODIFIED - the item version marker is updated properly and in case of change type DELETED - the ItemVersionMarker is removed. The stream for which the changes will be consumed is defined inside the given ItemChangeDTO objects
        Specified by:
        consumeChanges in interface ChangeDetectionService
        Parameters:
        allChanges - list of the changes to be consumed.
      • logConsumedChanges

        protected void logConsumedChanges​(int numConsumed)
      • getPartitionedBatchChangesByStreamId

        protected java.util.Map<java.lang.String,​java.util.List<java.util.List<ItemChangeDTO>>> getPartitionedBatchChangesByStreamId​(java.util.List<ItemChangeDTO> allChanges)
      • prepareBatchExecutionCallables

        protected java.util.List<java.util.concurrent.Callable<java.lang.Integer>> prepareBatchExecutionCallables​(java.util.List<ItemChangeDTO> allChanges)
      • createConsumeBatchCallable

        protected java.util.concurrent.Callable<java.lang.Integer> createConsumeBatchCallable​(java.lang.String streamId,
                                                                                              java.util.List<ItemChangeDTO> changes,
                                                                                              int maxRetries)
      • deleteItemVersionMarkersForStream

        public void deleteItemVersionMarkersForStream​(java.lang.String streamId)
        Description copied from interface: ChangeDetectionService
        Deletes all item version markers belonging to the stream
        Specified by:
        deleteItemVersionMarkersForStream in interface ChangeDetectionService
        Parameters:
        streamId - stream id for which item version markers should be deleted
      • resetStream

        public void resetStream​(java.lang.String streamId)
        Description copied from interface: ChangeDetectionService
        Resets the stream. It means that all ItemVersionMarkers with status DELETED will change their status to ACTIVE and all the ItemVersionMarkers with status ACTIVE will have their versionTS set to the beginning of Unix Epoch time (1 January 1970).
        Specified by:
        resetStream in interface ChangeDetectionService
        Parameters:
        streamId - stream id for which item version markers should be reset
      • findItemVersionMarkersForStreamByPKs

        protected java.util.Map<java.lang.Long,​ItemVersionMarkerModel> findItemVersionMarkersForStreamByPKs​(java.lang.String streamId,
                                                                                                                  java.util.List<PK> PKs)
      • findVersionMarkerByItemPK

        protected ItemVersionMarkerModel findVersionMarkerByItemPK​(java.lang.String streamId,
                                                                   java.lang.Long itemPk)
        Checks and returns existing item version marker for the item and stream. Useful to check if the item has already assigned ItemVersionMarker in 'DELETED' state - in such case we'd just change status to 'ACTIVE' in order to avoid having to ItemVersionMarkers ('ACTIVE' and 'DELETED') for the same item.
      • getDeletedVersionMarkers

        protected java.util.List<ItemVersionMarkerModel> getDeletedVersionMarkers​(java.lang.String streamId)
      • getComposedTypesForStream

        protected java.util.List<ComposedTypeModel> getComposedTypesForStream​(java.lang.String streamId)
      • getVersionMarkersForRemovedItems

        protected java.util.List<ItemVersionMarkerModel> getVersionMarkersForRemovedItems​(java.lang.String streamId)
      • fillInitialVersionMarker

        protected void fillInitialVersionMarker​(ItemVersionMarkerModel marker,
                                                java.lang.Long itemPK,
                                                java.util.Date version,
                                                java.lang.String versionValue,
                                                java.lang.String info,
                                                ComposedTypeModel itemComposedType,
                                                java.lang.String streamId)
      • updateVersionMarker

        protected void updateVersionMarker​(ItemVersionMarkerModel marker,
                                           java.util.Date version,
                                           java.lang.String versionValue,
                                           java.lang.String info)
      • parseInfoExpression

        protected java.lang.String parseInfoExpression​(java.lang.Long itemPK,
                                                       StreamConfigurationModel streamConfiguration)
      • getSavedModel

        protected ItemModel getSavedModel​(PK pk)
      • setFlexibleSearchService

        public void setFlexibleSearchService​(FlexibleSearchService flexibleSearchService)
      • setModelService

        public void setModelService​(ModelService modelService)
      • getModelService

        protected ModelService getModelService()
      • setTypeService

        public void setTypeService​(TypeService typeService)
      • getTypeService

        protected TypeService getTypeService()