public RestoreOperation(Config config) { this(config, new RestoreOperationOptions()); }
FileHistoryId restoreFileHistoryId = findFileHistoryId(); return new RestoreOperationResult(RestoreResultCode.NACK_NO_FILE); FileVersion restoreFileVersion = findRestoreFileVersion(restoreFileHistoryId); return new RestoreOperationResult(RestoreResultCode.NACK_NO_FILE); return new RestoreOperationResult(RestoreResultCode.NACK_INVALID_FILE); downloadMultiChunks(restoreFileVersion); RestoreFileSystemAction restoreAction = new RestoreFileSystemAction(config, assembler, restoreFileVersion, options.getRelativeTargetPath()); RestoreFileSystemActionResult restoreResult = restoreAction.execute(); return new RestoreOperationResult(RestoreResultCode.ACK, restoreResult.getTargetFile());
public RestoreOperationResult restore(RestoreOperationOptions options) throws Exception { return new RestoreOperation(config, options).execute(); }
@Override public RestoreOperationOptions parseOptions(String[] operationArgs) throws Exception { RestoreOperationOptions operationOptions = new RestoreOperationOptions(); operationOptions.setFileVersion(options.valueOf(optionRevision)); operationOptions.setRelativeTargetPath(options.valueOf(optionTarget)); operationOptions.setFileHistoryId(restoreFileHistory);
@Override public RestoreFileSystemActionResult execute() throws Exception { if (fileVersion2.getType() == FileType.FOLDER) { throw new Exception("Cannot restore folders."); } else if (fileVersion2.getType() == FileType.SYMLINK) { throw new Exception("Not yet implemented."); } else { // Assemble file to cache File cacheFile = assembleFileToCache(fileVersion2); // Find target path & folder NormalizedPath targetPath = findTargetPath(); NormalizedPath targetFolder = targetPath.getParent(); // Create folder (if necessary) and move file if (!targetFolder.toFile().isDirectory()) { targetFolder.toFile().mkdirs(); } FileUtils.moveFile(cacheFile, targetPath.toFile()); return new RestoreFileSystemActionResult(targetPath.toFile()); } }
@Override public void printResults(OperationResult operationResult) { RestoreOperationResult concreteOperationResult = (RestoreOperationResult) operationResult; switch (concreteOperationResult.getResultCode()) { case ACK: out.println("File restored to " + concreteOperationResult.getTargetFile()); break; case NACK_INVALID_FILE: out.println("Could not restore file. File entry is present but invalid (Folder?)."); break; case NACK_NO_FILE: out.println("Could not restore file. No file by that ID or version found, or file ID prefix matches more than one file."); break; default: throw new RuntimeException("Invalid result code: " + concreteOperationResult.getResultCode()); } } }
private FileHistoryId findFileHistoryId() { return localDatabase.expandFileHistoryId(options.getFileHistoryId()); }
private FileVersion findRestoreFileVersion(FileHistoryId restoreFileHistoryId) { if (options.getFileVersion() != null) { return localDatabase.getFileVersion(restoreFileHistoryId, options.getFileVersion()); } else { List<FileVersion> fileHistory = localDatabase.getFileHistory(restoreFileHistoryId); if (fileHistory.size() >= 2) { // In this case, we automatically restore the "previous" version return fileHistory.get(fileHistory.size()-2); } else if (fileHistory.size() == 1){ // In this case, we restore the last version. This is likely a deleted version. return fileHistory.get(0); } else { return null; } } }
@Override public int execute(String[] operationArgs) throws Exception { RestoreOperationOptions operationOptions = parseOptions(operationArgs); RestoreOperationResult operationResult = new RestoreOperation(config, operationOptions).execute(); printResults(operationResult); return 0; }
@Override public Response handleRequest(FolderRequest request) { RestoreFolderRequest concreteRequest = (RestoreFolderRequest) request; try { RestoreOperation operation = new RestoreOperation(config, concreteRequest.getOptions()); RestoreOperationResult operationResult = operation.execute(); RestoreFolderResponse response = new RestoreFolderResponse(operationResult, request.getId()); return response; } catch (Exception e) { logger.log(Level.WARNING, "Cannot obtain status.", e); return new BadRequestResponse(request.getId(), "Cannot execute operation: " + e.getMessage()); } } }