Example usage for org.apache.commons.vfs FileObject findFiles

List of usage examples for org.apache.commons.vfs FileObject findFiles

Introduction

In this page you can find the example usage for org.apache.commons.vfs FileObject findFiles.

Prototype

public FileObject[] findFiles(FileSelector selector) throws FileSystemException;

Source Link

Document

Finds the set of matching descendents of this file, in depthwise order.

Usage

From source file:com.panet.imeta.job.entries.folderscompare.JobEntryFoldersCompare.java

public Result execute(Result previousResult, int nr, Repository rep, Job parentJob) {
    LogWriter log = LogWriter.getInstance();
    Result result = previousResult;
    result.setResult(false);// w w w . j ava2  s . c  om
    boolean ok = true;

    String realFilename1 = getRealFilename1();
    String realFilename2 = getRealFilename2();

    FileObject folder1 = null;
    FileObject folder2 = null;
    FileObject filefolder1 = null;
    FileObject filefolder2 = null;

    try {
        if (filename1 != null && filename2 != null) {
            // Get Folders/Files to compare
            folder1 = KettleVFS.getFileObject(realFilename1);
            folder2 = KettleVFS.getFileObject(realFilename2);

            if (folder1.exists() && folder2.exists()) {
                if (!folder1.getType().equals(folder2.getType())) {
                    // pb...we try to compare file with folder !!!
                    log.logError(toString(),
                            Messages.getString("JobFoldersCompare.Log.CanNotCompareFilesFolders"));

                    if (folder1.getType() == FileType.FILE)
                        log.logError(toString(),
                                Messages.getString("JobFoldersCompare.Log.IsAFile", realFilename1));
                    else if (folder1.getType() == FileType.FOLDER)
                        log.logError(toString(),
                                Messages.getString("JobFoldersCompare.Log.IsAFolder", realFilename1));
                    else
                        log.logError(toString(),
                                Messages.getString("JobFoldersCompare.Log.IsUnknownFileType", realFilename1));

                    if (folder2.getType() == FileType.FILE)
                        log.logError(toString(),
                                Messages.getString("JobFoldersCompare.Log.IsAFile", realFilename2));
                    else if (folder2.getType() == FileType.FOLDER)
                        log.logError(toString(),
                                Messages.getString("JobFoldersCompare.Log.IsAFolder", realFilename2));
                    else
                        log.logError(toString(),
                                Messages.getString("JobFoldersCompare.Log.IsUnknownFileType", realFilename2));

                } else {
                    if (folder1.getType() == FileType.FILE) {
                        // simply compare 2 files ..
                        if (equalFileContents(folder1, folder2))
                            result.setResult(true);
                        else
                            result.setResult(false);
                    } else if (folder1.getType() == FileType.FOLDER) {
                        // We compare 2 folders ...

                        FileObject list1[] = folder1.findFiles(new TextFileSelector(folder1.toString()));
                        FileObject list2[] = folder2.findFiles(new TextFileSelector(folder2.toString()));

                        int lenList1 = list1.length;
                        int lenList2 = list2.length;

                        if (log.isDetailed()) {
                            log.logDetailed(toString(), Messages.getString(
                                    "JobFoldersCompare.Log.FolderContains", realFilename1, "" + lenList1));
                            log.logDetailed(toString(), Messages.getString(
                                    "JobFoldersCompare.Log.FolderContains", realFilename2, "" + lenList2));
                        }
                        if (lenList1 == lenList2) {

                            HashMap<String, String> collection1 = new HashMap<String, String>();
                            HashMap<String, String> collection2 = new HashMap<String, String>();

                            for (int i = 0; i < list1.length; i++) {
                                // Put files list1 in TreeMap collection1
                                collection1.put(list1[i].getName().getBaseName(), list1[i].toString());
                            }

                            for (int i = 0; i < list2.length; i++) {
                                // Put files list2 in TreeMap collection2
                                collection2.put(list2[i].getName().getBaseName(), list2[i].toString());
                            }

                            // Let's now fetch Folder1
                            // and for each entry, we will search it in
                            // Folder2
                            // if the entry exists..we will compare file
                            // entry (file or folder?)
                            // if the 2 entry are file (not folder), we will
                            // compare content
                            Set<Map.Entry<String, String>> entrees = collection1.entrySet();
                            Iterator<Map.Entry<String, String>> iterateur = entrees.iterator();

                            while (iterateur.hasNext()) {
                                Map.Entry<String, String> entree = iterateur.next();
                                if (!collection2.containsKey(entree.getKey())) {
                                    ok = false;
                                    if (log.isDetailed())
                                        log.logDetailed(toString(),
                                                Messages.getString("JobFoldersCompare.Log.FileCanNotBeFoundIn",
                                                        entree.getKey().toString(), realFilename2));
                                } else {
                                    if (log.isDebug())
                                        log.logDebug(toString(),
                                                Messages.getString("JobFoldersCompare.Log.FileIsFoundIn",
                                                        entree.getKey().toString(), realFilename2));

                                    filefolder1 = KettleVFS.getFileObject(entree.getValue().toString());
                                    filefolder2 = KettleVFS
                                            .getFileObject(collection2.get(entree.getKey()).toString());

                                    if (!filefolder2.getType().equals(filefolder1.getType())) {
                                        // The file1 exist in the
                                        // folder2..but they don't have the
                                        // same type
                                        ok = false;
                                        if (log.isDetailed())
                                            log.logDetailed(toString(),
                                                    Messages.getString("JobFoldersCompare.Log.FilesNotSameType",
                                                            filefolder1.toString(), filefolder2.toString()));

                                        if (filefolder1.getType() == FileType.FILE)
                                            log.logError(toString(), Messages.getString(
                                                    "JobFoldersCompare.Log.IsAFile", filefolder1.toString()));
                                        else if (filefolder1.getType() == FileType.FOLDER)
                                            log.logError(toString(), Messages.getString(
                                                    "JobFoldersCompare.Log.IsAFolder", filefolder1.toString()));
                                        else
                                            log.logError(toString(),
                                                    Messages.getString(
                                                            "JobFoldersCompare.Log.IsUnknownFileType",
                                                            filefolder1.toString()));

                                        if (filefolder2.getType() == FileType.FILE)
                                            log.logError(toString(), Messages.getString(
                                                    "JobFoldersCompare.Log.IsAFile", filefolder2.toString()));
                                        else if (filefolder2.getType() == FileType.FOLDER)
                                            log.logError(toString(), Messages.getString(
                                                    "JobFoldersCompare.Log.IsAFolder", filefolder2.toString()));
                                        else
                                            log.logError(toString(),
                                                    Messages.getString(
                                                            "JobFoldersCompare.Log.IsUnknownFileType",
                                                            filefolder2.toString()));

                                    } else {
                                        // Files are the same type ...
                                        if (filefolder2.getType() == FileType.FILE) {
                                            // Let's compare file size
                                            if (comparefilesize) {
                                                long filefolder1_size = filefolder1.getContent().getSize();
                                                long filefolder2_size = filefolder2.getContent().getSize();
                                                if (filefolder1_size != filefolder2_size) {
                                                    ok = false;
                                                    if (log.isDetailed()) {
                                                        log.logDetailed(toString(), Messages.getString(
                                                                "JobFoldersCompare.Log.FilesNotSameSize",
                                                                filefolder1.toString(),
                                                                filefolder2.toString()));
                                                        log.logDetailed(toString(), Messages.getString(
                                                                "JobFoldersCompare.Log.SizeFileIs",
                                                                filefolder1.toString(), "" + filefolder1_size));
                                                        log.logDetailed(toString(), Messages.getString(
                                                                "JobFoldersCompare.Log.SizeFileIs",
                                                                filefolder2.toString(), "" + filefolder2_size));
                                                    }
                                                }
                                            }

                                            if (ok) {
                                                // Let's compare files
                                                // content..
                                                if (comparefilecontent) {
                                                    if (!equalFileContents(filefolder1, filefolder2)) {
                                                        ok = false;
                                                        if (log.isDetailed())
                                                            log.logDetailed(toString(), Messages.getString(
                                                                    "JobFoldersCompare.Log.FilesNotSameContent",
                                                                    filefolder1.toString(),
                                                                    filefolder2.toString()));
                                                    }
                                                }
                                            }
                                        }
                                    }

                                }
                                // log.logBasic(toString(),entree.getKey() +
                                // " - " + entree.getValue());
                            }

                            result.setResult(ok);
                        } else {
                            // The 2 folders don't have the same files
                            // number
                            if (log.isDetailed())
                                log.logDetailed(toString(),
                                        Messages.getString("JobFoldersCompare.Log.FoldersDifferentFiles",
                                                realFilename1.toString(), realFilename2.toString()));
                        }

                    } else {
                        // File type unknown !!
                    }
                }

            } else {
                if (!folder1.exists())
                    log.logError(toString(),
                            Messages.getString("JobFileCompare.Log.FileNotExist", realFilename1));
                if (!folder2.exists())
                    log.logError(toString(),
                            Messages.getString("JobFileCompare.Log.FileNotExist", realFilename2));
                result.setResult(false);
                result.setNrErrors(1);
            }
        } else {
            log.logError(toString(), Messages.getString("JobFoldersCompare.Log.Need2Files"));
        }
    } catch (Exception e) {
        result.setResult(false);
        result.setNrErrors(1);
        log.logError(toString(), Messages.getString("JobFoldersCompare.Log.ErrorComparing", realFilename2,
                realFilename2, e.getMessage()));
    } finally {
        try {
            if (folder1 != null)
                folder1.close();
            if (folder2 != null)
                folder2.close();
            if (filefolder1 != null)
                filefolder1.close();
            if (filefolder2 != null)
                filefolder2.close();
        } catch (IOException e) {
        }
    }

    return result;
}

