Package de.hybris.deltadetection.impl
Class DefaultChangeDetectionService
- java.lang.Object
-
- de.hybris.deltadetection.impl.DefaultChangeDetectionService
-
- All Implemented Interfaces:
ChangeDetectionService
public class DefaultChangeDetectionService extends java.lang.Object implements ChangeDetectionService
Default Implementation of change detection service
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.StringVERSION_MARKER_BY_PKprotected static java.lang.StringVERSION_MARKERS_FOR_STREAM_BY_PKS_QRY
-
Constructor Summary
Constructors Constructor Description DefaultChangeDetectionService()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcollectChangesForType(ComposedTypeModel composedType, StreamConfiguration configuration, ChangesCollector collector)Detects all kind of changes (NEW, MODIFIED, DELETED) on items for the given composed type.voidcollectChangesForType(ComposedTypeModel composedType, java.lang.String streamId, ChangesCollector collector)Detects all kind of changes (NEW, MODIFIED, DELETED) on items for the given composed type.voidconsumeChanges(java.util.List<ItemChangeDTO> allChanges)Consumes all given changes.protected intconsumeChangesBatch(java.util.List<ItemChangeDTO> changes, java.lang.String streamId)protected java.util.concurrent.Callable<java.lang.Integer>createConsumeBatchCallable(java.lang.String streamId, java.util.List<ItemChangeDTO> changes, int maxRetries)voiddeleteItemVersionMarkersForStream(java.lang.String streamId)Deletes all item version markers belonging to the streamprotected voidfillInitialVersionMarker(ItemVersionMarkerModel marker, java.lang.Long itemPK, java.util.Date version, java.lang.String versionValue, java.lang.String info, ComposedTypeModel itemComposedType, java.lang.String streamId)protected java.util.Map<java.lang.Long,ItemVersionMarkerModel>findItemVersionMarkersForStreamByPKs(java.lang.String streamId, java.util.List<PK> PKs)protected ItemVersionMarkerModelfindVersionMarkerByItemPK(java.lang.String streamId, java.lang.Long itemPk)Checks and returns existing item version marker for the item and stream.ItemChangeDTOgetChangeForExistingItem(ItemModel item, java.lang.String streamId)Detects change for a given existing item and stream.ItemChangeDTOgetChangeForRemovedItem(PK pk, java.lang.String streamId)Detects potential change for a an not existing item - (change type 'DELETED'), stored under ItemVersionMarker referencing given item pk.protected ItemChangeDTOgetChangeFromRow(java.util.List<java.lang.Object> row, java.lang.String streamId)java.util.List<ItemChangeDTO>getChangesForRemovedItems(java.lang.String streamId)Detects changes for all items, which doesn't exist anymore (change type 'DELETED'), stored under ItemVersionMarker referencing the not existing item pks.protected java.util.List<ComposedTypeModel>getComposedTypesForStream(java.lang.String streamId)protected java.util.List<ItemVersionMarkerModel>getDeletedVersionMarkers(java.lang.String streamId)protected FlexibleSearchServicegetFlexibleSearchService()protected ModelServicegetModelService()protected java.util.List<ItemVersionMarkerModel>getNewOrModifiedVersionMarkers(java.lang.String streamId, ComposedTypeModel model)protected java.util.Map<java.lang.String,java.util.List<java.util.List<ItemChangeDTO>>>getPartitionedBatchChangesByStreamId(java.util.List<ItemChangeDTO> allChanges)protected java.lang.StringgetQueryForDeletedItems(java.lang.String typePksAsQueryParams, java.lang.String baseType, java.lang.String itemSelector)protected java.lang.StringgetQueryForModifiedItems(java.lang.String typePksAsQueryParams, java.lang.String baseType, java.lang.String itemSelector, java.lang.String versionValuePart)protected java.lang.StringgetQueryForNewItems(java.lang.String typePksAsQueryParams, java.lang.String baseType, java.lang.String itemSelector, java.lang.String versionValuePart)protected ItemModelgetSavedModel(PK pk)protected java.util.Optional<StreamConfigurationModel>getStreamById(java.lang.String streamId)protected TypeServicegetTypeService()protected java.util.List<ItemVersionMarkerModel>getVersionMarkersForRemovedItems(java.lang.String streamId)protected booleanisItemVersionMarkerActive(ItemVersionMarkerModel marker)protected booleanisNotSingleResult(java.util.List<ItemVersionMarkerModel> result)protected voidlogConsumedChanges(int numConsumed)protected java.lang.StringparseInfoExpression(java.lang.Long itemPK, StreamConfigurationModel streamConfiguration)protected java.util.Map<java.lang.Long,ItemVersionMarkerModel>preloadVersionMarkers(java.util.List<ItemChangeDTO> changes, java.lang.String streamId)protected java.util.List<java.util.concurrent.Callable<java.lang.Integer>>prepareBatchExecutionCallables(java.util.List<ItemChangeDTO> allChanges)protected java.lang.StringprepareQueryForFindingChangesByType(ComposedTypeModel composedType, StreamConfiguration configuration)voidresetStream(java.lang.String streamId)Resets the stream.voidsetFlexibleSearchService(FlexibleSearchService flexibleSearchService)voidsetModelService(ModelService modelService)voidsetTypeService(TypeService typeService)protected voidupdateVersionMarker(ItemVersionMarkerModel marker, java.util.Date version, java.lang.String versionValue, java.lang.String info)
-
-
-
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
-
-
Method Detail
-
getChangeForExistingItem
public ItemChangeDTO getChangeForExistingItem(ItemModel item, java.lang.String streamId)
Description copied from interface:ChangeDetectionServiceDetects change for a given existing item and stream. Finds changes of change type 'NEW' or "MODIFIED'.- Specified by:
getChangeForExistingItemin interfaceChangeDetectionService- Parameters:
item- the item to be checkedstreamId- the streamId for which the changes should be detect- Returns:
ItemChangeDTOObject containing all the information about the change
-
getChangeForRemovedItem
public ItemChangeDTO getChangeForRemovedItem(PK pk, java.lang.String streamId)
Description copied from interface:ChangeDetectionServiceDetects potential change for a an not existing item - (change type 'DELETED'), stored under ItemVersionMarker referencing given item pk.- Specified by:
getChangeForRemovedItemin interfaceChangeDetectionService- Parameters:
pk- the pk of the item to be checkedstreamId- the streamId for which the change should be detect- Returns:
ItemChangeDTOObject containing all the information about the change
-
isItemVersionMarkerActive
protected boolean isItemVersionMarkerActive(ItemVersionMarkerModel marker)
-
getChangesForRemovedItems
public java.util.List<ItemChangeDTO> getChangesForRemovedItems(java.lang.String streamId)
Description copied from interface:ChangeDetectionServiceDetects changes for all items, which doesn't exist anymore (change type 'DELETED'), stored under ItemVersionMarker referencing the not existing item pks.- Specified by:
getChangesForRemovedItemsin interfaceChangeDetectionService- Parameters:
streamId- the streamId for which the change should be detect- Returns:
- List of
ItemChangeDTOObjects containing all the information about the changes
-
collectChangesForType
public void collectChangesForType(ComposedTypeModel composedType, java.lang.String streamId, ChangesCollector collector)
Description copied from interface:ChangeDetectionServiceDetects all kind of changes (NEW, MODIFIED, DELETED) on items for the given composed type.- Specified by:
collectChangesForTypein interfaceChangeDetectionService- Parameters:
composedType- the type for which the change detection should be executed (including subtypes)streamId- the streamId for which the change should be detectcollector- 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:ChangeDetectionServiceDetects all kind of changes (NEW, MODIFIED, DELETED) on items for the given composed type.- Specified by:
collectChangesForTypein interfaceChangeDetectionService- 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)
-
prepareQueryForFindingChangesByType
protected java.lang.String prepareQueryForFindingChangesByType(ComposedTypeModel composedType, StreamConfiguration configuration)
-
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:ChangeDetectionServiceConsumes 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 givenItemChangeDTOobjects- Specified by:
consumeChangesin interfaceChangeDetectionService- 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:ChangeDetectionServiceDeletes all item version markers belonging to the stream- Specified by:
deleteItemVersionMarkersForStreamin interfaceChangeDetectionService- Parameters:
streamId- stream id for which item version markers should be deleted
-
resetStream
public void resetStream(java.lang.String streamId)
Description copied from interface:ChangeDetectionServiceResets 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:
resetStreamin interfaceChangeDetectionService- 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.
-
isNotSingleResult
protected boolean isNotSingleResult(java.util.List<ItemVersionMarkerModel> result)
-
getNewOrModifiedVersionMarkers
protected java.util.List<ItemVersionMarkerModel> getNewOrModifiedVersionMarkers(java.lang.String streamId, ComposedTypeModel model)
-
getDeletedVersionMarkers
protected java.util.List<ItemVersionMarkerModel> getDeletedVersionMarkers(java.lang.String streamId)
-
getComposedTypesForStream
protected java.util.List<ComposedTypeModel> getComposedTypesForStream(java.lang.String streamId)
-
getStreamById
protected java.util.Optional<StreamConfigurationModel> getStreamById(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)
-
setFlexibleSearchService
public void setFlexibleSearchService(FlexibleSearchService flexibleSearchService)
-
getFlexibleSearchService
protected FlexibleSearchService getFlexibleSearchService()
-
setModelService
public void setModelService(ModelService modelService)
-
getModelService
protected ModelService getModelService()
-
setTypeService
public void setTypeService(TypeService typeService)
-
getTypeService
protected TypeService getTypeService()
-
-