Skip to content

Commit c8748ce

Browse files
committed
[aws-storage-s3] Add support to define the S3 Storage Class
See also: https://aws.amazon.com/s3/storage-classes
1 parent 12d14ad commit c8748ce

10 files changed

+106
-1
lines changed

aws-storage-s3/api/aws-storage-s3.api

+6-1
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadFil
242242
public fun equals (Ljava/lang/Object;)Z
243243
public static fun from (Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
244244
public fun getServerSideEncryption ()Lcom/amplifyframework/storage/s3/ServerSideEncryption;
245+
public fun getStorageClass ()Laws/sdk/kotlin/services/s3/model/StorageClass;
245246
public fun hashCode ()I
246247
public fun toString ()Ljava/lang/String;
247248
public fun useAccelerateEndpoint ()Z
@@ -253,6 +254,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadFil
253254
public fun build ()Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions;
254255
public fun serverSideEncryption (Lcom/amplifyframework/storage/s3/ServerSideEncryption;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
255256
public fun setUseAccelerateEndpoint (Z)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
257+
public fun storageClass (Laws/sdk/kotlin/services/s3/model/StorageClass;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
256258
}
257259

258260
public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions : com/amplifyframework/storage/options/StorageUploadInputStreamOptions {
@@ -261,6 +263,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadInp
261263
public fun equals (Ljava/lang/Object;)Z
262264
public static fun from (Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
263265
public fun getServerSideEncryption ()Lcom/amplifyframework/storage/s3/ServerSideEncryption;
266+
public fun getStorageClass ()Laws/sdk/kotlin/services/s3/model/StorageClass;
264267
public fun hashCode ()I
265268
public fun toString ()Ljava/lang/String;
266269
public fun useAccelerateEndpoint ()Z
@@ -272,6 +275,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadInp
272275
public fun build ()Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions;
273276
public fun serverSideEncryption (Lcom/amplifyframework/storage/s3/ServerSideEncryption;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
274277
public fun setUseAccelerateEndpoint (Z)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
278+
public fun storageClass (Laws/sdk/kotlin/services/s3/model/StorageClass;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
275279
}
276280

277281
public final class com/amplifyframework/storage/s3/request/AWSS3StorageDownloadFileRequest {
@@ -314,13 +318,14 @@ public final class com/amplifyframework/storage/s3/request/AWSS3StorageRemoveReq
314318
}
315319

316320
public final class com/amplifyframework/storage/s3/request/AWSS3StorageUploadRequest {
317-
public fun <init> (Ljava/lang/String;Ljava/lang/Object;Lcom/amplifyframework/storage/StorageAccessLevel;Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/storage/s3/ServerSideEncryption;Ljava/util/Map;Z)V
321+
public fun <init> (Ljava/lang/String;Ljava/lang/Object;Lcom/amplifyframework/storage/StorageAccessLevel;Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/storage/s3/ServerSideEncryption;Laws/sdk/kotlin/services/s3/model/StorageClass;Ljava/util/Map;Z)V
318322
public fun getAccessLevel ()Lcom/amplifyframework/storage/StorageAccessLevel;
319323
public fun getContentType ()Ljava/lang/String;
320324
public fun getKey ()Ljava/lang/String;
321325
public fun getLocal ()Ljava/lang/Object;
322326
public fun getMetadata ()Ljava/util/Map;
323327
public fun getServerSideEncryption ()Lcom/amplifyframework/storage/s3/ServerSideEncryption;
328+
public fun getStorageClass ()Laws/sdk/kotlin/services/s3/model/StorageClass;
324329
public fun getTargetIdentityId ()Ljava/lang/String;
325330
public fun useAccelerateEndpoint ()Z
326331
}

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/AWSS3StoragePlugin.java

+13
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
import java.util.concurrent.TimeUnit;
102102

103103
import aws.sdk.kotlin.services.s3.S3Client;
104+
import aws.sdk.kotlin.services.s3.model.StorageClass;
104105

105106
/**
106107
* A plugin for the storage category which uses S3 as a storage
@@ -579,6 +580,9 @@ public StorageUploadFileOperation<?> uploadFile(
579580
options instanceof AWSS3StorageUploadFileOptions
580581
? ((AWSS3StorageUploadFileOptions) options).getServerSideEncryption()
581582
: ServerSideEncryption.NONE,
583+
options instanceof AWSS3StorageUploadFileOptions
584+
? ((AWSS3StorageUploadFileOptions) options).getStorageClass()
585+
: StorageClass.Standard.INSTANCE,
582586
options.getMetadata(),
583587
useAccelerateEndpoint
584588
);
@@ -617,6 +621,9 @@ public StorageUploadFileOperation<?> uploadFile(
617621
options instanceof AWSS3StorageUploadFileOptions
618622
? ((AWSS3StorageUploadFileOptions) options).getServerSideEncryption()
619623
: ServerSideEncryption.NONE,
624+
options instanceof AWSS3StorageUploadFileOptions
625+
? ((AWSS3StorageUploadFileOptions) options).getStorageClass()
626+
: StorageClass.Standard.INSTANCE,
620627
options.getMetadata(),
621628
useAccelerateEndpoint
622629
);
@@ -707,6 +714,9 @@ public StorageUploadInputStreamOperation<?> uploadInputStream(
707714
options instanceof AWSS3StorageUploadInputStreamOptions
708715
? ((AWSS3StorageUploadInputStreamOptions) options).getServerSideEncryption()
709716
: ServerSideEncryption.NONE,
717+
options instanceof AWSS3StorageUploadInputStreamOptions
718+
? ((AWSS3StorageUploadInputStreamOptions) options).getStorageClass()
719+
: StorageClass.Standard.INSTANCE,
710720
options.getMetadata(),
711721
useAccelerateEndpoint
712722
);
@@ -745,6 +755,9 @@ public StorageUploadInputStreamOperation<?> uploadInputStream(
745755
options instanceof AWSS3StorageUploadInputStreamOptions
746756
? ((AWSS3StorageUploadInputStreamOptions) options).getServerSideEncryption()
747757
: ServerSideEncryption.NONE,
758+
options instanceof AWSS3StorageUploadInputStreamOptions
759+
? ((AWSS3StorageUploadInputStreamOptions) options).getStorageClass()
760+
: StorageClass.Standard.INSTANCE,
748761
options.getMetadata(),
749762
useAccelerateEndpoint
750763
);

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/operation/AWSS3StoragePathUploadFileOperation.kt

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ internal class AWSS3StoragePathUploadFileOperation internal constructor(
111111
objectMetadata.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION] =
112112
storageServerSideEncryption.getName()
113113
}
114+
objectMetadata.metaData[ObjectMetadata.STORAGE_CLASS] = uploadRequest.storageClass.value
114115
transferObserver = storageService.uploadFile(
115116
transferId,
116117
serviceKey,

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/operation/AWSS3StoragePathUploadInputStreamOperation.kt

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515
package com.amplifyframework.storage.s3.operation
1616

17+
import aws.sdk.kotlin.services.s3.model.StorageClass
1718
import com.amplifyframework.auth.AuthCredentialsProvider
1819
import com.amplifyframework.core.Amplify
1920
import com.amplifyframework.core.Consumer
@@ -110,6 +111,7 @@ internal class AWSS3StoragePathUploadInputStreamOperation internal constructor(
110111
objectMetadata.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION] =
111112
storageServerSideEncryption.getName()
112113
}
114+
objectMetadata.metaData[ObjectMetadata.STORAGE_CLASS] = request.storageClass.value
113115
transferObserver = storageService.uploadInputStream(
114116
transferId,
115117
serviceKey,

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/operation/AWSS3StorageUploadFileOperation.kt

+1
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class AWSS3StorageUploadFileOperation @JvmOverloads internal constructor(
109109
objectMetadata.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION] =
110110
storageServerSideEncryption.getName()
111111
}
112+
objectMetadata.metaData[ObjectMetadata.STORAGE_CLASS] = uploadRequest.storageClass.value
112113
transferObserver = storageService.uploadFile(
113114
transferId,
114115
serviceKey,

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/operation/AWSS3StorageUploadInputStreamOperation.kt

+1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class AWSS3StorageUploadInputStreamOperation @JvmOverloads internal constructor(
116116
objectMetadata.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION] =
117117
storageServerSideEncryption.getName()
118118
}
119+
objectMetadata.metaData[ObjectMetadata.STORAGE_CLASS] = uploadRequest.storageClass.value
119120
transferObserver = storageService.uploadInputStream(
120121
transferId,
121122
serviceKey,

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions.java

+35
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,20 @@
2323

2424
import java.util.Objects;
2525

26+
import aws.sdk.kotlin.services.s3.model.StorageClass;
27+
2628
/**
2729
* Options to specify attributes of object upload operation to an AWS S3 bucket.
2830
*/
2931
public final class AWSS3StorageUploadFileOptions extends StorageUploadFileOptions {
3032
private final ServerSideEncryption serverSideEncryption;
33+
private final StorageClass storageClass;
3134
private final boolean useAccelerationMode;
3235

3336
private AWSS3StorageUploadFileOptions(final Builder builder) {
3437
super(builder);
3538
this.serverSideEncryption = builder.getServerSideEncryption();
39+
this.storageClass = builder.getStorageClass();
3640
this.useAccelerationMode = builder.useAccelerateEndpoint;
3741
}
3842

@@ -45,6 +49,15 @@ public ServerSideEncryption getServerSideEncryption() {
4549
return serverSideEncryption;
4650
}
4751

52+
/**
53+
* Storage class.
54+
* @return Storage class
55+
*/
56+
@NonNull
57+
public StorageClass getStorageClass() {
58+
return storageClass;
59+
}
60+
4861
/**
4962
* Factory method to create a new instance of the
5063
* {@link Builder}. The builder can be
@@ -75,6 +88,7 @@ public static Builder from(@NonNull final AWSS3StorageUploadFileOptions options)
7588
.targetIdentityId(options.getTargetIdentityId())
7689
.contentType(options.getContentType())
7790
.serverSideEncryption(options.getServerSideEncryption())
91+
.storageClass(options.getStorageClass())
7892
.metadata(options.getMetadata());
7993
}
8094

@@ -109,6 +123,7 @@ public boolean equals(Object obj) {
109123
ObjectsCompat.equals(getTargetIdentityId(), that.getTargetIdentityId()) &&
110124
ObjectsCompat.equals(getContentType(), that.getContentType()) &&
111125
ObjectsCompat.equals(getServerSideEncryption(), that.getServerSideEncryption()) &&
126+
ObjectsCompat.equals(getStorageClass(), that.getStorageClass()) &&
112127
ObjectsCompat.equals(getMetadata(), that.getMetadata());
113128
}
114129
}
@@ -121,6 +136,7 @@ public int hashCode() {
121136
getTargetIdentityId(),
122137
getContentType(),
123138
getServerSideEncryption(),
139+
getStorageClass(),
124140
getMetadata()
125141
);
126142
}
@@ -134,6 +150,7 @@ public String toString() {
134150
", targetIdentityId=" + getTargetIdentityId() +
135151
", contentType=" + getContentType() +
136152
", serverSideEncryption=" + getServerSideEncryption().getName() +
153+
", storageClass=" + getStorageClass() +
137154
", metadata=" + getMetadata() +
138155
'}';
139156
}
@@ -145,11 +162,13 @@ public String toString() {
145162
*/
146163
public static final class Builder extends StorageUploadFileOptions.Builder<Builder> {
147164
private ServerSideEncryption serverSideEncryption;
165+
private StorageClass storageClass;
148166
private boolean useAccelerateEndpoint;
149167

150168
private Builder() {
151169
super();
152170
this.serverSideEncryption = ServerSideEncryption.NONE;
171+
this.storageClass = StorageClass.Standard.INSTANCE;
153172
}
154173

155174
/**
@@ -173,11 +192,27 @@ public Builder serverSideEncryption(@NonNull ServerSideEncryption serverSideEncr
173192
return this;
174193
}
175194

195+
/**
196+
* Configures the storage class for a new AWSS3StorageUploadFileOptions instance.
197+
* @param storageClass storage class
198+
* @return Current Builder instance for fluent chaining
199+
*/
200+
@NonNull
201+
public Builder storageClass(@NonNull StorageClass storageClass) {
202+
this.storageClass = Objects.requireNonNull(storageClass);
203+
return this;
204+
}
205+
176206
@NonNull
177207
ServerSideEncryption getServerSideEncryption() {
178208
return serverSideEncryption;
179209
}
180210

211+
@NonNull
212+
StorageClass getStorageClass() {
213+
return storageClass;
214+
}
215+
181216
@Override
182217
@NonNull
183218
public AWSS3StorageUploadFileOptions build() {

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions.java

+30
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,20 @@
2323

2424
import java.util.Objects;
2525

26+
import aws.sdk.kotlin.services.s3.model.StorageClass;
27+
2628
/**
2729
* Options to specify attributes of object upload operation to an AWS S3 bucket.
2830
*/
2931
public final class AWSS3StorageUploadInputStreamOptions extends StorageUploadInputStreamOptions {
3032
private final ServerSideEncryption serverSideEncryption;
33+
private final StorageClass storageClass;
3134
private final boolean useAccelerationMode;
3235

3336
private AWSS3StorageUploadInputStreamOptions(final Builder builder) {
3437
super(builder);
3538
this.serverSideEncryption = builder.serverSideEncryption;
39+
this.storageClass = builder.storageClass;
3640
this.useAccelerationMode = builder.useAccelerateEndpoint;
3741
}
3842

@@ -45,6 +49,15 @@ public ServerSideEncryption getServerSideEncryption() {
4549
return serverSideEncryption;
4650
}
4751

52+
/**
53+
* Storage class.
54+
* @return Storage class
55+
*/
56+
@NonNull
57+
public StorageClass getStorageClass() {
58+
return storageClass;
59+
}
60+
4861
/**
4962
* Factory method to create a new instance of the
5063
* {@link Builder}. The builder can be
@@ -75,6 +88,7 @@ public static Builder from(@NonNull final AWSS3StorageUploadInputStreamOptions o
7588
.targetIdentityId(options.getTargetIdentityId())
7689
.contentType(options.getContentType())
7790
.serverSideEncryption(options.getServerSideEncryption())
91+
.storageClass(options.getStorageClass())
7892
.metadata(options.getMetadata());
7993
}
8094

@@ -109,6 +123,7 @@ public boolean equals(Object obj) {
109123
ObjectsCompat.equals(getTargetIdentityId(), that.getTargetIdentityId()) &&
110124
ObjectsCompat.equals(getContentType(), that.getContentType()) &&
111125
ObjectsCompat.equals(getServerSideEncryption(), that.getServerSideEncryption()) &&
126+
ObjectsCompat.equals(getStorageClass(), that.getStorageClass()) &&
112127
ObjectsCompat.equals(getMetadata(), that.getMetadata());
113128
}
114129
}
@@ -121,6 +136,7 @@ public int hashCode() {
121136
getTargetIdentityId(),
122137
getContentType(),
123138
getServerSideEncryption(),
139+
getStorageClass(),
124140
getMetadata()
125141
);
126142
}
@@ -134,6 +150,7 @@ public String toString() {
134150
", targetIdentityId=" + getTargetIdentityId() +
135151
", contentType=" + getContentType() +
136152
", serverSideEncryption=" + getServerSideEncryption().getName() +
153+
", storageClass=" + getStorageClass() +
137154
", metadata=" + getMetadata() +
138155
'}';
139156
}
@@ -145,11 +162,13 @@ public String toString() {
145162
*/
146163
public static final class Builder extends StorageUploadInputStreamOptions.Builder<Builder> {
147164
private ServerSideEncryption serverSideEncryption;
165+
private StorageClass storageClass;
148166
private boolean useAccelerateEndpoint;
149167

150168
private Builder() {
151169
super();
152170
this.serverSideEncryption = ServerSideEncryption.NONE;
171+
this.storageClass = StorageClass.Standard.INSTANCE;
153172
}
154173

155174
/**
@@ -173,6 +192,17 @@ public Builder serverSideEncryption(@NonNull ServerSideEncryption serverSideEncr
173192
return this;
174193
}
175194

195+
/**
196+
* Configures the storage class for a new AWSS3StorageUploadInputStreamOptions instance.
197+
* @param storageClass storage class
198+
* @return Current Builder instance for fluent chaining
199+
*/
200+
@NonNull
201+
public Builder storageClass(@NonNull StorageClass storageClass) {
202+
this.storageClass = Objects.requireNonNull(storageClass);
203+
return this;
204+
}
205+
176206
@Override
177207
@NonNull
178208
public AWSS3StorageUploadInputStreamOptions build() {

aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/request/AWSS3StoragePathUploadRequest.kt

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515
package com.amplifyframework.storage.s3.request
1616

17+
import aws.sdk.kotlin.services.s3.model.StorageClass
1718
import com.amplifyframework.storage.StoragePath
1819
import com.amplifyframework.storage.s3.ServerSideEncryption
1920

@@ -26,6 +27,7 @@ internal data class AWSS3StoragePathUploadRequest<L>(
2627
val local: L,
2728
val contentType: String?,
2829
val serverSideEncryption: ServerSideEncryption,
30+
val storageClass: StorageClass,
2931
val metadata: Map<String, String>,
3032
val useAccelerateEndpoint: Boolean
3133
)

0 commit comments

Comments
 (0)