Package org.eclipse.jetty.util
Class Scanner
- java.lang.Object
-
- org.eclipse.jetty.util.component.AbstractLifeCycle
-
- org.eclipse.jetty.util.component.ContainerLifeCycle
-
- org.eclipse.jetty.util.Scanner
-
- All Implemented Interfaces:
Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
public class Scanner extends ContainerLifeCycle
Scanner Utility for scanning a directory for added, removed and changed files and reporting these events via registered Listeners. The scanner operates on thePath.toRealPath(LinkOption...)
of the files scanned and can be configured to follow symlinks.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
Scanner.BulkListener
Notification of files that changed in the last scan.static interface
Scanner.DiscreteListener
Notification of exact file changes in the last scan.static interface
Scanner.Listener
Listener Marker for notifications re file changes.static interface
Scanner.ScanCycleListener
Listener that notifies when a scan has started and when it has ended.-
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopException
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_SCAN_DEPTH
When walking a directory, a depth of 1 ensures that the directory's descendants are visited, not just the directory itself (as a file).static int
MAX_SCAN_DEPTH
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description IncludeExcludeSet<java.nio.file.PathMatcher,java.nio.file.Path>
addDirectory(java.nio.file.Path p)
Add a directory to be scanned.void
addFile(java.nio.file.Path path)
Add a file to be scanned.void
addListener(Scanner.Listener listener)
Add an added/removed/changed listenervoid
doStart()
Start the scanning action.void
doStop()
Stop the scanning.boolean
exists(java.lang.String path)
java.io.FilenameFilter
getFilenameFilter()
Deprecated.boolean
getReportDirs()
boolean
getReportExistingFilesOnStartup()
int
getScanDepth()
Get the scanDepth.int
getScanInterval()
Get the scan intervaljava.util.Set<java.nio.file.Path>
getScannables()
void
nudge()
Hint to the scanner to perform a scan cycle as soon as possible.void
removeListener(Scanner.Listener listener)
Remove a registered listenervoid
reset()
Clear the list of scannables.void
scan(Callback complete)
Get the scanner to perform a scan cycle as soon as possible and call the Callback when the scan is finished or failed.void
setFilenameFilter(java.io.FilenameFilter filter)
Deprecated.void
setReportDirs(boolean dirs)
Set if found directories should be reported.void
setReportExistingFilesOnStartup(boolean reportExisting)
Whether or not an initial scan will report all files as being added.void
setScanDepth(int scanDepth)
Set the scanDepth.void
setScanDirs(java.util.List<java.io.File> dirs)
void
setScanInterval(int scanInterval)
Set the scan interval-
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans
-
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListeners
-
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
-
-
-
-
Field Detail
-
DEFAULT_SCAN_DEPTH
public static final int DEFAULT_SCAN_DEPTH
When walking a directory, a depth of 1 ensures that the directory's descendants are visited, not just the directory itself (as a file).- See Also:
- Constant Field Values
-
MAX_SCAN_DEPTH
public static final int MAX_SCAN_DEPTH
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
Scanner
public Scanner()
-
Scanner
public Scanner(Scheduler scheduler)
-
Scanner
public Scanner(Scheduler scheduler, boolean reportRealPaths)
- Parameters:
scheduler
- The scheduler to use for scanning.reportRealPaths
- If true, theScanner.Listener
s are called with the real path of scanned files.
-
-
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)
-
addFile
public void addFile(java.nio.file.Path path)
Add a file to be scanned. The file must not be null, and must exist.- Parameters:
path
- the Path of the file to scan.
-
addDirectory
public IncludeExcludeSet<java.nio.file.PathMatcher,java.nio.file.Path> addDirectory(java.nio.file.Path p)
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
-
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
-
getScannables
public java.util.Set<java.nio.file.Path> getScannables()
-
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
-
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
-
doStart
public void doStart() throws java.lang.Exception
Start the scanning action.- Overrides:
doStart
in classContainerLifeCycle
- Throws:
AbstractLifeCycle.StopException
- If thrown, the lifecycle will immediately be stopped.java.lang.Exception
- If there was a problem starting. Will cause a transition to FAILED state
-
doStop
public void doStop() throws java.lang.Exception
Stop the scanning.- Overrides:
doStop
in classContainerLifeCycle
- Throws:
java.lang.Exception
- If there was a problem stopping. Will cause a transition to FAILED state
-
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
-
nudge
public void nudge()
Hint to the scanner to perform a scan cycle as soon as possible. NOTE that the scan is not guaranteed to have happened by the time this method returns.
-
scan
public void scan(Callback complete)
Get the scanner to perform a scan cycle as soon as possible and call the Callback when the scan is finished or failed.- Parameters:
complete
- called when the scan cycle finishes or fails.
-
-