From source file:com.panet.imeta.job.entries.movefiles.JobEntryMoveFiles.java

private boolean ProcessFileFolder(String sourcefilefoldername, String destinationfilefoldername,
        String wildcard, Job parentJob, Result result, String MoveToFolder, LogWriter log) {
    boolean entrystatus = false;
    FileObject sourcefilefolder = null;
    FileObject destinationfilefolder = null;
    FileObject movetofolderfolder = null;
    FileObject Currentfile = null;

    // Get real source, destination file and wildcard
    String realSourceFilefoldername = environmentSubstitute(sourcefilefoldername);
    String realDestinationFilefoldername = environmentSubstitute(destinationfilefoldername);
    String realWildcard = environmentSubstitute(wildcard);

    try {//from  w  w  w.  java2s.  co  m

        // Here gc() is explicitly called if e.g. createfile is used in the
        // same
        // job for the same file. The problem is that after creating the
        // file the
        // file object is not properly garbaged collected and thus the file
        // cannot
        // be deleted anymore. This is a known problem in the JVM.

        System.gc();

        sourcefilefolder = KettleVFS.getFileObject(realSourceFilefoldername);
        destinationfilefolder = KettleVFS.getFileObject(realDestinationFilefoldername);
        if (!Const.isEmpty(MoveToFolder))
            movetofolderfolder = KettleVFS.getFileObject(MoveToFolder);

        if (sourcefilefolder.exists()) {

            // Check if destination folder/parent folder exists !
            // If user wanted and if destination folder does not exist
            // PDI will create it
            if (CreateDestinationFolder(destinationfilefolder)) {

                // Basic Tests
                if (sourcefilefolder.getType().equals(FileType.FOLDER) && destination_is_a_file) {
                    // Source is a folder, destination is a file
                    // WARNING !!! CAN NOT MOVE FOLDER TO FILE !!!

                    log.logError(Messages.getString("JobMoveFiles.Log.Forbidden"),
                            Messages.getString("JobMoveFiles.Log.CanNotMoveFolderToFile",
                                    realSourceFilefoldername, realDestinationFilefoldername));

                    // Update Errors
                    updateErrors();
                } else {
                    if (destinationfilefolder.getType().equals(FileType.FOLDER)
                            && sourcefilefolder.getType().equals(FileType.FILE)) {
                        // Source is a file, destination is a folder
                        // return destination short filename
                        String shortfilename = sourcefilefolder.getName().getBaseName();

                        try {
                            shortfilename = getDestinationFilename(sourcefilefolder.getName().getBaseName());
                        } catch (Exception e) {
                            log.logError(toString(),
                                    Messages.getString(Messages.getString("JobMoveFiles.Error.GettingFilename",
                                            sourcefilefolder.getName().getBaseName(), e.toString())));
                            return entrystatus;
                        }
                        // Move the file to the destination folder

                        String destinationfilenamefull = destinationfilefolder.toString() + Const.FILE_SEPARATOR
                                + shortfilename;
                        FileObject destinationfile = KettleVFS.getFileObject(destinationfilenamefull);

                        entrystatus = MoveFile(shortfilename, sourcefilefolder, destinationfile,
                                movetofolderfolder, log, parentJob, result);

                    } else if (sourcefilefolder.getType().equals(FileType.FILE) && destination_is_a_file) {
                        // Source is a file, destination is a file

                        FileObject destinationfile = KettleVFS.getFileObject(realDestinationFilefoldername);

                        // return destination short filename
                        String shortfilename = destinationfile.getName().getBaseName();
                        try {
                            shortfilename = getDestinationFilename(destinationfile.getName().getBaseName());
                        } catch (Exception e) {
                            log.logError(toString(),
                                    Messages.getString(Messages.getString("JobMoveFiles.Error.GettingFilename",
                                            sourcefilefolder.getName().getBaseName(), e.toString())));
                            return entrystatus;
                        }

                        String destinationfilenamefull = destinationfilefolder.getParent().toString()
                                + Const.FILE_SEPARATOR + shortfilename;
                        destinationfile = KettleVFS.getFileObject(destinationfilenamefull);

                        entrystatus = MoveFile(shortfilename, sourcefilefolder, destinationfile,
                                movetofolderfolder, log, parentJob, result);

                    } else {
                        // Both source and destination are folders
                        if (log.isDetailed()) {
                            log.logDetailed(toString(), "  ");
                            log.logDetailed(toString(), Messages.getString("JobMoveFiles.Log.FetchFolder",
                                    sourcefilefolder.toString()));
                        }

                        FileObject[] fileObjects = sourcefilefolder.findFiles(new AllFileSelector() {
                            public boolean traverseDescendents(FileSelectInfo info) {
                                return true;
                            }

                            public boolean includeFile(FileSelectInfo info) {
                                FileObject fileObject = info.getFile();
                                try {
                                    if (fileObject == null)
                                        return false;
                                } catch (Exception ex) {
                                    // Upon error don't process the
                                    // file.
                                    return false;
                                }

                                finally {
                                    if (fileObject != null) {
                                        try {
                                            fileObject.close();
                                        } catch (IOException ex) {
                                        }
                                        ;
                                    }

                                }
                                return true;
                            }
                        });

                        if (fileObjects != null) {
                            for (int j = 0; j < fileObjects.length && !parentJob.isStopped(); j++) {
                                // Success condition broken?
                                if (successConditionBroken) {
                                    if (!successConditionBrokenExit) {
                                        log.logError(toString(), Messages.getString(
                                                "JobMoveFiles.Error.SuccessConditionbroken", "" + NrErrors));
                                        successConditionBrokenExit = true;
                                    }
                                    return false;
                                }
                                // Fetch files in list one after one ...
                                Currentfile = fileObjects[j];

                                if (!MoveOneFile(Currentfile, sourcefilefolder, realDestinationFilefoldername,
                                        realWildcard, log, parentJob, result, movetofolderfolder)) {
                                    // Update Errors
                                    updateErrors();
                                }

                            }
                        }
                    }

                }
                entrystatus = true;
            } // end if
            else {
                // Destination Folder or Parent folder is missing
                log.logError(toString(), Messages.getString("JobMoveFiles.Error.DestinationFolderNotFound",
                        realDestinationFilefoldername));
            }
        } // end if
        else {
            log.logError(toString(),
                    Messages.getString("JobMoveFiles.Error.SourceFileNotExists", realSourceFilefoldername));
        }
    } // end try
    catch (Exception e) {
        log.logError(toString(), Messages.getString("JobMoveFiles.Error.Exception.MoveProcess",
                realSourceFilefoldername.toString(), destinationfilefolder.toString(), e.getMessage()));
        // Update Errors
        updateErrors();
    } finally {
        if (sourcefilefolder != null) {
            try {
                sourcefilefolder.close();
            } catch (IOException ex) {
            }
            ;
        }
        if (destinationfilefolder != null) {
            try {
                destinationfilefolder.close();
            } catch (IOException ex) {
            }
            ;
        }
        if (Currentfile != null) {
            try {
                Currentfile.close();
            } catch (IOException ex) {
            }
            ;
        }
        if (movetofolderfolder != null) {
            try {
                movetofolderfolder.close();
            } catch (IOException ex) {
            }
            ;
        }
    }
    return entrystatus;
}

