public final class Journal
extends java.lang.Object
implements atg.vfs.journal.ResourceConstants, java.io.Serializable
Operations are put in the journal (i.e., journaled) by calling methods such as addFile(), updateFile(), and deleteFile(). The operations in the journal can later be read via entry iterator. The journal is implemented using an index file and a sparse directory tree. The index file contains the List of virtual file operations in the order they were added to the journal. The sparse directory tree contains the contents of the files that were added and updated. The format of the index file is:
The header is 16 bytes in the following format:
Each entry is stored in the following format:
JournalingFileSystem
,
Serialized FormModifier and Type | Class and Description |
---|---|
static class |
Journal.Entry
A journal entry represents a change to a specific virtual path.
|
class |
Journal.EntryIterator
Iterator for journal entries.
|
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CLASS_VERSION
Class version string
|
static java.lang.String |
DATA_DIRECTORY_NAME
name of the data directory
|
static java.lang.String |
INDEX_FILE_NAME
name of the index file
|
Constructor and Description |
---|
Journal(java.io.File pDirectory)
Construct a journal in the specified directory.
|
Journal(java.io.File pDirectory,
boolean pJournalFileContent)
Construct a journal in the specified directory.
|
Modifier and Type | Method and Description |
---|---|
long |
addFile(VirtualFile pFile)
Add the specified file to the journal as an add operation.
|
boolean |
clear()
Clear all the data in the persistent journal.
|
boolean |
close()
Close the persistent journal if it is open.
|
long |
deleteFile(VirtualFile pFile)
Add the specified file to the journal as a delete operation.
|
java.lang.String |
dump()
Dump the contents of the journal to a string.
|
void |
dump(java.io.PrintWriter pWriter)
Dump the contents of the journal to the specified print writer.
|
long |
getCount()
Get property
count . |
java.io.File |
getDirectory()
Get property
directory . |
Journal.EntryIterator |
getEntryIterator()
Get an iterator over the operation entries in this journal.
|
Journal.Entry |
getLastEntry()
Get property
lastEntry . |
java.io.OutputStream |
getOutputStream(atg.vfs.VirtualPath pPath,
java.io.OutputStream pOutputStream)
Get an output stream for the specified path.
|
boolean |
isOpen()
Determine if the journal is currently open
|
static void |
main(java.lang.String[] argv)
Main for unit testing
|
boolean |
open()
Open the persistent journal, creating it if necessary.
|
long |
renameFile(VirtualFile pFrom,
VirtualFile pTo)
Add the specified rename operation to the journal.
|
java.lang.String |
toString()
Get a string representation of this object.
|
long |
updateFile(VirtualFile pFile)
Add the specified file to the journal as an update operation.
|
long |
updateFileLastModified(VirtualFile pFile,
long pTime)
Add the specified file to the journal as an update of the last modified
time of the specified file.
|
public static java.lang.String CLASS_VERSION
public static final java.lang.String INDEX_FILE_NAME
public static final java.lang.String DATA_DIRECTORY_NAME
public Journal(java.io.File pDirectory)
pDirectory
- the directory to hold journal. This must be an existing
directory with read and write access.public Journal(java.io.File pDirectory, boolean pJournalFileContent)
pDirectory
- the directory to hold journal. This must be an existing
directory with read and write access.pJournalFileContent
- if true
then journal file
content, if false
just journal file operationspublic java.io.File getDirectory()
directory
. This is the directory used to hold
the journal. The journal is stored as a sparse tree in this directory.directory
public long getCount()
count
. This is
the number of operations in the journal.count
public Journal.Entry getLastEntry()
lastEntry
. This is
the last operation in the journal.lastEntry
public boolean isOpen()
true
if the journal is open, else falsepublic boolean open() throws JournalException
true
if the journal already existedJournalException
- if there is a problem reading the journal or
if the journal is already openpublic long addFile(VirtualFile pFile) throws JournalException
pFile
- the file to mark as added0
.JournalException
- if there is a problem adding the operation
to the journalpublic long updateFile(VirtualFile pFile) throws JournalException
pFile
- the file to mark as updated0
.JournalException
- if there is a problem adding the operation
to the journalpublic long updateFileLastModified(VirtualFile pFile, long pTime) throws java.io.IOException
pFile
- the file whose last modified time has been updatedpTime
- the last modified time to set0
.JournalException
- if there is a problem adding the operation
to the journaljava.io.IOException
- if there is an I/O error setting the last
modified time of the filepublic long deleteFile(VirtualFile pFile) throws JournalRuntimeException
pFile
- the file to mark as deleted0
.JournalRuntimeException
- if there is a problem adding the operation
to the journalpublic long renameFile(VirtualFile pFrom, VirtualFile pTo) throws JournalRuntimeException
pFrom
- the file being renamedpTo
- the new name of the file0
.JournalRuntimeException
- if there is a problem adding the operation
to the journalpublic boolean close() throws JournalException
true
if the journal was found to be open and is now
closed. This return value does not need to be checked, as the journal is
closed once this method is called independent of the return.JournalException
- if there is an I/O error closing the journalpublic Journal.EntryIterator getEntryIterator()
public boolean clear() throws JournalException
true
if the journal exists and is now
cleared or false
if the journal does not exist. In either
case the journal contains no data if this method completes normally.JournalException
- if there is a problem clearing the journalpublic void dump(java.io.PrintWriter pWriter) throws JournalException
Nota Bene: this method open()s and close()s the journal.
pWriter
- print writer to use, must not be nullJournalException
- if there is a problem reading the journalpublic java.lang.String dump() throws JournalException
Nota Bene: this method open()s and close()s the journal.
JournalException
- if there is a problem reading the journalpublic java.io.OutputStream getOutputStream(atg.vfs.VirtualPath pPath, java.io.OutputStream pOutputStream) throws java.io.IOException
pPath
- path of file being operated onpOutputStream
- the underlying output streamjava.io.IOException
- if there is I/O troublepublic java.lang.String toString()
toString
in class java.lang.Object
public static void main(java.lang.String[] argv) throws java.lang.Throwable
java.lang.Throwable