public ResourceMetadata getResourceMetadata()

in transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPMetadataCollector.java [51:104]


    public ResourceMetadata getResourceMetadata(String resourcePath, boolean recursiveSearch) throws Exception {

        checkInitialized();
        ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();
        FTPClient ftpClient = null;
        try {
            ftpClient = FTPTransportUtil.getFTPClient(ftpStorage, ftpSecret);
            logger.info("Fetching metadata for resource {} in {}", resourcePath, ftpStorage.getHost());

            FTPFile ftpFile = ftpClient.mlistFile(resourcePath);
            if (ftpFile == null) {
                resourceBuilder.setError(MetadataFetchError.NOT_FOUND);
                return resourceBuilder.build();
            }

            if (ftpFile.isDirectory()) {

                DirectoryMetadata.Builder dirBuilder = DirectoryMetadata.newBuilder();
                FTPFile[] ftpFiles = ftpClient.listFiles(resourcePath);
                Arrays.stream(ftpFiles).forEach(child -> {
                    if (child.isFile()) {
                        FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                        fileBuilder.setResourcePath(resourcePath + "/" + child.getName());
                        fileBuilder.setFriendlyName(child.getName());
                        fileBuilder.setCreatedTime(child.getTimestamp().getTimeInMillis());
                        fileBuilder.setUpdateTime(child.getTimestamp().getTimeInMillis());
                        fileBuilder.setResourceSize(child.getSize());
                        dirBuilder.addFiles(fileBuilder);
                    } else if (child.isFile()) {
                        DirectoryMetadata.Builder childDirBuilder = DirectoryMetadata.newBuilder();
                        childDirBuilder.setResourcePath(resourcePath + "/" + child.getName());
                        childDirBuilder.setFriendlyName(child.getName());
                        childDirBuilder.setCreatedTime(child.getTimestamp().getTimeInMillis());
                        childDirBuilder.setUpdateTime(child.getTimestamp().getTimeInMillis());
                        dirBuilder.addDirectories(childDirBuilder);
                    }
                });
                resourceBuilder.setDirectory(dirBuilder);
            } else if (ftpFile.isFile()) {
                FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                fileBuilder.setResourcePath(resourcePath);
                fileBuilder.setFriendlyName(ftpFile.getName());
                fileBuilder.setCreatedTime(ftpFile.getTimestamp().getTimeInMillis());
                fileBuilder.setUpdateTime(ftpFile.getTimestamp().getTimeInMillis());
                fileBuilder.setResourceSize(ftpFile.getSize());
                resourceBuilder.setFile(fileBuilder);
            }

            return resourceBuilder.build();

        } finally {
            FTPTransportUtil.disconnectFTP(ftpClient);
        }
    }