From source file:org.geoserver.importer.VFSWorker.java

/**
 * //from w ww. j  a v  a2s.  c om
 * @param archiveFile
 * @param filter
 * 
 * @return
 */
public List<String> listFiles(final File archiveFile, final FilenameFilter filter) {
    FileSystemManager fsManager;
    try {
        fsManager = VFS.getManager();
        String absolutePath = resolveArchiveURI(archiveFile);
        FileObject resolvedFile = fsManager.resolveFile(absolutePath);

        FileSelector fileSelector = new FileSelector() {
            /**
             * @see org.apache.commons.vfs.FileSelector#traverseDescendents(org.apache.commons.vfs.FileSelectInfo)
             */
            public boolean traverseDescendents(FileSelectInfo folderInfo) throws Exception {
                return true;
            }

            /**
             * @see org.apache.commons.vfs.FileSelector#includeFile(org.apache.commons.vfs.FileSelectInfo)
             */
            public boolean includeFile(FileSelectInfo fileInfo) throws Exception {
                File folder = archiveFile.getParentFile();
                String name = fileInfo.getFile().getName().getFriendlyURI();
                return filter.accept(folder, name);
            }
        };

        FileObject fileSystem;
        if (fsManager.canCreateFileSystem(resolvedFile)) {
            fileSystem = fsManager.createFileSystem(resolvedFile);
        } else {
            fileSystem = resolvedFile;
        }
        LOGGER.fine("Listing spatial data files archived in " + archiveFile.getName());
        FileObject[] containedFiles = fileSystem.findFiles(fileSelector);
        List<String> names = new ArrayList<String>(containedFiles.length);
        for (FileObject fo : containedFiles) {
            // path relative to its filesystem (ie, to the archive file)
            String pathDecoded = fo.getName().getPathDecoded();
            names.add(pathDecoded);
        }
        LOGGER.fine("Found " + names.size() + " spatial data files in " + archiveFile.getName() + ": " + names);
        return names;
    } catch (FileSystemException e) {
        e.printStackTrace();
    } finally {
        // fsManager.closeFileSystem(fileSystem.getFileSystem());
    }
    return Collections.emptyList();
}

From source file:org.nanocontainer.deployer.NanoContainerDeployer.java

private FileObject getDeploymentScript(FileObject applicationFolder) throws FileSystemException {
    final FileObject metaInf = applicationFolder.getChild("META-INF");
    if (metaInf == null) {
        throw new FileSystemException("Missing META-INF folder in " + applicationFolder.getName().getPath());
    }//from   w  ww .j  a va2s .  c o m
    final FileObject[] nanocontainerScripts = metaInf.findFiles(new FileSelector() {
        public boolean includeFile(FileSelectInfo fileSelectInfo) throws Exception {
            return fileSelectInfo.getFile().getName().getBaseName().startsWith("nanocontainer");
        }

        public boolean traverseDescendents(FileSelectInfo fileSelectInfo) throws Exception {
            return true;
        }
    });
    if (nanocontainerScripts == null || nanocontainerScripts.length < 1) {
        throw new FileSystemException("No deployment script (nanocontainer.[groovy|bsh|js|py|xml]) in "
                + applicationFolder.getName().getPath() + "/META-INF");
    }
    return nanocontainerScripts[0];
}

From source file:org.pentaho.di.core.fileinput.FileInputList.java

public static FileInputList createFileList(VariableSpace space, String[] fileName, String[] fileMask,
        String[] excludeFileMask, String[] fileRequired, boolean[] includeSubdirs,
        FileTypeFilter[] fileTypeFilters) {
    FileInputList fileInputList = new FileInputList();

    // Replace possible environment variables...
    final String[] realfile = space.environmentSubstitute(fileName);
    final String[] realmask = space.environmentSubstitute(fileMask);
    final String[] realExcludeMask = space.environmentSubstitute(excludeFileMask);

    for (int i = 0; i < realfile.length; i++) {
        final String onefile = realfile[i];
        final String onemask = realmask[i];
        final String excludeonemask = realExcludeMask[i];
        final boolean onerequired = YES.equalsIgnoreCase(fileRequired[i]);
        final boolean subdirs = includeSubdirs[i];
        final FileTypeFilter filter = ((fileTypeFilters == null || fileTypeFilters[i] == null)
                ? FileTypeFilter.ONLY_FILES
                : fileTypeFilters[i]);//from  ww w.j a  v a 2 s .c o  m

        if (Const.isEmpty(onefile)) {
            continue;
        }

        //
        // If a wildcard is set we search for files
        //
        if (!Const.isEmpty(onemask) || !Const.isEmpty(excludeonemask)) {
            try {
                FileObject directoryFileObject = KettleVFS.getFileObject(onefile, space);
                boolean processFolder = true;
                if (onerequired) {
                    if (!directoryFileObject.exists()) {
                        // if we don't find folder..no need to continue
                        fileInputList.addNonExistantFile(directoryFileObject);
                        processFolder = false;
                    } else {
                        if (!directoryFileObject.isReadable()) {
                            fileInputList.addNonAccessibleFile(directoryFileObject);
                            processFolder = false;
                        }
                    }
                }

                // Find all file names that match the wildcard in this directory
                //
                if (processFolder) {
                    if (directoryFileObject != null && directoryFileObject.getType() == FileType.FOLDER) // it's a directory
                    {
                        FileObject[] fileObjects = directoryFileObject.findFiles(new AllFileSelector() {
                            @Override
                            public boolean traverseDescendents(FileSelectInfo info) {
                                return info.getDepth() == 0 || subdirs;
                            }

                            @Override
                            public boolean includeFile(FileSelectInfo info) {
                                // Never return the parent directory of a file list.
                                if (info.getDepth() == 0) {
                                    return false;
                                }

                                FileObject fileObject = info.getFile();
                                try {
                                    if (fileObject != null && filter.isFileTypeAllowed(fileObject.getType())) {
                                        String name = info.getFile().getName().getBaseName();
                                        boolean matches = true;
                                        if (!Const.isEmpty(onemask)) {
                                            matches = Pattern.matches(onemask, name);
                                        }
                                        boolean excludematches = false;
                                        if (!Const.isEmpty(excludeonemask)) {
                                            excludematches = Pattern.matches(excludeonemask, name);
                                        }
                                        return (matches && !excludematches);
                                    }
                                    return false;
                                } catch (IOException ex) {
                                    // Upon error don't process the file.
                                    return false;
                                }
                            }
                        });
                        if (fileObjects != null) {
                            for (int j = 0; j < fileObjects.length; j++) {
                                if (fileObjects[j].exists()) {
                                    fileInputList.addFile(fileObjects[j]);
                                }
                            }
                        }
                        if (Const.isEmpty(fileObjects)) {
                            if (onerequired) {
                                fileInputList.addNonAccessibleFile(directoryFileObject);
                            }
                        }

                        // Sort the list: quicksort, only for regular files
                        fileInputList.sortFiles();
                    } else {
                        FileObject[] children = directoryFileObject.getChildren();
                        for (int j = 0; j < children.length; j++) {
                            // See if the wildcard (regexp) matches...
                            String name = children[j].getName().getBaseName();
                            boolean matches = true;
                            if (!Const.isEmpty(onemask)) {
                                matches = Pattern.matches(onemask, name);
                            }
                            boolean excludematches = false;
                            if (!Const.isEmpty(excludeonemask)) {
                                excludematches = Pattern.matches(excludeonemask, name);
                            }
                            if (matches && !excludematches) {
                                fileInputList.addFile(children[j]);
                            }

                        }
                        // We don't sort here, keep the order of the files in the archive.
                    }
                }
            } catch (Exception e) {
                if (onerequired) {
                    fileInputList.addNonAccessibleFile(new NonAccessibleFileObject(onefile));
                }
                log.logError(Const.getStackTracker(e));
            }
        } else { // A normal file...

            try {
                FileObject fileObject = KettleVFS.getFileObject(onefile, space);
                if (fileObject.exists()) {
                    if (fileObject.isReadable()) {
                        fileInputList.addFile(fileObject);
                    } else {
                        if (onerequired) {
                            fileInputList.addNonAccessibleFile(fileObject);
                        }
                    }
                } else {
                    if (onerequired) {
                        fileInputList.addNonExistantFile(fileObject);
                    }
                }
            } catch (Exception e) {
                if (onerequired) {
                    fileInputList.addNonAccessibleFile(new NonAccessibleFileObject(onefile));
                }
                log.logError(Const.getStackTracker(e));
            }
        }
    }

    return fileInputList;
}

