in transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java [62:128]
public ResourceMetadata getResourceMetadata(String resourcePath, boolean recursiveSearch) throws Exception {
checkInitialized();
PrivateKey privKey = GCSUtil.getPrivateKey(gcsSecret.getPrivateKey());
try (Storage storage = StorageOptions.newBuilder().setCredentials(ServiceAccountCredentials.newBuilder()
.setProjectId(gcsSecret.getProjectId())
.setPrivateKey(privKey)
.setClientEmail(gcsSecret.getClientEmail())
.build()).build().getService()) {
ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();
if (gcsStorage.getBucketName().isEmpty() && resourcePath.isEmpty()) // Load bucket list
{
Page<Bucket> buckets = storage.list();
DirectoryMetadata.Builder parentDir = DirectoryMetadata.newBuilder();
parentDir.setResourcePath("");
parentDir.setFriendlyName("");
for (Bucket b : buckets.getValues()) {
DirectoryMetadata.Builder bucketDir = DirectoryMetadata.newBuilder();
bucketDir.setFriendlyName(b.getName());
bucketDir.setResourcePath(b.getName());
bucketDir.setCreatedTime(b.getCreateTimeOffsetDateTime().getLong(ChronoField.INSTANT_SECONDS));
bucketDir.setUpdateTime(b.getUpdateTimeOffsetDateTime().getLong(ChronoField.INSTANT_SECONDS));
parentDir.addDirectories(bucketDir);
}
resourceBuilder.setDirectory(parentDir);
return resourceBuilder.build();
}
// If directory path or top level bucket path
final String dirPath = resourcePath.endsWith("/") ? resourcePath : resourcePath + "/";
if (resourcePath.endsWith("/") || resourcePath.isEmpty()) { // Directory
Page<Blob> blob = storage.list(gcsStorage.getBucketName(), Storage.BlobListOption.prefix(resourcePath), Storage.BlobListOption.currentDirectory());
resourceBuilder.setDirectory(processDirectory(resourcePath, blob));
} else {
try {
Blob blob = storage.get(gcsStorage.getBucketName(), resourcePath, Storage.BlobGetOption.fields(Storage.BlobField.values()));
if (blob != null) {
FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
fileBuilder.setFriendlyName(blob.getName());
fileBuilder.setResourcePath(resourcePath);
fileBuilder.setCreatedTime(blob.getCreateTimeOffsetDateTime().getLong(ChronoField.INSTANT_SECONDS));
fileBuilder.setUpdateTime(blob.getUpdateTimeOffsetDateTime().getLong(ChronoField.INSTANT_SECONDS));
fileBuilder.setResourceSize(blob.getSize());
fileBuilder.setMd5Sum(blob.getMd5());
resourceBuilder.setFile(fileBuilder);
} else {
Page<Blob> blobs = storage.list(gcsStorage.getBucketName(), Storage.BlobListOption.prefix(dirPath), Storage.BlobListOption.currentDirectory());
resourceBuilder.setDirectory(processDirectory(resourcePath + "/", blobs));
}
} catch (Exception e) {
resourceBuilder.setError(MetadataFetchError.NOT_FOUND);
}
}
return resourceBuilder.build();
}
}