@Override
public Path copy(final Path source, final Path copy, final TransferStatus status, final ConnectionCallback callback) throws BackgroundException {
if(vault.contains(copy)) {
final Cryptor cryptor = vault.getCryptor();
final FileHeader header = cryptor.fileHeaderCryptor().create();
status.setHeader(cryptor.fileHeaderCryptor().encryptHeader(header));
status.setNonces(new RandomNonceGenerator());
}
if(vault.contains(source) && vault.contains(copy)) {
return vault.decrypt(session, proxy.withTarget(target).copy(
vault.contains(source) ? vault.encrypt(session, source) : source,
vault.contains(copy) ? vault.encrypt(session, copy) : copy, status, callback));
}
else {
final Path target = new DefaultCopyFeature(session).withTarget(this.target).copy(
vault.contains(source) ? vault.encrypt(session, source) : source,
vault.contains(copy) ? vault.encrypt(session, copy) : copy,
status,
callback);
if(vault.contains(copy)) {
return vault.decrypt(session, target);
}
return target;
}
}