From source file:org.pentaho.di.core.fileinput.FileInputList.java

public static FileInputList createFolderList(VariableSpace space, String[] folderName,
        String[] folderRequired) {
    FileInputList fileInputList = new FileInputList();

    // Replace possible environment variables...
    final String[] realfolder = space.environmentSubstitute(folderName);

    for (int i = 0; i < realfolder.length; i++) {
        final String onefile = realfolder[i];
        final boolean onerequired = YES.equalsIgnoreCase(folderRequired[i]);
        final boolean subdirs = true;
        final FileTypeFilter filter = FileTypeFilter.ONLY_FOLDERS;

        if (Const.isEmpty(onefile)) {
            continue;
        }//from www  .  j  a  v a2s.  co  m
        FileObject directoryFileObject = null;

        try {
            // Find all folder names in this directory
            //
            directoryFileObject = KettleVFS.getFileObject(onefile, space);
            if (directoryFileObject != null && directoryFileObject.getType() == FileType.FOLDER) // it's a directory
            {

                FileObject[] fileObjects = directoryFileObject.findFiles(new AllFileSelector() {
                    @Override
                    public boolean traverseDescendents(FileSelectInfo info) {
                        return info.getDepth() == 0 || subdirs;
                    }

                    @Override
                    public boolean includeFile(FileSelectInfo info) {
                        // Never return the parent directory of a file list.
                        if (info.getDepth() == 0) {
                            return false;
                        }

                        FileObject fileObject = info.getFile();
                        try {
                            if (fileObject != null && filter.isFileTypeAllowed(fileObject.getType())) {
                                return true;
                            }
                            return false;
                        } catch (IOException ex) {
                            // Upon error don't process the file.
                            return false;
                        }
                    }
                });
                if (fileObjects != null) {
                    for (int j = 0; j < fileObjects.length; j++) {
                        if (fileObjects[j].exists()) {
                            fileInputList.addFile(fileObjects[j]);
                        }
                    }
                }
                if (Const.isEmpty(fileObjects)) {
                    if (onerequired) {
                        fileInputList.addNonAccessibleFile(directoryFileObject);
                    }
                }

                // Sort the list: quicksort, only for regular files
                fileInputList.sortFiles();
            } else {
                if (onerequired && !directoryFileObject.exists()) {
                    fileInputList.addNonExistantFile(directoryFileObject);
                }
            }
        } catch (Exception e) {
            log.logError(Const.getStackTracker(e));
        } finally {
            try {
                if (directoryFileObject != null) {
                    directoryFileObject.close();
                }
                directoryFileObject = null;
            } catch (Exception e) {
                // Ignore
            }
        }
    }

    return fileInputList;
}

From source file:org.pentaho.di.core.plugins.BasePluginType.java

protected List<FileObject> findPluginFiles(String folder, final String regex) {

    List<FileObject> list = new ArrayList<FileObject>();
    try {/* w w w  .  j a  va 2 s.c  o  m*/
        FileObject folderObject = KettleVFS.getFileObject(folder);
        FileObject[] files = folderObject.findFiles(new FileSelector() {

            @Override
            public boolean traverseDescendents(FileSelectInfo fileSelectInfo) throws Exception {
                return true;
            }

            @Override
            public boolean includeFile(FileSelectInfo fileSelectInfo) throws Exception {
                return fileSelectInfo.getFile().toString().matches(regex);
            }
        });
        if (files != null) {
            for (FileObject file : files) {
                list.add(file);
            }
        }
    } catch (Exception e) {
        // ignore this: unknown folder, insufficient permissions, etc
    }
    return list;
}

From source file:org.pentaho.di.core.plugins.PluginFolder.java

public FileObject[] findJarFiles(final boolean includeLibJars) throws KettleFileException {

    try {/*from   w  w w. j ava  2s . com*/
        // Find all the jar files in this folder...
        //
        FileObject folderObject = KettleVFS.getFileObject(this.getFolder());
        FileObject[] fileObjects = folderObject.findFiles(new FileSelector() {
            @Override
            public boolean traverseDescendents(FileSelectInfo fileSelectInfo) throws Exception {
                FileObject fileObject = fileSelectInfo.getFile();
                String folder = fileObject.getName().getBaseName();
                FileObject kettleIgnore = fileObject.getChild(".kettle-ignore");
                return includeLibJars || (kettleIgnore == null && !"lib".equals(folder));
            }

            @Override
            public boolean includeFile(FileSelectInfo fileSelectInfo) throws Exception {
                return fileSelectInfo.getFile().toString().endsWith(".jar");
            }
        });

        return fileObjects;
    } catch (Exception e) {
        throw new KettleFileException("Unable to list jar files in plugin folder '" + toString() + "'", e);
    }
}

From source file:org.pentaho.di.job.entries.addresultfilenames.JobEntryAddResultFilenames.java

private boolean processFile(String filename, String wildcard, Job parentJob, Result result) {

    boolean rcode = true;
    FileObject filefolder = null;
    String realFilefoldername = environmentSubstitute(filename);
    String realwildcard = environmentSubstitute(wildcard);

    try {/*from  w  w w.j  a  v a  2s .  c o  m*/
        filefolder = KettleVFS.getFileObject(realFilefoldername, this);

        if (filefolder.exists()) {
            // the file or folder exists

            if (filefolder.getType() == FileType.FILE) {
                // Add filename to Resultfilenames ...
                if (log.isDetailed()) {
                    logDetailed(BaseMessages.getString(PKG, "JobEntryAddResultFilenames.AddingFileToResult",
                            filefolder.toString()));
                }
                ResultFile resultFile = new ResultFile(ResultFile.FILE_TYPE_GENERAL,
                        KettleVFS.getFileObject(filefolder.toString(), this), parentJob.getJobname(),
                        toString());
                result.getResultFiles().put(resultFile.getFile().toString(), resultFile);
            } else {
                FileObject[] list = filefolder
                        .findFiles(new TextFileSelector(filefolder.toString(), realwildcard));

                for (int i = 0; i < list.length && !parentJob.isStopped(); i++) {
                    // Add filename to Resultfilenames ...
                    if (log.isDetailed()) {
                        logDetailed(BaseMessages.getString(PKG, "JobEntryAddResultFilenames.AddingFileToResult",
                                list[i].toString()));
                    }
                    ResultFile resultFile = new ResultFile(ResultFile.FILE_TYPE_GENERAL,
                            KettleVFS.getFileObject(list[i].toString(), this), parentJob.getJobname(),
                            toString());
                    result.getResultFiles().put(resultFile.getFile().toString(), resultFile);
                }
            }

        } else {
            // File can not be found
            if (log.isBasic()) {
                logBasic(BaseMessages.getString(PKG, "JobEntryAddResultFilenames.FileCanNotbeFound",
                        realFilefoldername));
            }
            rcode = false;
        }
    } catch (Exception e) {
        rcode = false;
        logError(BaseMessages.getString(PKG, "JobEntryAddResultFilenames.CouldNotProcess", realFilefoldername,
                e.getMessage()), e);
    } finally {
        if (filefolder != null) {
            try {
                filefolder.close();
                filefolder = null;
            } catch (IOException ex) {
                // Ignore
            }
        }
    }

    return rcode;
}

