com.application.areca.impl
Class AbstractIncrementalFileSystemMedium

java.lang.Object
  extended by com.application.areca.AbstractMedium
      extended by com.application.areca.impl.AbstractFileSystemMedium
          extended by com.application.areca.impl.AbstractIncrementalFileSystemMedium
All Implemented Interfaces:
ArchiveMedium, IndicatorTypes, TargetActions, Duplicable
Direct Known Subclasses:
IncrementalDirectoryMedium, IncrementalZipMedium

public abstract class AbstractIncrementalFileSystemMedium
extends AbstractFileSystemMedium
implements TargetActions

Medium that implements incremental storage

Author:
Olivier PETRUCCI

Areca Build ID : 7299034069467778562

Nested Class Summary
 class AbstractIncrementalFileSystemMedium.CheckHash
           
 
Field Summary
protected static java.lang.String CHECK_DESTINATION
          Temporary directory used during archive check
protected static java.lang.String CONTENT_FILE
          Content filename
protected static boolean DEBUG_MODE
           
protected  ArchiveHandler handler
          Handler for archive processing
protected static java.lang.String HASH_FILE
          hash filename
protected  boolean imageBackups
          Tells whether many archives shall be created on just one single archive
protected static java.lang.String METADATA_FILE
          Metadata filename
protected static java.lang.String[] RESERVED_NAMES
          Filenames reserved by Areca
protected static java.lang.String TMP_MERGE_LOCATION
          Temporary merge location
protected static java.lang.String TRACE_FILE
          Trace filename
protected  boolean trackPermissions
          Tells whether file permissions shall be tracked or not
 
Fields inherited from class com.application.areca.impl.AbstractFileSystemMedium
CHECK_DIRECTORY_CONSISTENCY, COMMIT_MARKER_NAME, compressionArguments, DATA_DIRECTORY_SUFFIX, encryptionPolicy, fileSystemPolicy, MANIFEST_FILE, TARGET_BACKUP_FILE_PREFIX, TARGET_BACKUP_FILE_SUFFIX, tool
 
Fields inherited from class com.application.areca.AbstractMedium
history, HISTORY_NAME, target
 
Fields inherited from interface com.application.areca.TargetActions
ACTION_ALL, ACTION_BACKUP, ACTION_DESCRIBE, ACTION_INDICATORS, ACTION_MERGE_OR_DELETE, ACTION_RECOVER, ACTION_SIMULATE
 
Fields inherited from interface com.application.areca.indicator.IndicatorTypes
N_APS, N_NOA, N_NOF, N_PSR, N_SFS, N_SOH, N_SRR, N_SWH, T_APS, T_NOA, T_NOF, T_PSR, T_SFS, T_SOH, T_SRR, T_SWH
 
Constructor Summary
AbstractIncrementalFileSystemMedium()
           
 
Method Summary
protected  void buildArchive(ProcessContext context)
          Build the archive
protected  java.lang.String[] buildAtomicEntrySet(java.lang.String[] entries, java.io.File traceFile, int maxSetSize, ProcessContext context)
          Build an explicit set of entries (files) to recover.
 Manifest buildDefaultBackupManifest()
           
 Manifest buildDefaultMergeManifest(java.io.File[] recoveredArchives, java.util.GregorianCalendar fromDate, java.util.GregorianCalendar toDate)
           
protected abstract  void buildMergedArchiveFromDirectory(ProcessContext context)
           
 void checkArchives(java.lang.Object destination, boolean checkOnlyArchiveContent, java.util.GregorianCalendar date, ProcessContext context)
          Check the archive denoted by the date passed as argument.
protected  void checkFileSystemPolicy()
          Check that we do not use a reserved name as archive name
abstract  void cleanLocalCopies(java.util.List copies, ProcessContext context)
           
 void cleanMerge(ProcessContext context)
           
protected  void cleanUnwantedFiles(java.io.File targetFile, java.io.File traceFile, boolean cancelSensitive, ProcessContext context)
          Delete unwanted files (ie files that have been recovered but that do not appear in the trace file)
protected abstract  void closeArchive(ProcessContext context)
           
 void closeSimulation(ProcessContext context)
          Closes the simulation and returns all unprocessed entries (ie entries which have been deleted).
 void commitBackup(ProcessContext context)
          Close the archive
 void commitMerge(ProcessContext context)
          On vide les caches lors de la fusion.
abstract  void completeLocalCopyCleaning(java.io.File copy, ProcessContext context)
           
protected  java.lang.String computeArchiveName(java.util.GregorianCalendar date)
          Build an archive name
protected  java.lang.String computeArchivePath(java.util.GregorianCalendar date)
          Build a full archive path
protected  java.lang.String computeFinalArchivePath()
           
protected abstract  void computeMergeDirectories(ProcessContext context)
           
protected  void convertArchiveToFinal(ProcessContext context)
           
protected  void copyAttributes(java.lang.Object clone)
           
protected  void deleteArchive(java.io.File archive)
          Deletes the archive - WHETHER IT IS COMMITTED OR NOT
 void doAndRetry(IOTask rn, java.lang.String message)
           
protected  java.io.File duplicateMetadataFile(java.io.File source, ProcessContext context)
          It is sometime necessary to work on a copy of metadata files.
abstract  java.io.File[] ensureLocalCopy(java.io.File[] archivesToProcess, boolean overrideRecoveredFiles, java.io.File destination, RecoveryFilterMap filtersByArchive, ProcessContext context)
          Ensure that the stored files are present on the local disk.
protected  EntryArchiveData getArchiveData(java.lang.String entry, java.io.File archive)
          Retourne le status de l'entree, dans l'archive specifiee.
 long getArchiveSize(java.io.File archive, boolean forceComputation)
          Returns the length of the archive passed as argument if it can be computed.
 java.lang.String getContentFileName()
          Return the final content file name
 java.util.List getEntries(AggregatedViewContext context, java.lang.String root, java.util.GregorianCalendar date)
          Return the content of the archive matching the date passed as argument
 ArchiveHandler getHandler()
           
 java.lang.String getHashFileName()
          Return the final hash file name
 java.io.File getLastArchive(java.lang.String backupScheme, java.util.GregorianCalendar date)
          Returns the last archive for a given date.
 java.util.List getLogicalView(AggregatedViewContext context, java.lang.String root, boolean aggregated)
          Return a "logical view" of the target's content
abstract  int getMaxRetries()
           
 java.lang.String getMetaDataFileName()
          Return the final metadata file name
 java.lang.String getTraceFileName()
          Return the final trace file name
 void initMergeManifest(java.io.File[] recoveredArchives, java.util.GregorianCalendar fromDate, java.util.GregorianCalendar toDate, Manifest manifest)
           
 void install()
          Set up all necessary objects for the medium (for instance file system drivers)
 boolean isOverwrite()
           
 boolean isTrackPermissions()
           
protected  boolean isWorkingDirectory(java.io.File f)
          Introduced in Areca v6.2 Tells whether the file is a working directory or not
 java.io.File[] listArchives(java.util.GregorianCalendar fromDate, java.util.GregorianCalendar toDate)
          Lists the medium's archives
 void logRecoveryStep(RecoveryFilterMap filtersByArchive, FileFilterList filters, java.io.File archive, ProcessContext context)
          Log recovery informations
protected  boolean matchArchiveName(java.io.File f)
          Introduced in Areca v6.0
Caution : will return 'false' for archives that have been built with previous versions of Areca
 void merge(java.util.GregorianCalendar fromDate, java.util.GregorianCalendar toDate, Manifest mfToInsert, boolean keepDeletedEntries, ProcessContext context)
          Merge the archives that have been created between fromDate and toDate.
 void open(Manifest manifest, ProcessContext context, java.lang.String backupScheme)
          Prepares the backup
protected abstract  void prepareContext(ProcessContext context)
           
 void recover(java.lang.Object destination, java.lang.String[] filter, java.util.GregorianCalendar date, boolean recoverDeletedEntries, boolean checkRecoveredFiles, ProcessContext context)
          Recovers the stored data
protected  void recover(java.lang.Object destination, java.lang.String[] argFilter, int minimumArchiveNumber, java.util.GregorianCalendar fromDate, java.util.GregorianCalendar toDate, java.io.File traceFile, short mode, boolean recoverDeletedEntries, boolean checkRecoveredFiles, ProcessContext context)
          Recovers the files at the requested recovery location, according to the recovery dates passed as argument.
protected abstract  void registerUnstoredFile(FileSystemRecoveryEntry entry, ProcessContext context)
           
