public ResourceMetadata getResourceMetadata()

in transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxMetadataCollector.java [53:133]


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

        DbxRequestConfig config = DbxRequestConfig.newBuilder("mftdropbox/v1").build();
        DbxClientV2 dbxClientV2 = new DbxClientV2(config, dropboxSecret.getAccessToken());

        ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();

        if (resourcePath.isEmpty()) { // List root folder
            ListFolderResult listFolderResult = dbxClientV2.files().listFolder(resourcePath);
            List<Metadata> entryMetadatas = listFolderResult.getEntries();
            DirectoryMetadata.Builder directoryBuilder = DirectoryMetadata.newBuilder();
            directoryBuilder.setResourcePath("");
            directoryBuilder.setFriendlyName("");

            entryMetadatas.forEach(entryMetadata -> {
                if (entryMetadata instanceof com.dropbox.core.v2.files.FileMetadata) {
                    com.dropbox.core.v2.files.FileMetadata fileMetadata = (com.dropbox.core.v2.files.FileMetadata) entryMetadata;
                    FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                    fileBuilder.setResourceSize(fileMetadata.getSize());
                    fileBuilder.setUpdateTime(fileMetadata.getServerModified().getTime());
                    fileBuilder.setCreatedTime(fileMetadata.getClientModified().getTime());
                    fileBuilder.setFriendlyName(fileMetadata.getName());
                    fileBuilder.setResourcePath(resourcePath);
                    directoryBuilder.addFiles(fileBuilder);
                } else if (entryMetadata instanceof FolderMetadata) {
                    FolderMetadata folderMetadata = (FolderMetadata) entryMetadata;
                    DirectoryMetadata.Builder subDirBuilder = DirectoryMetadata.newBuilder();
                    subDirBuilder.setFriendlyName(folderMetadata.getName());
                    subDirBuilder.setResourcePath(folderMetadata.getName());
                    directoryBuilder.addDirectories(subDirBuilder);
                }
            });

            resourceBuilder.setDirectory(directoryBuilder);

        } else {
            Metadata entryMetadata = dbxClientV2.files().getMetadata(resourcePath);
            if (entryMetadata instanceof com.dropbox.core.v2.files.FileMetadata) {
                com.dropbox.core.v2.files.FileMetadata fileMetadata = (com.dropbox.core.v2.files.FileMetadata) entryMetadata;
                FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                fileBuilder.setResourceSize(fileMetadata.getSize());
                fileBuilder.setUpdateTime(fileMetadata.getServerModified().getTime());
                fileBuilder.setCreatedTime(fileMetadata.getClientModified().getTime());
                fileBuilder.setFriendlyName(fileMetadata.getName());
                fileBuilder.setResourcePath(resourcePath);
                resourceBuilder.setFile(fileBuilder);
            } else if (entryMetadata instanceof FolderMetadata) {

                ListFolderResult listFolderResult = dbxClientV2.files().listFolder(resourcePath);
                List<Metadata> entryMetadatas = listFolderResult.getEntries();
                DirectoryMetadata.Builder directoryBuilder = DirectoryMetadata.newBuilder();
                directoryBuilder.setResourcePath(resourcePath);
                directoryBuilder.setFriendlyName(entryMetadata.getName());

                entryMetadatas.forEach(em -> {
                    if (em instanceof com.dropbox.core.v2.files.FileMetadata) {
                        com.dropbox.core.v2.files.FileMetadata fileMetadata = (com.dropbox.core.v2.files.FileMetadata) em;
                        FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                        fileBuilder.setResourceSize(fileMetadata.getSize());
                        fileBuilder.setUpdateTime(fileMetadata.getServerModified().getTime());
                        fileBuilder.setCreatedTime(fileMetadata.getClientModified().getTime());
                        fileBuilder.setFriendlyName(fileMetadata.getName());
                        fileBuilder.setResourcePath(resourcePath + "/" + fileMetadata.getName());
                        directoryBuilder.addFiles(fileBuilder);
                    } else if (em instanceof FolderMetadata) {
                        FolderMetadata folderMetadata = (FolderMetadata) em;
                        DirectoryMetadata.Builder subDirBuilder = DirectoryMetadata.newBuilder();
                        subDirBuilder.setFriendlyName(folderMetadata.getName());
                        subDirBuilder.setResourcePath(resourcePath + "/" + folderMetadata.getName());
                        directoryBuilder.addDirectories(subDirBuilder);
                    }
                    resourceBuilder.setDirectory(directoryBuilder);
                });
            } else {
                resourceBuilder.setError(MetadataFetchError.NOT_FOUND);
            }
        }

        return resourceBuilder.build();
    }