From source file:org.pentaho.di.job.entries.checkfilelocked.JobEntryCheckFilesLocked.java

private void ProcessFile(String filename, String wildcard) {

    FileObject filefolder = null;
    String realFilefoldername = environmentSubstitute(filename);
    String realwilcard = environmentSubstitute(wildcard);

    try {/*from  w w  w  .  java 2s . c o m*/
        filefolder = KettleVFS.getFileObject(realFilefoldername);
        FileObject[] files = new FileObject[] { filefolder };
        if (filefolder.exists()) {
            // the file or folder exists
            if (filefolder.getType() == FileType.FOLDER) {
                // It's a folder
                if (isDetailed()) {
                    logDetailed(BaseMessages.getString(PKG, "JobEntryCheckFilesLocked.ProcessingFolder",
                            realFilefoldername));
                }
                // Retrieve all files
                files = filefolder.findFiles(new TextFileSelector(filefolder.toString(), realwilcard));

                if (isDetailed()) {
                    logDetailed(BaseMessages.getString(PKG, "JobEntryCheckFilesLocked.TotalFilesToCheck",
                            String.valueOf(files.length)));
                }
            } else {
                // It's a file
                if (isDetailed()) {
                    logDetailed(BaseMessages.getString(PKG, "JobEntryCheckFilesLocked.ProcessingFile",
                            realFilefoldername));
                }
            }
            // Check files locked
            checkFilesLocked(files);
        } else {
            // We can not find thsi file
            logBasic(BaseMessages.getString(PKG, "JobEntryCheckFilesLocked.FileNotExist", realFilefoldername));
        }
    } catch (Exception e) {
        logError(BaseMessages.getString(PKG, "JobEntryCheckFilesLocked.CouldNotProcess", realFilefoldername,
                e.getMessage()));
    } finally {
        if (filefolder != null) {
            try {
                filefolder.close();
            } catch (IOException ex) {
                // Ignore
            }
        }
    }
}