trait FileTreeRepository[T <: AnyRef] extends FileTreeDataView[T] with PathWatcher[Entry[T]] with ObservableCache[T] with AutoCloseable
Provides an in memory cache of portions of the file system. Directories are added to the cache using the FileTreeRepository.register method. Once a Path is added the cache, its contents may be retrieved using the FileTreeRepository.list method. The cache stores the path information in Entry instances.
A default implementation is provided by FileTreeRepositories.get. The user may cache arbitrary information in the cache by customizing the Converter that is passed into the factory FileTreeRepositories.get.
The cache allows the user to register a regular file, directory or symbolic link. After registration, the cache should monitor the path (and in the case of symbolic links, the target of the link) for updates. Whenever an update is detected, the cache updates its internal representation of the file system. When that is complete, it will notify all of the registered com.swoval.files.Observers of the change. In general, the update that is sent in the callback will be visible if the user lists the relevant path. It is however, possible that if the file is being updated rapidly that the internal state of the cache may change in between the callback being invoked and the user listing the path. Once the file system activity settles down, the cache should always end up in a consistent state where it mirrors the state of the file system.
The semantics of the list method are very similar to the linux ls tool. Listing a directory
returns all of the subdirectories and files contained in the directory and the empty list if the
directory is empty. Listing a file, however, will return the entry for the file if it exists and
the empty list otherwise.
- T
the type of data stored in the Entry instances for the cache
- Alphabetic
- By Inheritance
- FileTreeRepository
- ObservableCache
- PathWatcher
- Observable
- FileTreeDataView
- FileTreeView
- AutoCloseable
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
addCacheObserver(observer: CacheObserver[T]): Int
Add an observer of cache events.
Add an observer of cache events.
- observer
the observer to add
- returns
the handle to the observer.
- Definition Classes
- ObservableCache
-
abstract
def
addObserver(observer: Observer[_ >: Entry[T]]): Int
Add an observer of events.
Add an observer of events.
- observer
the observer to add
- returns
the handle to the observer.
- Definition Classes
- Observable
-
abstract
def
close(): Unit
Catch any exceptions in subclasses.
Catch any exceptions in subclasses.
- Definition Classes
- PathWatcher → AutoCloseable
-
abstract
def
list(path: Path, maxDepth: Int, filter: Filter[_ >: TypedPath]): List[TypedPath]
List all of the files for the
path, returning only those files that are accepted by the provided filter.List all of the files for the
path, returning only those files that are accepted by the provided filter.- path
the root path to list
- maxDepth
the maximum depth of subdirectories to query
- filter
include only paths accepted by the filter
- returns
a List of TypedPath instances accepted by the filter.
- Definition Classes
- FileTreeDataView → FileTreeView
-
abstract
def
listEntries(path: Path, maxDepth: Int, filter: Filter[_ >: Entry[T]]): List[Entry[T]]
List all of the files for the
paththat are accepted by thefilter.List all of the files for the
paththat are accepted by thefilter.- path
the path to list. If this is a file, returns a list containing the Entry for the file or an empty list if the file is not monitored by the path.
- maxDepth
the maximum depth of subdirectories to return
- filter
include only paths accepted by this
- returns
a List of Entry instances accepted by the filter. The list will be empty if the path is not a subdirectory of this CachedDirectory or if it is a subdirectory, but the CachedDirectory was created without the recursive flag.
- Definition Classes
- FileTreeDataView
-
abstract
def
register(path: Path, maxDepth: Int): Either[IOException, Boolean]
Register a path with the cache.
Register a path with the cache. A successful call to this method will both start monitoring of the path add will fill the cache for this path.
- path
the directory to watch for file events and to add to the cache
- maxDepth
the maximum maxDepth of subdirectories to watch
- returns
an com.swoval.functional.Either that will return a right value when no exception is thrown. The right value will be true if the path has not been previously registered. The com.swoval.functional.Either will be a left if any IOException is thrown attempting to register the path.
- Definition Classes
- FileTreeRepository → PathWatcher
-
abstract
def
removeObserver(handle: Int): Unit
Remove an observer.
-
abstract
def
unregister(path: Path): Unit
Unregister a path from the cache.
Unregister a path from the cache. This removes the path from monitoring and from the cache so long as the path isn't covered by another registered path. For example, if the path /foo was previously registered, after removal, no changes to /foo or files in /foo should be detected by the cache. Moreover, calling FileTreeRepository.list for /foo should return an empty list. If, however, we register both /foo recursively and /foo/bar (recursively or not), after unregistering /foo/bar, changes to /foo/bar should continue to be detected and /foo/bar should be included in the list returned by FileTreeRepository.list.
- path
the path to unregister
- Definition Classes
- FileTreeRepository → PathWatcher
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )