/** Returns the blob's name. */ public String getName() { return getBlobId().getName(); }
@Override public String toString() { return MoreObjects.toStringHelper(this) .add("bucket", getBucket()) .add("name", getName()) .add("generation", getGeneration()) .toString(); }
public void run(Storage storage, BlobId... blobIds) { if (blobIds.length == 1) { if (blobIds[0].getName().isEmpty()) {
@Override public Object fileKey() { return info.getBlobId().getBucket() + info.getBlobId().getName() + info.getBlobId().getGeneration(); }
/** * Sets the ACL according to the provided {@code params}, using the {@code storage} service. If * {@code params.x()} returns a complete blob identity, the {@code params.y()} ACL is added to * the blob. If {@code params.x().name()} is empty, the {@code params.y()} ACL is added to the * bucket identified by {@code params.x().bucket()}. */ @Override public void run(Storage storage, Tuple<BlobId, Acl> params) { BlobId blobId = params.x(); Acl acl = params.y(); if (blobId.getName().isEmpty()) { Bucket bucket = storage.get(blobId.getBucket()); if (bucket == null) { System.out.printf("Bucket %s does not exist%n", blobId.getBucket()); return; } acl = bucket.createAcl(acl); System.out.printf("Added ACL %s to bucket %s%n", acl, blobId.getBucket()); } else { Blob blob = storage.get(blobId); if (blob == null) { System.out.printf("Blob %s does not exist%n", blobId); return; } acl = blob.createAcl(acl); System.out.printf("Added ACL %s to blob %s%n", acl, blobId); } } }
@Override public void run(Storage storage, Tuple<BlobId, Path> tuple) throws IOException { run(storage, tuple.x().getBucket(), tuple.x().getName(), tuple.y()); }
@Override public List<Acl> listAcls(final BlobId blob) { try { List<ObjectAccessControl> answer = runWithRetries( new Callable<List<ObjectAccessControl>>() { @Override public List<ObjectAccessControl> call() { return storageRpc.listAcls( blob.getBucket(), blob.getName(), blob.getGeneration()); } }, getOptions().getRetrySettings(), EXCEPTION_HANDLER, getOptions().getClock()); return Lists.transform(answer, Acl.FROM_OBJECT_PB_FUNCTION); } catch (RetryHelperException e) { throw StorageException.translateAndThrow(e); } }
String.format("gs://%s/%s", file.getBucket(), file.getName()));
@Test public void testGetGcsFilename_stripsPrefixSlash() throws IOException { try (CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("doodle")) { assertThat(fs.getPath("/hi").getBlobId().getName()).isEqualTo("hi"); } }
@Test public void testGetGcsFilename_overrideStripPrefixSlash_doesntStripPrefixSlash() throws IOException { try (CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("doodle", stripPrefixSlash(false))) { assertThat(fs.getPath("/hi").getBlobId().getName()).isEqualTo("/hi"); } }
@Test public void testGetGcsFilename_overridepermitEmptyPathComponents() throws IOException { try (CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("doodle", permitEmptyPathComponents(true))) { assertThat(fs.getPath("a//b").getBlobId().getName()).isEqualTo("a//b"); } }
@Test public void testOf() { BlobId blobId = BlobId.of("b", "n"); assertEquals("b", blobId.getBucket()); assertEquals("n", blobId.getName()); }
@Test public void testGetGcsFilename_extraSlashes_throwsIae() throws IOException { try (CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("doodle")) { thrown.expect(IllegalArgumentException.class); fs.getPath("a//b").getBlobId().getName(); } }
@Test public void testGetGcsFilename_freaksOutOnExtraSlashesAndDotDirs() throws IOException { try (CloudStorageFileSystem fs = CloudStorageFileSystem.forBucket("doodle")) { thrown.expect(IllegalArgumentException.class); fs.getPath("a//b/..").getBlobId().getName(); } }
@Override public Acl createAcl(final BlobId blob, final Acl acl) { final ObjectAccessControl aclPb = acl.toObjectPb() .setBucket(blob.getBucket()) .setObject(blob.getName()) .setGeneration(blob.getGeneration()); try { return Acl.fromPb( runWithRetries( new Callable<ObjectAccessControl>() { @Override public ObjectAccessControl call() { return storageRpc.createAcl(aclPb); } }, getOptions().getRetrySettings(), EXCEPTION_HANDLER, getOptions().getClock())); } catch (RetryHelperException e) { throw StorageException.translateAndThrow(e); } }
@Override public Acl updateAcl(BlobId blob, Acl acl) { final ObjectAccessControl aclPb = acl.toObjectPb() .setBucket(blob.getBucket()) .setObject(blob.getName()) .setGeneration(blob.getGeneration()); try { return Acl.fromPb( runWithRetries( new Callable<ObjectAccessControl>() { @Override public ObjectAccessControl call() { return storageRpc.patchAcl(aclPb); } }, getOptions().getRetrySettings(), EXCEPTION_HANDLER, getOptions().getClock())); } catch (RetryHelperException e) { throw StorageException.translateAndThrow(e); } }
blobInfo, Storage.BlobTargetOption.predefinedAcl((Storage.PredefinedAcl) getValue())); case IF_GENERATION_MATCH: blobId = BlobId.of(blobId.getBucket(), blobId.getName(), (Long) getValue()); return Tuple.of( blobInfo.toBuilder().setBlobId(blobId).build(), Storage.BlobTargetOption.generationMatch()); case IF_GENERATION_NOT_MATCH: blobId = BlobId.of(blobId.getBucket(), blobId.getName(), (Long) getValue()); return Tuple.of( blobInfo.toBuilder().setBlobId(blobId).build(),
@Test public void testGet() { EasyMock.reset(batchMock); Capture<RpcBatch.Callback<StorageObject>> callback = Capture.newInstance(); batchMock.addGet( EasyMock.eq(BLOB_INFO.toPb()), EasyMock.capture(callback), EasyMock.eq(ImmutableMap.<StorageRpc.Option, Object>of())); EasyMock.replay(batchMock); StorageBatchResult<Blob> batchResult = storageBatch.get(BLOB_ID.getBucket(), BLOB_ID.getName()); assertNotNull(callback.getValue()); try { batchResult.get(); fail("No result available yet."); } catch (IllegalStateException ex) { // expected } // testing error here, success is tested with options RpcBatch.Callback<StorageObject> capturedCallback = callback.getValue(); capturedCallback.onFailure(GOOGLE_JSON_ERROR); try { batchResult.get(); fail("Should throw a StorageExcetion on error."); } catch (StorageException ex) { // expected } }
@Test public void testDelete() { EasyMock.reset(batchMock); Capture<RpcBatch.Callback<Void>> callback = Capture.newInstance(); batchMock.addDelete( EasyMock.eq(BLOB_INFO.toPb()), EasyMock.capture(callback), EasyMock.eq(ImmutableMap.<StorageRpc.Option, Object>of())); EasyMock.replay(batchMock); StorageBatchResult<Boolean> batchResult = storageBatch.delete(BLOB_ID.getBucket(), BLOB_ID.getName()); assertNotNull(callback.getValue()); try { batchResult.get(); fail("No result available yet."); } catch (IllegalStateException ex) { // expected } // testing error here, success is tested with options RpcBatch.Callback<Void> capturedCallback = callback.getValue(); capturedCallback.onFailure(GOOGLE_JSON_ERROR); try { batchResult.get(); fail("Should throw a StorageExcetion on error."); } catch (StorageException ex) { // expected } }