Class AbstractPersistentAcceptOnceFileListFilter<F>
java.lang.Object
org.springframework.integration.file.filters.AbstractFileListFilter<F>
org.springframework.integration.file.filters.AbstractDirectoryAwareFileListFilter<F>
org.springframework.integration.file.filters.AbstractPersistentAcceptOnceFileListFilter<F>
- Type Parameters:
F
- the file type.
- All Implemented Interfaces:
Closeable
,AutoCloseable
,FileListFilter<F>
,ResettableFileListFilter<F>
,ReversibleFileListFilter<F>
- Direct Known Subclasses:
FileSystemPersistentAcceptOnceFileListFilter
,FtpPersistentAcceptOnceFileListFilter
,SftpPersistentAcceptOnceFileListFilter
,SmbPersistentAcceptOnceFileListFilter
public abstract class AbstractPersistentAcceptOnceFileListFilter<F>
extends AbstractDirectoryAwareFileListFilter<F>
implements ReversibleFileListFilter<F>, ResettableFileListFilter<F>, Closeable
Stores "seen" files in a MetadataStore to survive application restarts.
The default key is 'prefix' plus the absolute file name; value is the timestamp of the file.
Files are deemed as already 'seen' if they exist in the store and have the
same modified time as the current file.
- Since:
- 3.0
- Author:
- Gary Russell, Artem Bilan, Ngoc Nhan
-
Field Summary
Modifier and TypeFieldDescriptionprotected final Flushable
protected boolean
protected final String
protected final ConcurrentMetadataStore
-
Constructor Summary
ConstructorDescription -
Method Summary
Modifier and TypeMethodDescriptionboolean
Subclasses must implement this method.protected String
The default key is theprefix
plus the full filename.void
close()
protected abstract String
protected boolean
fileStillExists
(F file) Check if the file still exists; default implementation returns true.protected void
Flush the store if it's aFlushable
andflushOnUpdate
is true.protected boolean
isDirectory
(F file) Subclasses must implement this method to indicate whether the file is a directory or not.protected boolean
Override this method if you wish to use something other than the modified timestamp to determine equality.protected abstract long
boolean
Remove the specified file from the filter, so it will pass on the next attempt.void
Indicate that not all files previously passed by this filter (inFileListFilter.filterFiles(Object[])
have been processed; the file must be in the list of files; it, and all files after it, will be considered to have not been processed and will be considered next time.void
setFlushOnUpdate
(boolean flushOnUpdate) Determine whether the metadataStore should be flushed on each update (ifFlushable
).Methods inherited from class org.springframework.integration.file.filters.AbstractDirectoryAwareFileListFilter
alwaysAccept, isForRecursion, setAlwaysAcceptDirectories, setForRecursion
Methods inherited from class org.springframework.integration.file.filters.AbstractFileListFilter
filterFiles, supportsSingleFileFiltering
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.integration.file.filters.FileListFilter
filterFiles, isForRecursion, supportsSingleFileFiltering
-
Field Details
-
store
-
prefix
-
flushableStore
-
flushOnUpdate
protected boolean flushOnUpdate
-
-
Constructor Details
-
AbstractPersistentAcceptOnceFileListFilter
-
-
Method Details
-
setFlushOnUpdate
public void setFlushOnUpdate(boolean flushOnUpdate) Determine whether the metadataStore should be flushed on each update (ifFlushable
).- Parameters:
flushOnUpdate
- true to flush.- Since:
- 4.1.5
-
accept
Description copied from class:AbstractFileListFilter
Subclasses must implement this method.- Specified by:
accept
in interfaceFileListFilter<F>
- Specified by:
accept
in classAbstractFileListFilter<F>
- Parameters:
file
- The file.- Returns:
- true if the file passes the filter.
- See Also:
-
fileStillExists
Check if the file still exists; default implementation returns true.- Parameters:
file
- the file.- Returns:
- true if the filter should return true.
- Since:
- 4.3.19
-
rollback
Indicate that not all files previously passed by this filter (inFileListFilter.filterFiles(Object[])
have been processed; the file must be in the list of files; it, and all files after it, will be considered to have not been processed and will be considered next time.- Specified by:
rollback
in interfaceReversibleFileListFilter<F>
- Parameters:
file
- the file which failed.files
- the list of files that were returned byFileListFilter.filterFiles(Object[])
.- Since:
- 4.0.4
-
remove
Description copied from interface:ResettableFileListFilter
Remove the specified file from the filter, so it will pass on the next attempt.- Specified by:
remove
in interfaceResettableFileListFilter<F>
- Parameters:
fileToRemove
- the element to remove.- Returns:
- true if the file was removed as a result of this call.
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
-
isEqual
Override this method if you wish to use something other than the modified timestamp to determine equality.- Parameters:
file
- The file.value
- The current value for the key in the store.- Returns:
- true if equal.
-
buildKey
The default key is theprefix
plus the full filename.- Parameters:
file
- The file.- Returns:
- The key.
-
flushIfNeeded
protected void flushIfNeeded()Flush the store if it's aFlushable
andflushOnUpdate
is true.- Since:
- 1.4.5
-
isDirectory
Description copied from class:AbstractDirectoryAwareFileListFilter
Subclasses must implement this method to indicate whether the file is a directory or not.- Specified by:
isDirectory
in classAbstractDirectoryAwareFileListFilter<F>
- Parameters:
file
- the file.- Returns:
- true if it's a directory.
-
modified
-
fileName
-