/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { // TODO: recursive? if (!Strings.nullToEmpty(options.getDelimiter()).equals("/") && !Strings.isNullOrEmpty(options.getPrefix())) { throw new IllegalArgumentException("Atmos can only list via prefix if delimiter is / and the prefix matches an existing directory"); } container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); if (!Strings.isNullOrEmpty(options.getPrefix())) { // this only works when the prefix exactly matches a directory, the common usage container += "/" + options.getPrefix(); } ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { // TODO: recursive? if (!Strings.nullToEmpty(options.getDelimiter()).equals("/") && !Strings.isNullOrEmpty(options.getPrefix())) { throw new IllegalArgumentException("Atmos can only list via prefix if delimiter is / and the prefix matches an existing directory"); } container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); if (!Strings.isNullOrEmpty(options.getPrefix())) { // this only works when the prefix exactly matches a directory, the common usage container += "/" + options.getPrefix(); } ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
/** * This implementation invokes {@link AtmosClient#listDirectory} */ @Override public PageSet<? extends StorageMetadata> list(String container, org.jclouds.blobstore.options.ListContainerOptions options) { container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options); ListOptions nativeOptions = container2ContainerListOptions.apply(options); // until includeMeta() option works for namespace interface PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container, nativeOptions)); return options.isDetailed() ? fetchBlobMetadataProvider.get().setContainerName(container).apply(list) : list; }
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateDirectory" }) public void testListOptions() throws Exception { createOrReplaceObject("object2", "here is my data!", "meta-value1"); createOrReplaceObject("object3", "here is my data!", "meta-value1"); createOrReplaceObject("object4", "here is my data!", "meta-value1"); BoundedSet<? extends DirectoryEntry> r2 = getApi().listDirectory(privateDirectory, ListOptions.Builder.limit(1)); assertEquals(r2.size(), 1); assert r2.getToken() != null; assertEquals(Iterables.getLast(Sets.newTreeSet(r2)).getObjectName(), "object2"); r2 = getApi().listDirectory(privateDirectory, ListOptions.Builder.token(r2.getToken())); assertEquals(r2.size(), 2); assert r2.getToken() == null; assertEquals(Iterables.getLast(Sets.newTreeSet(r2)).getObjectName(), "object4"); }
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = { "testCreateDirectory" }) public void testListOptions() throws Exception { String data = "here is my data!"; HashCode hashCode = Hashing.md5().hashString(data, UTF_8); createOrReplaceObject("object2", data, hashCode, "meta-value1"); createOrReplaceObject("object3", data, hashCode, "meta-value1"); createOrReplaceObject("object4", data, hashCode, "meta-value1"); BoundedSet<? extends DirectoryEntry> r2 = getApi().listDirectory(privateDirectory, ListOptions.Builder.limit(1)); assertEquals(r2.size(), 1); assert r2.getToken() != null; assertEquals(Iterables.getLast(Sets.newTreeSet(r2)).getObjectName(), "object2"); r2 = getApi().listDirectory(privateDirectory, ListOptions.Builder.token(r2.getToken())); assertEquals(r2.size(), 2); assert r2.getToken() == null; assertEquals(Iterables.getLast(Sets.newTreeSet(r2)).getObjectName(), "object4"); }
@Test(timeOut = 5 * 60 * 1000) public void testCreateDirectory() throws Exception { boolean created = false; while (!created) { privateDirectory = containerPrefix + new SecureRandom().nextInt(); try { created = getApi().createDirectory(privateDirectory) != null; } catch (UndeclaredThrowableException e) { HttpResponseException htpe = (HttpResponseException) e.getCause().getCause(); if (htpe.getResponse().getStatusCode() == 409) continue; throw e; } } BoundedSet<? extends DirectoryEntry> response = getApi().listDirectories(); for (DirectoryEntry id : response) { BoundedSet<? extends DirectoryEntry> r2 = getApi().listDirectory(id.getObjectName()); assert r2 != null; } }
@Test(timeOut = 5 * 60 * 1000) public void testCreateDirectory() throws Exception { boolean created = false; while (!created) { privateDirectory = containerPrefix + new SecureRandom().nextInt(); try { created = getApi().createDirectory(privateDirectory) != null; } catch (UndeclaredThrowableException e) { HttpResponseException htpe = (HttpResponseException) e.getCause().getCause(); if (htpe.getResponse().getStatusCode() == 409) continue; throw e; } } BoundedSet<? extends DirectoryEntry> response = getApi().listDirectories(); for (DirectoryEntry id : response) { BoundedSet<? extends DirectoryEntry> r2 = getApi().listDirectory(id.getObjectName()); assert r2 != null; } // subsequent creation should fail assertNull(getApi().createDirectory(privateDirectory)); }