abstract  boolean retrySupported()
           
 void rollbackBackup(ProcessContext context)
          Cancel the backup
 void rollbackMerge(ProcessContext context)
          Cancel the "merge"
 TargetSearchResult search(SearchCriteria criteria)
          Searches entries within the archives
 void setHandler(ArchiveHandler handler)
           
 void setOverwrite(boolean overwrite)
           
 void setTrackPermissions(boolean trackPermissions)
           
 void simulateEntryProcessing(RecoveryEntry entry, boolean haltOnFirstDifference, ProcessContext context)
          Simulates the processing of the entry passed as argument.
 void store(RecoveryEntry entry, ProcessContext context)
          Stores an entry
 void storeManifest(ProcessContext context)
           
 boolean supportsBackupScheme(java.lang.String backupScheme)
          Tells whether the backup scheme passed as argument is supported by the medium or not
 
Methods inherited from class com.application.areca.impl.AbstractFileSystemMedium
buildBaseDriver, buildStorageDriver, checkArchiveCompatibility, checkMediumState, checkRepository, clearRelatedCaches, computeIndicators, computeMarkerFile, computeMarkerFile, deleteArchives, destroyRepository, destroyTemporaryFile, doAfterDelete, doBeforeDelete, getArchiveExtension, getCompressionArguments, getDataDirectory, getDisplayArchivePath, getEncryptionPolicy, getFileSystemPolicy, getHistory, getHistory, getLastArchive, getManifestName, isCommitted, isPreBackupCheckUseful, markCommitted, setCompressionArguments, setEncryptionPolicy, setFileSystemPolicy, setTarget, storeFileInArchive, storeTargetConfigBackup, toString
 
Methods inherited from class com.application.areca.AbstractMedium
equals, getHistoryName, getTarget, hashCode, processEntryArchiveData
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.application.areca.ArchiveMedium
getDescription
 
Methods inherited from interface com.myJava.object.Duplicable
duplicate
 

Field Detail

DEBUG_MODE

protected static final boolean DEBUG_MODE

TRACE_FILE

protected static final java.lang.String TRACE_FILE
Trace filename

See Also:
Constant Field Values

CONTENT_FILE

protected static final java.lang.String CONTENT_FILE
Content filename

See Also:
Constant Field Values

HASH_FILE

protected static final java.lang.String HASH_FILE
hash filename

See Also:
Constant Field Values

METADATA_FILE

protected static final java.lang.String METADATA_FILE
Metadata filename

See Also:
Constant Field Values

TMP_MERGE_LOCATION

protected static final java.lang.String TMP_MERGE_LOCATION
Temporary merge location

See Also:
Constant Field Values

CHECK_DESTINATION

protected static final java.lang.String CHECK_DESTINATION
Temporary directory used during archive check

See Also:
Constant Field Values

RESERVED_NAMES

protected static final java.lang.String[] RESERVED_NAMES
Filenames reserved by Areca


trackPermissions

protected boolean trackPermissions
Tells whether file permissions shall be tracked or not


imageBackups

protected boolean imageBackups
Tells whether many archives shall be created on just one single archive


handler

protected ArchiveHandler handler
Handler for archive processing

Constructor Detail

AbstractIncrementalFileSystemMedium

public AbstractIncrementalFileSystemMedium()
Method Detail

buildDefaultBackupManifest

public Manifest buildDefaultBackupManifest()
                                    throws ApplicationException
Throws:
ApplicationException

buildDefaultMergeManifest

public Manifest buildDefaultMergeManifest(java.io.File[] recoveredArchives,
                                          java.util.GregorianCalendar fromDate,
                                          java.util.GregorianCalendar toDate)
                                   throws ApplicationException
Throws:
ApplicationException

checkArchives

public void checkArchives(java.lang.Object destination,
                          boolean checkOnlyArchiveContent,
                          java.util.GregorianCalendar date,
                          ProcessContext context)
                   throws ApplicationException,
                          TaskCancelledException
Check the archive denoted by the date passed as argument.
Files are recovered at the location passed as argument and verified against their hash code.
The result is stored in the context (see ProcessContext.getUncheckedRecoveredFiles() and ProcessContext.getInvalidRecoveredFiles()).

Specified by:
checkArchives in interface ArchiveMedium
Throws:
ApplicationException
TaskCancelledException

cleanLocalCopies

public abstract void cleanLocalCopies(java.util.List copies,
                                      ProcessContext context)
                               throws java.io.IOException,
                                      ApplicationException
Throws:
java.io.IOException
ApplicationException

cleanMerge

public void cleanMerge(ProcessContext context)
                throws java.io.IOException
