public ResourceMetadata getResourceMetadata()

in transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPMetadataCollector.java [63:121]


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

        ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();
        try (SSHClient sshClient = getSSHClient(scpStorage, scpSecret)) {
            try (SFTPClient sftpClient = sshClient.newSFTPClient()) {

                if (sftpClient.statExistence(resourcePath) == null) {
                    resourceBuilder.setError(MetadataFetchError.NOT_FOUND);
                    return resourceBuilder.build();
                }

                FileAttributes lstat = sftpClient.lstat(resourcePath);


                if (lstat.getType() == FileMode.Type.REGULAR) {
                    FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                    fileBuilder.setResourceSize(lstat.getSize());
                    fileBuilder.setCreatedTime(lstat.getAtime());
                    fileBuilder.setUpdateTime(lstat.getMtime());
                    fileBuilder.setFriendlyName(new File(resourcePath).getName());
                    fileBuilder.setResourcePath(resourcePath);
                    resourceBuilder.setFile(fileBuilder);
                } else if (lstat.getType() == FileMode.Type.DIRECTORY) {

                    DirectoryMetadata.Builder dirBuilder = DirectoryMetadata.newBuilder();
                    dirBuilder.setResourcePath(resourcePath);
                    dirBuilder.setFriendlyName(new File(resourcePath).getName());
                    dirBuilder.setUpdateTime(lstat.getMtime());
                    dirBuilder.setCreatedTime(lstat.getAtime());

                    List<RemoteResourceInfo> dirList = sftpClient.ls(resourcePath);
                    for (RemoteResourceInfo rr: dirList) {
                        if (rr.isDirectory()) {
                            DirectoryMetadata.Builder subDir = DirectoryMetadata.newBuilder();
                            subDir.setResourcePath(rr.getPath());
                            subDir.setFriendlyName(rr.getName());
                            subDir.setCreatedTime(rr.getAttributes().getAtime());
                            subDir.setUpdateTime(rr.getAttributes().getMtime());
                            dirBuilder.addDirectories(subDir);
                        } else {
                            FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                            fileBuilder.setResourceSize(rr.getAttributes().getSize());
                            fileBuilder.setCreatedTime(rr.getAttributes().getAtime());
                            fileBuilder.setUpdateTime(rr.getAttributes().getMtime());
                            fileBuilder.setFriendlyName(rr.getName());
                            fileBuilder.setResourcePath(rr.getPath());
                            dirBuilder.addFiles(fileBuilder);
                        }
                    }
                    resourceBuilder.setDirectory(dirBuilder);

                } else {
                    resourceBuilder.setError(MetadataFetchError.UNRECOGNIZED);
                }
            }
        }

        return resourceBuilder.build();
    }