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();
}