Throws:
java.io.IOException

closeSimulation

public void closeSimulation(ProcessContext context)
                     throws ApplicationException
Description copied from interface: ArchiveMedium
Closes the simulation and returns all unprocessed entries (ie entries which have been deleted).

Specified by:
closeSimulation in interface ArchiveMedium
Throws:
ApplicationException

commitBackup

public void commitBackup(ProcessContext context)
                  throws ApplicationException
Close the archive

Specified by:
commitBackup in interface ArchiveMedium
Throws:
ApplicationException

commitMerge

public void commitMerge(ProcessContext context)
                 throws ApplicationException
Description copied from class: AbstractFileSystemMedium
On vide les caches lors de la fusion.
A optimiser en tenant compte de la date.

Specified by:
commitMerge in interface ArchiveMedium
Overrides:
commitMerge in class AbstractFileSystemMedium
Throws:
ApplicationException

completeLocalCopyCleaning

public abstract void completeLocalCopyCleaning(java.io.File copy,
                                               ProcessContext context)
                                        throws java.io.IOException,
                                               ApplicationException
Throws:
java.io.IOException
ApplicationException

ensureLocalCopy

public abstract java.io.File[] ensureLocalCopy(java.io.File[] archivesToProcess,
                                               boolean overrideRecoveredFiles,
                                               java.io.File destination,
                                               RecoveryFilterMap filtersByArchive,
                                               ProcessContext context)
                                        throws java.io.IOException,
                                               ApplicationException,
                                               TaskCancelledException
Ensure that the stored files are present on the local disk. Useful for some archive handlers that need to ensure this before processing the archives.
Return a set of directories where local copies can be found.
This set is :
- either of length 1 (if overrideRecoveredFiles = true)
- either of exact same length as archivesToProcess

Throws:
java.io.IOException
ApplicationException
TaskCancelledException

getArchiveSize

public long getArchiveSize(java.io.File archive,
                           boolean forceComputation)
                    throws ApplicationException
Returns the length of the archive passed as argument if it can be computed.
Returns -1 otherwise (for instance if the file system driver is too slow to compute the size recursively)

Specified by:
getArchiveSize in class AbstractFileSystemMedium
Throws:
ApplicationException

getContentFileName

public java.lang.String getContentFileName()
Return the final content file name


getEntries

public java.util.List getEntries(AggregatedViewContext context,
                                 java.lang.String root,
                                 java.util.GregorianCalendar date)
                          throws ApplicationException
Description copied from interface: ArchiveMedium
Return the content of the archive matching the date passed as argument

Specified by:
getEntries in interface ArchiveMedium
Throws:
ApplicationException

getHandler

public ArchiveHandler getHandler()

getHashFileName

public java.lang.String getHashFileName()
Return the final hash file name


getLastArchive

public java.io.File getLastArchive(java.lang.String backupScheme,
                                   java.util.GregorianCalendar date)
                            throws ApplicationException
Returns the last archive for a given date.

Specified by:
getLastArchive in class AbstractFileSystemMedium
Throws:
ApplicationException

getLogicalView

public java.util.List getLogicalView(AggregatedViewContext context,
                                     java.lang.String root,
                                     boolean aggregated)
                              throws ApplicationException
Description copied from interface: ArchiveMedium
Return a "logical view" of the target's content

Specified by:
getLogicalView in interface ArchiveMedium
Throws:
ApplicationException

getMetaDataFileName

public java.lang.String getMetaDataFileName()
Return the final metadata file name


getTraceFileName

public java.lang.String getTraceFileName()
Return the final trace file name


initMergeManifest

public void initMergeManifest(java.io.File[] recoveredArchives,
                              java.util.GregorianCalendar fromDate,
                              java.util.GregorianCalendar toDate,
                              Manifest manifest)
                       throws ApplicationException
Throws:
ApplicationException

install

public void install()
             throws ApplicationException
Description copied from interface: ArchiveMedium
Set up all necessary objects for the medium (for instance file system drivers)

Specified by:
install in interface ArchiveMedium
Overrides:
install in class AbstractFileSystemMedium
Throws:
ApplicationException

isOverwrite

public boolean isOverwrite()

isTrackPermissions

public boolean isTrackPermissions()

listArchives

public java.io.File[] listArchives(java.util.GregorianCalendar fromDate,
                                   java.util.GregorianCalendar toDate)
Lists the medium's archives

Specified by:
listArchives in class AbstractFileSystemMedium

