private void handleFiles()

in commons-vfs2/src/main/java/org/apache/commons/vfs2/tasks/AbstractSyncTask.java [197:268]


    private void handleFiles() throws Exception {
        // Locate the destination folder, and make sure it exists
        final FileObject destFolder = resolveFile(destDirUrl);
        destFolder.createFolder();

        // Locate the source files, and make sure they exist
        FileName srcDirName = null;
        if (srcDirUrl != null) {
            srcDirName = resolveFile(srcDirUrl).getName();
        }
        final ArrayList<FileObject> srcs = new ArrayList<>();
        for (final SourceInfo src : srcFiles) {
            final FileObject srcFile = resolveFile(src.file);
            if (!srcFile.exists()) {
                final String message = Messages.getString("vfs.tasks/sync.src-file-no-exist.warn", srcFile);

                logOrDie(message, Project.MSG_WARN);
            } else {
                srcs.add(srcFile);
            }
        }

        // Scan the source files
        final Set<FileObject> destFiles = new HashSet<>();
        for (final FileObject rootFile : srcs) {
            final FileName rootName = rootFile.getName();

            if (rootFile.isFile()) {
                // Build the destination file name
                final String relName;
                if (srcDirName == null || !srcDirIsBase) {
                    relName = rootName.getBaseName();
                } else {
                    relName = srcDirName.getRelativeName(rootName);
                }
                final FileObject destFile = destFolder.resolveFile(relName, NameScope.DESCENDENT);

                // Do the copy
                handleFile(destFiles, rootFile, destFile);
            } else {
                // Find matching files
                // If srcDirIsBase is true, select also the subdirectories
                final FileObject[] files = rootFile
                        .findFiles(srcDirIsBase ? Selectors.SELECT_ALL : Selectors.SELECT_FILES);

                for (final FileObject srcFile : files) {
                    // Build the destination file name
                    final String relName;
                    if (srcDirName == null || !srcDirIsBase) {
                        relName = rootName.getRelativeName(srcFile.getName());
                    } else {
                        relName = srcDirName.getRelativeName(srcFile.getName());
                    }

                    final FileObject destFile = destFolder.resolveFile(relName, NameScope.DESCENDENT);

                    // Do the copy
                    handleFile(destFiles, srcFile, destFile);
                }
            }
        }

        // Scan the destination files for files with no source file
        if (detectMissingSourceFiles()) {
            final FileObject[] allDestFiles = destFolder.findFiles(Selectors.SELECT_FILES);
            for (final FileObject destFile : allDestFiles) {
                if (!destFiles.contains(destFile)) {
                    handleMissingSourceFile(destFile);
                }
            }
        }
    }