public static Stream<CloudBlob> getBlobs(CloudBlobDirectory directory) throws IOException { try { return StreamSupport.stream(directory.listBlobs(null, false, EnumSet.of(BlobListingDetails.METADATA), null, null).spliterator(), false) .filter(i -> i instanceof CloudBlob) .map(i -> (CloudBlob) i); } catch (StorageException | URISyntaxException e) { throw new IOException(e); } }
/** * Returns a reference to a {@link CloudBlockBlob} object that represents a block blob in this directory. * * @param blobName * A <code>String</code> that represents the name of the blob. * * @return A {@link CloudBlockBlob} object that represents a reference to the specified block blob. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */ public CloudBlockBlob getBlockBlobReference(final String blobName) throws URISyntaxException, StorageException { return this.getBlockBlobReference(blobName, null); }
/** * Returns a result segment of an enumerable collection of blob items in the directory. * * @return A {@link ResultSegment} object that contains a segment of the enumerable collection of * {@link ListBlobItem} objects that represent the blob items in the directory. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */ @DoesServiceRequest public ResultSegment<ListBlobItem> listBlobsSegmented() throws StorageException, URISyntaxException { return this.getContainer().listBlobsSegmented(this.getPrefix()); }
@Override public boolean segmentFilesExist() { try { for (ListBlobItem i : segmentstoreDirectory.listBlobs(null, false, EnumSet.noneOf(BlobListingDetails.class), null, null)) { if (i instanceof CloudBlobDirectory) { CloudBlobDirectory dir = (CloudBlobDirectory) i; String name = Paths.get(dir.getPrefix()).getFileName().toString(); if (name.endsWith(".tar")) { return true; } } } return false; } catch (StorageException | URISyntaxException e) { log.error("Can't check if the segment archives exists", e); return false; } }
CloudPageBlob pageBlob = dir1.getPageBlobReference("PageBlob"); pageBlob.create(0); assertTrue(pageBlob.exists()); assertEquals(dir1.getContainer().getName(), pageBlob.getContainer().getName()); assertEquals(dir1.getServiceClient().getEndpoint().toString(), pageBlob.getServiceClient().getEndpoint() .toString()); assertEquals("Dir1" + delimiter + "PageBlob", pageBlob.getName()); .getPath() + "/Dir1" + delimiter + "PageBlob", null, null), pageBlob.getUri()); CloudBlobDirectory pageParent = pageBlob.getParent(); assertEquals("Dir1" + delimiter, pageParent.getPrefix()); CloudBlockBlob blockBlob = dir1.getBlockBlobReference("BlockBlob"); blockBlob.upload(BlobTestHelper.getRandomDataStream(128), 128); assertTrue(blockBlob.exists()); assertEquals(dir1.getContainer().getName(), pageBlob.getContainer().getName()); assertEquals(dir1.getServiceClient().getEndpoint().toString(), blockBlob.getServiceClient().getEndpoint() .toString()); assertEquals("Dir1" + delimiter + "BlockBlob", blockBlob.getName()); .getPath() + "/Dir1" + delimiter + "BlockBlob", null, null), blockBlob.getUri()); CloudBlobDirectory blockParent = blockBlob.getParent(); assertEquals("Dir1" + delimiter, blockParent.getPrefix()); CloudBlobDirectory subDirectory = dir1.getDirectoryReference("SubDirectory"); assertEquals(dir1.getContainer().getName(), subDirectory.getContainer().getName()); assertEquals(dir1.getServiceClient().getEndpoint().toString(), subDirectory.getServiceClient().getEndpoint() .toString()); assertEquals(new URI(container.getUri().getScheme(), container.getUri().getAuthority(), container.getUri()
private void testGetParentOnRoot(String delimiter, CloudBlobContainer container) throws URISyntaxException, StorageException { // get container as parent CloudBlobDirectory topDir = container.getDirectoryReference("TopDir1" + delimiter); CloudBlobDirectory root = topDir.getParent(); assertEquals("", root.getPrefix()); assertEquals(container.getUri().toString(), root.getUri().toString()); // make sure the parent of the container dir is null CloudBlobDirectory empty = root.getParent(); assertNull(empty); // from container, get directory reference to container root = container.getDirectoryReference(""); assertEquals("", root.getPrefix()); assertEquals(container.getUri().toString(), root.getUri().toString()); Iterable<ListBlobItem> results = root.listBlobs(); ArrayList<ListBlobItem> list1 = new ArrayList<ListBlobItem>(); Iterator<ListBlobItem> iter = results.iterator(); while (iter.hasNext()) { list1.add(iter.next()); } assertEquals(2, list1.size()); // make sure the parent of the container dir is null empty = root.getParent(); assertNull(empty); }
private void testGetSubdirectoryAndTraverseBackToParent(String delimiter, CloudBlobContainer container) throws URISyntaxException, StorageException { CloudBlobDirectory directory = container.getDirectoryReference("TopDir1" + delimiter); CloudBlobDirectory subDirectory = directory.getDirectoryReference("MidDir1" + delimiter); CloudBlobDirectory parent = subDirectory.getParent(); assertEquals(parent.getPrefix(), directory.getPrefix()); assertEquals(parent.getUri(), directory.getUri()); }
private void testDelimitersInARow(String delimiter, CloudBlobContainer container) throws URISyntaxException, StorageException { CloudPageBlob blob = container.getPageBlobReference(delimiter + delimiter + delimiter + "Blob1"); // Traverse from leaf to root CloudBlobDirectory directory1 = blob.getParent(); assertEquals(delimiter + delimiter + delimiter, directory1.getPrefix()); CloudBlobDirectory directory2 = directory1.getParent(); assertEquals(delimiter + delimiter, directory2.getPrefix()); CloudBlobDirectory directory3 = directory2.getParent(); assertEquals(delimiter, directory3.getPrefix()); // Traverse from root to leaf CloudBlobDirectory directory4 = container.getDirectoryReference(delimiter); CloudBlobDirectory directory5 = directory4.getDirectoryReference(delimiter); assertEquals(delimiter + delimiter, directory5.getPrefix()); CloudBlobDirectory directory6 = directory5.getDirectoryReference(delimiter); assertEquals(delimiter + delimiter + delimiter, directory6.getPrefix()); CloudPageBlob blob2 = directory6.getPageBlobReference("Blob1"); assertEquals(delimiter + delimiter + delimiter + "Blob1", blob2.getName()); assertEquals(blob.getUri(), blob2.getUri()); }
/** * Returns the parent directory of this directory. * * @return A {@link CloudBlobDirectory} object that represents the parent of this directory. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */ @Override public CloudBlobDirectory getParent() throws URISyntaxException, StorageException { if (this.parent == null) { final String parentName = CloudBlob.getParentNameFromURI(this.getStorageUri(), this.blobServiceClient.getDirectoryDelimiter(), this.getContainer()); if (parentName != null) { StorageUri parentURI = PathUtility.appendPathToUri(this.container.getStorageUri(), parentName); this.parent = new CloudBlobDirectory(parentURI, parentName, this.blobServiceClient, this.getContainer()); } } return this.parent; }
@NotNull public BlobDirectory createBlobDirectory(@NotNull StorageAccount storageAccount, @NotNull BlobDirectory parentBlobDirectory, @NotNull BlobDirectory blobDirectory) throws AzureCmdException { try { CloudBlobClient client = getCloudBlobClient(storageAccount); String containerName = parentBlobDirectory.getContainerName(); CloudBlobContainer container = client.getContainerReference(containerName); CloudBlobDirectory parentDirectory = container.getDirectoryReference(parentBlobDirectory.getPath()); CloudBlobDirectory directory = parentDirectory.getDirectoryReference(blobDirectory.getName()); String uri = directory.getUri() != null ? directory.getUri().toString() : ""; String path = Strings.nullToEmpty(directory.getPrefix()); blobDirectory.setUri(uri); blobDirectory.setContainerName(containerName); blobDirectory.setPath(path); return blobDirectory; } catch (Throwable t) { throw new AzureCmdException("Error creating the Blob Directory", t); } }
@NotNull private static CloudBlob getCloudBlob(@NotNull CloudBlobDirectory parentDirectory, @NotNull BlobFile blobFile) throws URISyntaxException, StorageException { CloudBlob blob; if (blobFile.getType().equals(BlobType.BLOCK_BLOB.toString())) { blob = parentDirectory.getBlockBlobReference(blobFile.getName()); } else { blob = parentDirectory.getPageBlobReference(blobFile.getName()); } return blob; }
private void testHierarchicalTraversal(String delimiter, CloudBlobContainer container) throws StorageException, URISyntaxException { // Traverse hierarchically starting with length 1 CloudBlobDirectory directory1 = container.getDirectoryReference("Dir1" + delimiter); CloudBlobDirectory subdir1 = directory1.getDirectoryReference("Dir2"); CloudBlobDirectory parent1 = subdir1.getParent(); assertEquals(parent1.getPrefix(), directory1.getPrefix()); CloudBlobDirectory subdir2 = subdir1.getDirectoryReference("Dir3"); CloudBlobDirectory parent2 = subdir2.getParent(); assertEquals(parent2.getPrefix(), subdir1.getPrefix()); CloudBlobDirectory subdir3 = subdir2.getDirectoryReference("Dir4"); CloudBlobDirectory parent3 = subdir3.getParent(); assertEquals(parent3.getPrefix(), subdir2.getPrefix()); CloudBlobDirectory subdir4 = subdir3.getDirectoryReference("Dir5"); CloudBlobDirectory parent4 = subdir4.getParent(); assertEquals(parent4.getPrefix(), subdir3.getPrefix()); }
@Override public URI getUri() { return directory.getUri(); }
private void testParentValidate(String delimiter, CloudBlobContainer container) throws StorageException, URISyntaxException { CloudBlockBlob blob = container.getBlockBlobReference("TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir1" + delimiter + "EndBlob1"); CloudBlobDirectory directory = blob.getParent(); assertEquals("TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir1" + delimiter, directory.getPrefix()); assertEquals(new URI(container.getUri().getScheme(), container.getUri().getAuthority(), container.getUri() .getPath() + "/TopDir1" + delimiter + "MidDir1" + delimiter + "EndDir1" + delimiter, null, null), directory.getUri()); }
/** * Validate container references * * @throws StorageException * @throws URISyntaxException */ @Test @Category({ DevFabricTests.class, DevStoreTests.class }) public void testCloudBlobContainerReference() throws StorageException, URISyntaxException{ CloudBlobClient client = BlobTestHelper.createCloudBlobClient(); CloudBlobContainer container = client.getContainerReference("container"); CloudBlockBlob blockBlob = container.getBlockBlobReference("directory1/blob1"); CloudPageBlob pageBlob = container.getPageBlobReference("directory2/blob2"); CloudBlobDirectory directory = container.getDirectoryReference("directory3"); CloudBlobDirectory directory2 = directory.getDirectoryReference("directory4"); assertEquals(container.getStorageUri().toString(), blockBlob.getContainer().getStorageUri().toString()); assertEquals(container.getStorageUri().toString(), pageBlob.getContainer().getStorageUri().toString()); assertEquals(container.getStorageUri().toString(), directory.getContainer().getStorageUri().toString()); assertEquals(container.getStorageUri().toString(), directory2.getContainer().getStorageUri().toString()); assertEquals(container.getStorageUri().toString(), directory2.getParent().getContainer().getStorageUri() .toString()); assertEquals(container.getStorageUri().toString(), blockBlob.getParent().getContainer().getStorageUri() .toString()); assertEquals(container.getStorageUri().toString(), blockBlob.getParent().getContainer().getStorageUri() .toString()); }
/** * Returns a reference to a virtual blob directory beneath this directory. * * @param directoryName * A <code>String</code> that represents the name of the virtual subdirectory. * * @return A <code>CloudBlobDirectory</code> object that represents a virtual blob directory beneath this directory. * * @throws URISyntaxException * If the resource URI is invalid. */ public CloudBlobDirectory getDirectoryReference(String directoryName) throws URISyntaxException { Utility.assertNotNullOrEmpty("directoryName", directoryName); if (!directoryName.endsWith(this.blobServiceClient.getDirectoryDelimiter())) { directoryName = directoryName.concat(this.blobServiceClient.getDirectoryDelimiter()); } final String subDirName = this.getPrefix().concat(directoryName); final StorageUri address = PathUtility.appendPathToUri(this.storageUri, directoryName, this.blobServiceClient.getDirectoryDelimiter()); return new CloudBlobDirectory(address, subDirName, this.blobServiceClient, this.container, this); }
/** * Returns a reference to a {@link CloudAppendBlob} object that represents an append blob in the directory. * * @param blobName * A <code>String</code> that represents the name of the blob. * * @return A {@link CloudAppendBlob} object that represents a reference to the specified append blob. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */ public CloudAppendBlob getAppendBlobReference(final String blobName) throws URISyntaxException, StorageException { return this.getAppendBlobReference(blobName, null); }
@Override public CloudBlobContainer getContainer() throws URISyntaxException, StorageException { return directory.getContainer(); }
@Override public StorageUri getStorageUri() { return directory.getStorageUri(); } }
/** * Returns a reference to a {@link CloudPageBlob} object that represents a page blob in the directory. * * @param blobName * A <code>String</code> that represents the name of the blob. * * @return A {@link CloudPageBlob} object that represents a reference to the specified page blob. * * @throws StorageException * If a storage service error occurred. * @throws URISyntaxException * If the resource URI is invalid. */ public CloudPageBlob getPageBlobReference(final String blobName) throws URISyntaxException, StorageException { return this.getPageBlobReference(blobName, null); }