public StatusOperation(Config config) { this(config, new StatusOperationOptions()); }
@Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { return visitFile(dir, attrs); }
private ChangeSet findLocalChanges(final Map<String, FileVersion> filesInDatabase) throws FileNotFoundException, IOException { ChangeSet localChanges = findLocalChangedAndNewFiles(config.getLocalDir(), filesInDatabase); if (options == null || options.isDelete()) { findAndAppendDeletedFiles(localChanges, filesInDatabase); } return localChanges; }
public StatusOperationResult status(StatusOperationOptions options) throws Exception { return new StatusOperation(config, options).execute(); }
private boolean hasLocalChanges() throws Exception { StatusOperationResult statusOperationResult = new StatusOperation(config, options.getStatusOptions()).execute(); return statusOperationResult.getChangeSet().hasChanges(); }
StatusOperation statusOperation = new StatusOperation(config, options.getStatusOptions()); StatusOperationResult statusOperationResult = statusOperation.execute(); ChangeSet localChanges = statusOperationResult.getChangeSet(); result.getStatusResult().setChangeSet(localChanges);
@Override public StatusOperationOptions parseOptions(String[] operationArgs) throws Exception { StatusOperationOptions operationOptions = new StatusOperationOptions(); OptionParser parser = new OptionParser(); parser.allowsUnrecognizedOptions(); OptionSpec<Void> optionForceChecksum = parser.acceptsAll(asList("f", "force-checksum")); OptionSpec<Void> optionNoDeleteUpload = parser.acceptsAll(asList("D", "no-delete")); OptionSet options = parser.parse(operationArgs); // --force-checksum operationOptions.setForceChecksum(options.has(optionForceChecksum)); // -D, --no-delete operationOptions.setDelete(!options.has(optionNoDeleteUpload)); return operationOptions; }
@Override public StatusOperationResult execute() throws Exception { logger.log(Level.INFO, ""); logger.log(Level.INFO, "Running 'Status' at client " + config.getMachineName() + " ..."); logger.log(Level.INFO, "--------------------------------------------"); if (options != null && options.isForceChecksum()) { logger.log(Level.INFO, "Force checksum ENABLED."); } if (options != null && !options.isDelete()) { logger.log(Level.INFO, "Delete missing files DISABLED."); } // Get local database logger.log(Level.INFO, "Querying current file tree from database ..."); eventBus.post(new StatusStartSyncExternalEvent(config.getLocalDir().getAbsolutePath())); // Path to actual file version final Map<String, FileVersion> filesInDatabase = localDatabase.getCurrentFileTree(); // Find local changes logger.log(Level.INFO, "Analyzing local folder " + config.getLocalDir() + " ..."); ChangeSet localChanges = findLocalChanges(filesInDatabase); if (!localChanges.hasChanges()) { logger.log(Level.INFO, "- No changes to local database"); } // Return result StatusOperationResult statusResult = new StatusOperationResult(); statusResult.setChangeSet(localChanges); eventBus.post(new StatusEndSyncExternalEvent(config.getLocalDir().getAbsolutePath(), localChanges.hasChanges())); return statusResult; }
public UpOperationResult upWithForceChecksum() throws Exception { StatusOperationOptions statusOptions = new StatusOperationOptions(); statusOptions.setForceChecksum(true); UpOperationOptions upOptions = new UpOperationOptions(); upOptions.setStatusOptions(statusOptions); return up(upOptions); }
@Override public void printResults(OperationResult operationResult) { StatusOperationResult concreteOperationResult = (StatusOperationResult) operationResult; if (concreteOperationResult.getChangeSet().hasChanges()) { for (String newFile : concreteOperationResult.getChangeSet().getNewFiles()) { out.println("? "+newFile); } for (String changedFile : concreteOperationResult.getChangeSet().getChangedFiles()) { out.println("M "+changedFile); } for (String deletedFile : concreteOperationResult.getChangeSet().getDeletedFiles()) { out.println("D "+deletedFile); } } else { out.println("No local changes."); } }
private ChangeSet findLocalChangedAndNewFiles(final File root, Map<String, FileVersion> filesInDatabase) throws FileNotFoundException, IOException { Path rootPath = Paths.get(root.getAbsolutePath()); StatusFileVisitor fileVisitor = new StatusFileVisitor(rootPath, filesInDatabase); Files.walkFileTree(rootPath, fileVisitor); return fileVisitor.getChangeSet(); }
boolean forceChecksum = options != null && options.isForceChecksum(); FileVersionComparison fileVersionComparison = fileVersionComparator.compare(expectedLastFileVersion, actualLocalFile.toFile(), forceChecksum);
@Override public int execute(String[] operationArgs) throws Exception { StatusOperationOptions operationOptions = parseOptions(operationArgs); StatusOperationResult operationResult = new StatusOperation(config, operationOptions).execute(); printResults(operationResult); return 0; }
public StatusOperationResult status() throws Exception { return status(new StatusOperationOptions()); }
private void startIndexerThread(BlockingQueue<DatabaseVersion> databaseVersionQueue) { // Get a list of files that have been updated ChangeSet localChanges = result.getStatusResult().getChangeSet(); List<File> locallyUpdatedFiles = extractLocallyUpdatedFiles(localChanges); List<File> locallyDeletedFiles = extractLocallyDeletedFiles(localChanges); // Iterate over the changes, deduplicate, and feed DatabaseVersions into an iterator Deduper deduper = new Deduper(config.getChunker(), config.getMultiChunker(), config.getTransformer(), options.getTransactionSizeLimit(), options.getTransactionFileLimit()); AsyncIndexer asyncIndexer = new AsyncIndexer(config, deduper, locallyUpdatedFiles, locallyDeletedFiles, databaseVersionQueue); new Thread(asyncIndexer, "AsyncI/" + config.getLocalDir().getName()).start(); }
@Override public Response handleRequest(FolderRequest request) { StatusFolderRequest concreteRequest = (StatusFolderRequest) request; try { StatusOperation operation = new StatusOperation(config, concreteRequest.getOptions()); StatusOperationResult operationResult = operation.execute(); StatusFolderResponse statusFolderResponse = new StatusFolderResponse(operationResult, request.getId()); return statusFolderResponse; } catch (Exception e) { logger.log(Level.WARNING, "Cannot obtain status.", e); return new BadRequestResponse(request.getId(), "Cannot execute operation: " + e.getMessage()); } } }