logRecoveryStep

public void logRecoveryStep(RecoveryFilterMap filtersByArchive,
                            FileFilterList filters,
                            java.io.File archive,
                            ProcessContext context)
                     throws TaskCancelledException
Log recovery informations

Throws:
TaskCancelledException

merge

public void merge(java.util.GregorianCalendar fromDate,
                  java.util.GregorianCalendar toDate,
                  Manifest mfToInsert,
                  boolean keepDeletedEntries,
                  ProcessContext context)
           throws ApplicationException
Description copied from interface: ArchiveMedium
Merge the archives that have been created between fromDate and toDate.

Specified by:
merge in interface ArchiveMedium
Throws:
ApplicationException

open

public void open(Manifest manifest,
                 ProcessContext context,
                 java.lang.String backupScheme)
          throws ApplicationException
Prepares the backup

Specified by:
open in interface ArchiveMedium
Throws:
ApplicationException

recover

public void recover(java.lang.Object destination,
                    java.lang.String[] filter,
                    java.util.GregorianCalendar date,
                    boolean recoverDeletedEntries,
                    boolean checkRecoveredFiles,
                    ProcessContext context)
             throws ApplicationException,
                    TaskCancelledException
Recovers the stored data

Specified by:
recover in interface ArchiveMedium
Throws:
ApplicationException
TaskCancelledException

rollbackBackup

public void rollbackBackup(ProcessContext context)
                    throws ApplicationException
Description copied from interface: ArchiveMedium
Cancel the backup

Specified by:
rollbackBackup in interface ArchiveMedium
Throws:
ApplicationException

rollbackMerge

public void rollbackMerge(ProcessContext context)
                   throws ApplicationException
Description copied from interface: ArchiveMedium
Cancel the "merge"

Specified by:
rollbackMerge in interface ArchiveMedium
Throws:
ApplicationException

search

public TargetSearchResult search(SearchCriteria criteria)
                          throws ApplicationException
Description copied from interface: ArchiveMedium
Searches entries within the archives

Specified by:
search in interface ArchiveMedium
Throws:
ApplicationException

setHandler

public void setHandler(ArchiveHandler handler)

setOverwrite

public void setOverwrite(boolean overwrite)

setTrackPermissions

public void setTrackPermissions(boolean trackPermissions)

simulateEntryProcessing

public void simulateEntryProcessing(RecoveryEntry entry,
                                    boolean haltOnFirstDifference,
                                    ProcessContext context)
                             throws ApplicationException
Description copied from interface: ArchiveMedium
Simulates the processing of the entry passed as argument.
Used during backup simulation.

Specified by:
simulateEntryProcessing in interface ArchiveMedium
Throws:
ApplicationException

store

public void store(RecoveryEntry entry,
                  ProcessContext context)
           throws StoreException,
                  ApplicationException,
                  TaskCancelledException
Stores an entry

Specified by:
store in interface ArchiveMedium
Throws:
StoreException
ApplicationException
TaskCancelledException

doAndRetry

public void doAndRetry(IOTask rn,
                       java.lang.String message)
                throws java.io.IOException,
                       TaskCancelledException,
                       ApplicationException
Throws:
java.io.IOException
TaskCancelledException
ApplicationException

retrySupported

public abstract boolean retrySupported()

getMaxRetries

public abstract int getMaxRetries()

storeManifest

public void storeManifest(ProcessContext context)
                   throws ApplicationException
Throws:
ApplicationException

supportsBackupScheme

public boolean supportsBackupScheme(java.lang.String backupScheme)
Description copied from interface: ArchiveMedium
Tells whether the backup scheme passed as argument is supported by the medium or not

Specified by:
supportsBackupScheme in interface ArchiveMedium

buildArchive

protected void buildArchive(ProcessContext context)
                     throws java.io.IOException,
                            ApplicationException
Build the archive

Throws:
java.io.IOException
ApplicationException

buildAtomicEntrySet

protected java.lang.String[] buildAtomicEntrySet(java.lang.String[] entries,
                                                 java.io.File traceFile,
                                                 int maxSetSize,
                                                 ProcessContext context)
                                          throws java.io.IOException,
                                                 FileMetaDataSerializationException,
                                                 TaskCancelledException
Build an explicit set of entries (files) to recover.
If the set's size reaches maxSetSize, then the process is stopped and null is returned.
Otherwise, the set is returned.

