Class Scanner

  • All Implemented Interfaces:
    LifeCycle

    public class Scanner
    extends AbstractLifeCycle
    Scanner Utility for scanning a directory for added, removed and changed files and reporting these events via registered Listeners.
    • Field Detail

      • LOG

        private static final Logger LOG
      • __scannerId

        private static int __scannerId
      • _scanInterval

        private int _scanInterval
      • _scanCount

        private int _scanCount
      • _prevScan

        private final java.util.Map<java.lang.String,​Scanner.TimeNSize> _prevScan
      • _currentScan

        private final java.util.Map<java.lang.String,​Scanner.TimeNSize> _currentScan
      • _filter

        private java.io.FilenameFilter _filter
      • _scannables

        private final java.util.Map<java.nio.file.Path,​IncludeExcludeSet<java.nio.file.PathMatcher,​java.nio.file.Path>> _scannables
      • _running

        private volatile boolean _running
      • _reportExisting

        private boolean _reportExisting
      • _reportDirs

        private boolean _reportDirs
      • _timer

        private java.util.Timer _timer
      • _task

        private java.util.TimerTask _task
      • _scanDepth

        private int _scanDepth
      • _notifications

        private final java.util.Map<java.lang.String,​Scanner.Notification> _notifications
    • Constructor Detail

      • Scanner

        public Scanner()
    • Method Detail

      • getScanInterval

        public int getScanInterval()
        Get the scan interval
        Returns:
        interval between scans in seconds
      • setScanInterval

        public void setScanInterval​(int scanInterval)
        Set the scan interval
        Parameters:
        scanInterval - pause between scans in seconds, or 0 for no scan after the initial scan.
      • setScanDirs

        public void setScanDirs​(java.util.List<java.io.File> dirs)
      • addScanDir

        @Deprecated
        public void addScanDir​(java.io.File dir)
        Deprecated.
      • addFile

        public void addFile​(java.nio.file.Path p)
                     throws java.io.IOException
        Add a file to be scanned. The file must not be null, and must exist.
        Parameters:
        p - the Path of the file to scan.
        Throws:
        java.io.IOException
      • addDirectory

        public IncludeExcludeSet<java.nio.file.PathMatcher,​java.nio.file.Path> addDirectory​(java.nio.file.Path p)
                                                                                           throws java.io.IOException
        Add a directory to be scanned. The directory must not be null and must exist.
        Parameters:
        p - the directory to scan.
        Returns:
        an IncludeExcludeSet to which the caller can add PathMatcher patterns to match
        Throws:
        java.io.IOException
      • getScanDirs

        @Deprecated
        public java.util.List<java.io.File> getScanDirs()
        Deprecated.
      • getScannables

        public java.util.Set<java.nio.file.Path> getScannables()
      • setRecursive

        @Deprecated
        public void setRecursive​(boolean recursive)
        Deprecated.
        Parameters:
        recursive - True if scanning is recursive
        See Also:
        setScanDepth(int)
      • getRecursive

        @Deprecated
        public boolean getRecursive()
        Deprecated.
        Returns:
        True if scanning is recursive
        See Also:
        getScanDepth()
      • getScanDepth

        public int getScanDepth()
        Get the scanDepth.
        Returns:
        the scanDepth
      • setScanDepth

        public void setScanDepth​(int scanDepth)
        Set the scanDepth.
        Parameters:
        scanDepth - the scanDepth to set
      • setFilenameFilter

        @Deprecated
        public void setFilenameFilter​(java.io.FilenameFilter filter)
        Deprecated.
        Apply a filter to files found in the scan directory. Only files matching the filter will be reported as added/changed/removed.
        Parameters:
        filter - the filename filter to use
      • getFilenameFilter

        @Deprecated
        public java.io.FilenameFilter getFilenameFilter()
        Deprecated.
        Get any filter applied to files in the scan dir.
        Returns:
        the filename filter
      • setReportExistingFilesOnStartup

        public void setReportExistingFilesOnStartup​(boolean reportExisting)
        Whether or not an initial scan will report all files as being added.
        Parameters:
        reportExisting - if true, all files found on initial scan will be reported as being added, otherwise not
      • getReportExistingFilesOnStartup

        public boolean getReportExistingFilesOnStartup()
      • setReportDirs

        public void setReportDirs​(boolean dirs)
        Set if found directories should be reported.
        Parameters:
        dirs - true to report directory changes as well
      • getReportDirs

        public boolean getReportDirs()
      • addListener

        public void addListener​(Scanner.Listener listener)
        Add an added/removed/changed listener
        Parameters:
        listener - the listener to add
      • removeListener

        public void removeListener​(Scanner.Listener listener)
        Remove a registered listener
        Parameters:
        listener - the Listener to be removed
      • newTimerTask

        public java.util.TimerTask newTimerTask()
      • newTimer

        public java.util.Timer newTimer()
      • schedule

        public void schedule()
      • reset

        public void reset()
        Clear the list of scannables. The scanner must first be in the stopped state.
      • exists

        public boolean exists​(java.lang.String path)
        Parameters:
        path - tests if the path exists
        Returns:
        true if the path exists in one of the scandirs
      • scan

        public void scan()
        Perform a pass of the scanner and report changes
      • scanFiles

        public void scanFiles()
        Scan all of the given paths.
      • reportDifferences

        private void reportDifferences​(java.util.Map<java.lang.String,​Scanner.TimeNSize> currentScan,
                                       java.util.Map<java.lang.String,​Scanner.TimeNSize> oldScan)
        Report the adds/changes/removes to the registered listeners
        Parameters:
        currentScan - the info from the most recent pass
        oldScan - info from the previous pass
      • warn

        private void warn​(java.lang.Object listener,
                          java.lang.String filename,
                          java.lang.Throwable th)
      • reportAddition

        private void reportAddition​(java.lang.String filename)
        Report a file addition to the registered FileAddedListeners
        Parameters:
        filename - the filename
      • reportRemoval

        private void reportRemoval​(java.lang.String filename)
        Report a file removal to the FileRemovedListeners
        Parameters:
        filename - the filename
      • reportChange

        private void reportChange​(java.lang.String filename)
        Report a file change to the FileChangedListeners
        Parameters:
        filename - the filename
      • reportBulkChanges

        private void reportBulkChanges​(java.util.List<java.lang.String> filenames)
        Report the list of filenames for which changes were detected.
        Parameters:
        filenames - names of all files added/changed/removed
      • reportScanStart

        private void reportScanStart​(int cycle)
        Call ScanCycleListeners with start of scan
      • reportScanEnd

        private void reportScanEnd​(int cycle)
        Call ScanCycleListeners with end of scan.