@@ -235,6 +235,7 @@ public StorageObject create(StorageObject storageObject, final InputStream conte
235235 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
236236 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (options ))
237237 .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ))
238+ .setUserProject (Option .USER_PROJECT .getString (options ))
238239 .execute ();
239240 } catch (IOException ex ) {
240241 throw translate (ex );
@@ -270,6 +271,7 @@ public Tuple<String, Iterable<StorageObject>> list(final String bucket, Map<Opti
270271 .setMaxResults (Option .MAX_RESULTS .getLong (options ))
271272 .setPageToken (Option .PAGE_TOKEN .getString (options ))
272273 .setFields (Option .FIELDS .getString (options ))
274+ .setUserProject (Option .USER_PROJECT .getString (options ))
273275 .execute ();
274276 Iterable <StorageObject > storageObjects = Iterables .concat (
275277 firstNonNull (objects .getItems (), ImmutableList .<StorageObject >of ()),
@@ -304,6 +306,7 @@ public Bucket get(Bucket bucket, Map<Option, ?> options) {
304306 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
305307 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
306308 .setFields (Option .FIELDS .getString (options ))
309+ .setUserProject (Option .USER_PROJECT .getString (options ))
307310 .execute ();
308311 } catch (IOException ex ) {
309312 StorageException serviceException = translate (ex );
@@ -324,7 +327,8 @@ private Storage.Objects.Get getCall(StorageObject object, Map<Option, ?> options
324327 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
325328 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (options ))
326329 .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ))
327- .setFields (Option .FIELDS .getString (options ));
330+ .setFields (Option .FIELDS .getString (options ))
331+ .setUserProject (Option .USER_PROJECT .getString (options ));
328332 }
329333
330334 @ Override
@@ -350,6 +354,7 @@ public Bucket patch(Bucket bucket, Map<Option, ?> options) {
350354 .setPredefinedDefaultObjectAcl (Option .PREDEFINED_DEFAULT_OBJECT_ACL .getString (options ))
351355 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
352356 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
357+ .setUserProject (Option .USER_PROJECT .getString (options ))
353358 .execute ();
354359 } catch (IOException ex ) {
355360 throw translate (ex );
@@ -365,7 +370,8 @@ private Storage.Objects.Patch patchCall(StorageObject storageObject, Map<Option,
365370 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
366371 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
367372 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (options ))
368- .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ));
373+ .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ))
374+ .setUserProject (Option .USER_PROJECT .getString (options ));
369375 }
370376
371377 @ Override
@@ -384,6 +390,7 @@ public boolean delete(Bucket bucket, Map<Option, ?> options) {
384390 .delete (bucket .getName ())
385391 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
386392 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
393+ .setUserProject (Option .USER_PROJECT .getString (options ))
387394 .execute ();
388395 return true ;
389396 } catch (IOException ex ) {
@@ -403,7 +410,8 @@ private Storage.Objects.Delete deleteCall(StorageObject blob, Map<Option, ?> opt
403410 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
404411 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
405412 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (options ))
406- .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ));
413+ .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ))
414+ .setUserProject (Option .USER_PROJECT .getString (options ));
407415 }
408416
409417 @ Override
@@ -443,6 +451,7 @@ public StorageObject compose(Iterable<StorageObject> sources, StorageObject targ
443451 .compose (target .getBucket (), target .getName (), request )
444452 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (targetOptions ))
445453 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (targetOptions ))
454+ .setUserProject (Option .USER_PROJECT .getString (targetOptions ))
446455 .execute ();
447456 } catch (IOException ex ) {
448457 throw translate (ex );
@@ -458,7 +467,8 @@ public byte[] load(StorageObject from, Map<Option, ?> options) {
458467 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
459468 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
460469 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (options ))
461- .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ));
470+ .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ))
471+ .setUserProject (Option .USER_PROJECT .getString (options ));
462472 setEncryptionHeaders (getRequest .getRequestHeaders (), ENCRYPTION_KEY_PREFIX , options );
463473 ByteArrayOutputStream out = new ByteArrayOutputStream ();
464474 getRequest .executeMedia ().download (out );
@@ -483,7 +493,8 @@ public Tuple<String, byte[]> read(StorageObject from, Map<Option, ?> options, lo
483493 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (options ))
484494 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (options ))
485495 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (options ))
486- .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ));
496+ .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (options ))
497+ .setUserProject (Option .USER_PROJECT .getString (options ));
487498 checkArgument (position >= 0 , "Position should be non-negative, is %d" , position );
488499 StringBuilder range = new StringBuilder ();
489500 range .append ("bytes=" ).append (position ).append ("-" ).append (position + bytes - 1 );
@@ -628,6 +639,11 @@ public RewriteResponse continueRewrite(RewriteResponse previousResponse) {
628639
629640 private RewriteResponse rewrite (RewriteRequest req , String token ) {
630641 try {
642+ String userProject = Option .USER_PROJECT .getString (req .sourceOptions );
643+ if (userProject == null ) {
644+ userProject = Option .USER_PROJECT .getString (req .targetOptions );
645+ }
646+
631647 Long maxBytesRewrittenPerCall = req .megabytesRewrittenPerCall != null
632648 ? req .megabytesRewrittenPerCall * MEGABYTE : null ;
633649 Storage .Objects .Rewrite rewrite = storage .objects ()
@@ -645,7 +661,8 @@ private RewriteResponse rewrite(RewriteRequest req, String token) {
645661 .setIfMetagenerationMatch (Option .IF_METAGENERATION_MATCH .getLong (req .targetOptions ))
646662 .setIfMetagenerationNotMatch (Option .IF_METAGENERATION_NOT_MATCH .getLong (req .targetOptions ))
647663 .setIfGenerationMatch (Option .IF_GENERATION_MATCH .getLong (req .targetOptions ))
648- .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (req .targetOptions ));
664+ .setIfGenerationNotMatch (Option .IF_GENERATION_NOT_MATCH .getLong (req .targetOptions ))
665+ .setUserProject (userProject );
649666 HttpHeaders requestHeaders = rewrite .getRequestHeaders ();
650667 setEncryptionHeaders (requestHeaders , SOURCE_ENCRYPTION_KEY_PREFIX , req .sourceOptions );
651668 setEncryptionHeaders (requestHeaders , ENCRYPTION_KEY_PREFIX , req .targetOptions );
0 commit comments