Throws:
java.io.IOException
FileMetaDataSerializationException
TaskCancelledException

buildMergedArchiveFromDirectory

protected abstract void buildMergedArchiveFromDirectory(ProcessContext context)
                                                 throws ApplicationException
Throws:
ApplicationException

checkFileSystemPolicy

protected void checkFileSystemPolicy()
Check that we do not use a reserved name as archive name

Specified by:
checkFileSystemPolicy in class AbstractFileSystemMedium

cleanUnwantedFiles

protected void cleanUnwantedFiles(java.io.File targetFile,
                                  java.io.File traceFile,
                                  boolean cancelSensitive,
                                  ProcessContext context)
                           throws java.io.IOException,
                                  TaskCancelledException,
                                  FileMetaDataSerializationException
Delete unwanted files (ie files that have been recovered but that do not appear in the trace file)

Throws:
java.io.IOException
TaskCancelledException
FileMetaDataSerializationException

closeArchive

protected abstract void closeArchive(ProcessContext context)
                              throws java.io.IOException,
                                     ApplicationException
Throws:
java.io.IOException
ApplicationException

computeArchiveName

protected java.lang.String computeArchiveName(java.util.GregorianCalendar date)
Build an archive name


computeArchivePath

protected java.lang.String computeArchivePath(java.util.GregorianCalendar date)
Build a full archive path


computeFinalArchivePath

protected java.lang.String computeFinalArchivePath()

computeMergeDirectories

protected abstract void computeMergeDirectories(ProcessContext context)
                                         throws ApplicationException
Throws:
ApplicationException

convertArchiveToFinal

protected void convertArchiveToFinal(ProcessContext context)
                              throws java.io.IOException,
                                     ApplicationException
Throws:
java.io.IOException
ApplicationException

copyAttributes

protected void copyAttributes(java.lang.Object clone)
Overrides:
copyAttributes in class AbstractFileSystemMedium

deleteArchive

protected void deleteArchive(java.io.File archive)
                      throws java.io.IOException
Deletes the archive - WHETHER IT IS COMMITTED OR NOT

Specified by:
deleteArchive in class AbstractFileSystemMedium
Throws:
java.io.IOException

getArchiveData

protected EntryArchiveData getArchiveData(java.lang.String entry,
                                          java.io.File archive)
                                   throws ApplicationException
Description copied from class: AbstractFileSystemMedium
Retourne le status de l'entree, dans l'archive specifiee.

Specified by:
getArchiveData in class AbstractFileSystemMedium
Returns:
Throws:
ApplicationException

isWorkingDirectory

protected boolean isWorkingDirectory(java.io.File f)
Description copied from class: AbstractFileSystemMedium
Introduced in Areca v6.2 Tells whether the file is a working directory or not

Specified by:
isWorkingDirectory in class AbstractFileSystemMedium

matchArchiveName

protected boolean matchArchiveName(java.io.File f)
Description copied from class: AbstractFileSystemMedium
Introduced in Areca v6.0
Caution : will return 'false' for archives that have been built with previous versions of Areca

Specified by:
matchArchiveName in class AbstractFileSystemMedium

prepareContext

protected abstract void prepareContext(ProcessContext context)
                                throws java.io.IOException
Throws:
java.io.IOException

recover

protected void recover(java.lang.Object destination,
                       java.lang.String[] argFilter,
                       int minimumArchiveNumber,
                       java.util.GregorianCalendar fromDate,
                       java.util.GregorianCalendar toDate,
                       java.io.File traceFile,
                       short mode,
                       boolean recoverDeletedEntries,
                       boolean checkRecoveredFiles,
                       ProcessContext context)
                throws ApplicationException,
                       TaskCancelledException
Recovers the files at the requested recovery location, according to the recovery dates passed as argument.
'filters' may be null ...
The recovery is actually done if there are at least minimumArchiveNumber archives to recover

If it has enough memory, Areca optimizes the recovery process to only recover the needed files (instead of blindly recovering the whole archives)

Throws:
ApplicationException
TaskCancelledException

registerUnstoredFile

protected abstract void registerUnstoredFile(FileSystemRecoveryEntry entry,
                                             ProcessContext context)
                                      throws java.io.IOException
Throws:
java.io.IOException

duplicateMetadataFile

protected java.io.File duplicateMetadataFile(java.io.File source,
                                             ProcessContext context)
It is sometime necessary to work on a copy of metadata files.
This method creates a temporary copy of a source file.