Class RetriableFeatureTransferManager
- java.lang.Object
-
- org.syncany.plugins.transfer.features.RetriableFeatureTransferManager
-
- All Implemented Interfaces:
FeatureTransferManager,TransferManager
public class RetriableFeatureTransferManager extends java.lang.Object implements FeatureTransferManager
The retriable transfer manager implements a simple try-sleep-retry mechanism for regularTransferManagers.It encapsules a single transfer manager and proxies all of its methods. If a method fails with a
StorageException, the method is retried N times before the exception is actually thrown to the caller. Between retries, the method waits M seconds.
-
-
Constructor Summary
Constructors Constructor Description RetriableFeatureTransferManager(TransferManager originalTransferManager, TransferManager underlyingTransferManager, Config config, Retriable retriableAnnotation)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidconnect()Establish a connection with the remote storage.booleandelete(RemoteFile remoteFile)Deletes an existing file from the remote storage permanently.voiddisconnect()Disconnect from the remote storage.voiddownload(RemoteFile remoteFile, java.io.File localFile)Download an existing remote file to the local disk.java.lang.StringgetRemoteFilePath(java.lang.Class<? extends RemoteFile> remoteFileClass)Return the path for a concreteRemoteFileimplementation as it is stored on the remote side *voidinit(boolean createIfRequired)Initialize remote storage.<T extends RemoteFile>
java.util.Map<java.lang.String,T>list(java.lang.Class<T> remoteFileClass)Retrieves a list of all files in the remote repository, filtered by the type of the desired file, i.e.voidmove(RemoteFile sourceFile, RemoteFile targetFile)Moves an existing file in the online storage.StorageTestResulttest(boolean testCreateTarget)Tests whether the repository parameters are valid.booleantestRepoFileExists()Tests whether the repository file exists (seeSyncanyRemoteFile).booleantestTargetCanCreate()Tests whether the target path/folder can be created (if it does not exist already).booleantestTargetCanWrite()Tests whether the target path/folder is writable by the application.booleantestTargetExists()Tests whether the target path/folder exists.voidupload(java.io.File localFile, RemoteFile remoteFile)Update an existing local file to the online storage.
-
-
-
Constructor Detail
-
RetriableFeatureTransferManager
public RetriableFeatureTransferManager(TransferManager originalTransferManager, TransferManager underlyingTransferManager, Config config, Retriable retriableAnnotation)
-
-
Method Detail
-
connect
public void connect() throws StorageException
Description copied from interface:TransferManagerEstablish a connection with the remote storage.This method does not validate the correctness of the repository and it does not create any folders. The former is done by
TransferManager.test(boolean), the latter is done byTransferManager.init(boolean).- Specified by:
connectin interfaceTransferManager- Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc.
-
disconnect
public void disconnect() throws StorageException
Description copied from interface:TransferManagerDisconnect from the remote storage.- Specified by:
disconnectin interfaceTransferManager- Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc.
-
init
public void init(boolean createIfRequired) throws StorageException
Description copied from interface:TransferManagerInitialize remote storage. This method is called to set up a new repository.- Specified by:
initin interfaceTransferManager- Parameters:
createIfRequired- true if the method should handle repo creation- Throws:
StorageException- If the connection drops, or any other exception occurs.
-
download
public void download(RemoteFile remoteFile, java.io.File localFile) throws StorageException
Description copied from interface:TransferManagerDownload an existing remote file to the local disk.The file is either downloaded completely or nothing at all. In the latter case, a
StorageExceptionis thrown.Implementations must make sure that if a file matches the specified name schema, it must be complete and consistent.
If remoteFile does not exist, a
StorageFileNotFoundExceptionis thrown.- Specified by:
downloadin interfaceTransferManager- Parameters:
remoteFile- Existing source file on the remote storage. The only required property of the remote file is the name.localFile- Not existing local file to which the remote file is going to be downloaded.- Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc.
-
move
public void move(RemoteFile sourceFile, RemoteFile targetFile) throws StorageException
Description copied from interface:TransferManagerMoves an existing file in the online storage.If the sourceFile does not exists, a
StorageMoveExceptionis thrown.- Specified by:
movein interfaceTransferManager- Parameters:
sourceFile- Existing remote file that is to be moved.targetFile- Destination for the remote file.- Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc.
-
upload
public void upload(java.io.File localFile, RemoteFile remoteFile) throws StorageException
Description copied from interface:TransferManagerUpdate an existing local file to the online storage.The file is either uploaded completely or nothing at all. In the latter case, a
StorageExceptionis thrown.Implementations must make sure that if a file matches the specified name schema, it must be complete and consistent.
Implementations must NOT upload a file if it already exists and has the same file size as the local file.
- Specified by:
uploadin interfaceTransferManager- Parameters:
localFile- Existing local file that is going to be uploaded.remoteFile- Not existing destination file on the remote storage. The only required property of the remote file is the name.- Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc.
-
delete
public boolean delete(RemoteFile remoteFile) throws StorageException
Description copied from interface:TransferManagerDeletes an existing file from the remote storage permanently.In case the remote file does not exist, it returns immediately without any notice. If the file cannot be deleted or the connection breaks, a
StorageExceptionis thrown.- Specified by:
deletein interfaceTransferManager- Parameters:
remoteFile- Existing remote file to be deleted. The only required property of the remote file is the name.- Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc
-
list
public <T extends RemoteFile> java.util.Map<java.lang.String,T> list(java.lang.Class<T> remoteFileClass) throws StorageException
Description copied from interface:TransferManagerRetrieves a list of all files in the remote repository, filtered by the type of the desired file, i.e. by a sub-class ofRemoteFile.- Specified by:
listin interfaceTransferManager- Parameters:
remoteFileClass- Filter class:RemoteFileor a sub-type thereof- Returns:
- Returns a list of remote files. In the map, the key is the file name,
the value the entire
RemoteFileobject. - Throws:
StorageException- If the connection fails due to no Internet connection, authentication errors, etc
-
getRemoteFilePath
public java.lang.String getRemoteFilePath(java.lang.Class<? extends RemoteFile> remoteFileClass)
Description copied from interface:TransferManagerReturn the path for a concreteRemoteFileimplementation as it is stored on the remote side *- Specified by:
getRemoteFilePathin interfaceTransferManager- Parameters:
remoteFileClass- The class to provide the path for- Returns:
- A string pointing to the folder where a file is stored
-
test
public StorageTestResult test(boolean testCreateTarget)
Description copied from interface:TransferManagerTests whether the repository parameters are valid. In particular, the method tests whether a target (folder, bucket, etc.) exists or, if not, whether it can be created. It furthermore tests whether a repository at the target already exists by checking if theSyncanyRemoteFileexists.The relevant result is determined by the following methods:
TransferManager.testTargetExists(): Tests whether the target exists.TransferManager.testTargetCanWrite(): Tests whether the target is writable.TransferManager.testTargetCanCreate(): Tests whether the target can be created if it does not exist already. This is only called iftestCreateTargetis set.TransferManager.testRepoFileExists(): Tests whether the repo file exists.
- Specified by:
testin interfaceTransferManager- Parameters:
testCreateTarget- Iftrue, the test will test if the target can be created in case it does not exist. Iffalse, this test will be skipped.- Returns:
- Returns the result of testing the repository.
- See Also:
StorageTestResult
-
testTargetExists
public boolean testTargetExists() throws StorageException
Description copied from interface:TransferManagerTests whether the target path/folder exists. This might be done by listing the parent path/folder or by retrieving metadata about the target. The method returnstrueif the target exists,falseotherwise.This method is called by the
TransferManager.test(boolean)method (only during repository initialization or initial connection).- Specified by:
testTargetExistsin interfaceTransferManager- Returns:
- Returns
trueif the target exists,falseotherwise - Throws:
StorageException- If the test cannot be performed, e.g. due to a connection failure
-
testTargetCanWrite
public boolean testTargetCanWrite() throws StorageException
Description copied from interface:TransferManagerTests whether the target path/folder is writable by the application. This method may either check the write permissions of the target or actually write a test file to check write access. If the target does not exist,falseis returned. If the target exists and is writable,trueis returned.This method is called by the
TransferManager.test(boolean)method (only during repository initialization or initial connection).- Specified by:
testTargetCanWritein interfaceTransferManager- Returns:
- Returns
trueif the target can be written to,falseotherwise - Throws:
StorageException- If the test cannot be performed, e.g. due to a connection failure
-
testTargetCanCreate
public boolean testTargetCanCreate() throws StorageException
Description copied from interface:TransferManagerTests whether the target path/folder can be created (if it does not exist already). This method may either check the permissions of the parent path/folder or actually create and delete the target to determine create permissions.If the target already exists, the method returns
true. If it does not, but it can be created (according to tests of this method), it also returnstrue. In all other cases,falseis returned.This method is called by the
TransferManager.test(boolean)method, but only if thetestCreateTargetflag is set totrue!- Specified by:
testTargetCanCreatein interfaceTransferManager- Returns:
- Returns
trueif the target can be created or already exists,falseotherwise - Throws:
StorageException- If the test cannot be performed, e.g. due to a connection failure
-
testRepoFileExists
public boolean testRepoFileExists() throws StorageException
Description copied from interface:TransferManagerTests whether the repository file exists (seeSyncanyRemoteFile). This method is called by theTransferManager.test(boolean)method (only during repository initialization (or initial connection).This method is called by the
TransferManager.test(boolean)method (only during repository initialization or initial connection).- Specified by:
testRepoFileExistsin interfaceTransferManager- Returns:
- Returns
trueif the repository is valid,falseotherwise - Throws:
StorageException- If the test cannot be performed, e.g. due to a connection failure
-
-