in transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java [62:110]
public ResourceMetadata getResourceMetadata(String resourcePath, boolean recursiveSearch) throws Exception {
checkInitialized();
AmazonS3 s3Client = S3Util.getInstance().leaseS3Client(s3Secret, s3Storage);
ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();
if (s3Storage.getBucketName().isEmpty() && resourcePath.isEmpty()) {
List<Bucket> buckets = s3Client.listBuckets();
DirectoryMetadata.Builder parentDir = DirectoryMetadata.newBuilder();
parentDir.setResourcePath("");
parentDir.setFriendlyName("");
buckets.forEach(b -> {
DirectoryMetadata.Builder bucketDir = DirectoryMetadata.newBuilder();
bucketDir.setFriendlyName(b.getName());
bucketDir.setResourcePath(b.getName());
bucketDir.setCreatedTime(b.getCreationDate().getTime());
bucketDir.setUpdateTime(b.getCreationDate().getTime());
parentDir.addDirectories(bucketDir);
});
resourceBuilder.setDirectory(parentDir);
return resourceBuilder.build();
}
// If directory path or top level bucket path
if (resourcePath.endsWith("/") || resourcePath.isEmpty()) { // Directory
ObjectListing objectListing = s3Client.listObjects(s3Storage.getBucketName(), resourcePath);
resourceBuilder.setDirectory(processDirectory(resourcePath, objectListing));
} else if (s3Client.doesObjectExist(s3Storage.getBucketName(), resourcePath)){ // File
FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
ObjectMetadata fileMetadata = s3Client.getObjectMetadata(s3Storage.getBucketName(), resourcePath);
fileBuilder.setResourceSize(fileMetadata.getContentLength());
fileBuilder.setResourcePath(resourcePath);
fileBuilder.setMd5Sum(fileMetadata.getContentMD5() == null ? "" : fileMetadata.getContentMD5() );
fileBuilder.setFriendlyName(new File(resourcePath).getName());
fileBuilder.setCreatedTime(fileMetadata.getLastModified().getTime());
fileBuilder.setUpdateTime(fileMetadata.getLastModified().getTime());
resourceBuilder.setFile(fileBuilder);
} else { // Try if user forgot add trailing /
ObjectListing objectListing = s3Client.listObjects(s3Storage.getBucketName(), resourcePath + "/");
resourceBuilder.setDirectory(processDirectory(resourcePath + "/", objectListing));
}
return resourceBuilder.build();
}