public ResourceMetadata getResourceMetadata()

in transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxMetadataCollector.java [51:115]


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

        checkInitialized();

        BoxAPIConnection api = new BoxAPIConnection(boxSecret.getAccessToken());

        BoxFile boxFile = null;
        BoxFile.Info boxFileInfo = null;
        BoxFolder boxFolder = null;
        BoxFolder.Info boxFolderInfo;
        boolean isFile = true;

        ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();

        try { // There is no API to derive the type of entry. So, manually checking the file type is used
            boxFile = new BoxFile(api, resourcePath);
            boxFileInfo = boxFile.getInfo();
        } catch (BoxAPIException e) {
            try {
                boxFolder = new BoxFolder(api, resourcePath);
                boxFolderInfo = boxFolder.getInfo();
                isFile = false;
            } catch (BoxAPIException ex) {
                logger.error("Failed to fetch information of box item {}", resourcePath, ex);
                resourceBuilder.setError(MetadataFetchError.NOT_FOUND);
                return resourceBuilder.build();
            }
        }

        if (isFile) {
            FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
            fileBuilder.setResourcePath(resourcePath);
            fileBuilder.setFriendlyName(boxFileInfo.getName());
            fileBuilder.setResourceSize(boxFileInfo.getSize());
            fileBuilder.setCreatedTime(boxFileInfo.getCreatedAt().getTime());
            fileBuilder.setUpdateTime(boxFileInfo.getModifiedAt().getTime());
            resourceBuilder.setFile(fileBuilder);
        } else {
            DirectoryMetadata.Builder dirBuilder = DirectoryMetadata.newBuilder();

            Iterable<BoxItem.Info> itemsInFolder = boxFolder.getChildren("metadata.global.properties");
            for (BoxItem.Info itemInfo : itemsInFolder) {
                if (itemInfo instanceof BoxFile.Info) {
                    BoxFile.Info fileInfo = (BoxFile.Info) itemInfo;
                    FileMetadata.Builder fileBuilder = FileMetadata.newBuilder();
                    fileBuilder.setResourcePath(fileInfo.getID());
                    fileBuilder.setFriendlyName(fileInfo.getName());
                    fileBuilder.setResourceSize(fileInfo.getSize());
                    fileBuilder.setCreatedTime(fileInfo.getCreatedAt().getTime());
                    fileBuilder.setUpdateTime(fileInfo.getModifiedAt().getTime());
                    dirBuilder.addFiles(fileBuilder);
                } else if (itemInfo instanceof BoxFolder.Info) {
                    BoxFolder.Info folderInfo = (BoxFolder.Info) itemInfo;
                    DirectoryMetadata.Builder subDirBuilder = DirectoryMetadata.newBuilder();
                    subDirBuilder.setFriendlyName(folderInfo.getName());
                    subDirBuilder.setResourcePath(folderInfo.getID());
                    subDirBuilder.setCreatedTime(folderInfo.getCreatedAt().getTime());
                    subDirBuilder.setUpdateTime(folderInfo.getModifiedAt().getTime());
                    dirBuilder.addDirectories(subDirBuilder);
                }
            }
            resourceBuilder.setDirectory(dirBuilder);
        }
        return resourceBuilder.build();
    }