Skip to content

Commit 5289b8d

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 25221fb commit 5289b8d

10 files changed

+106
-1
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadFil
240240
public fun equals (Ljava/lang/Object;)Z
241241
public static fun from (Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
242242
public fun getServerSideEncryption ()Lcom/amplifyframework/storage/s3/ServerSideEncryption;
243+
public fun getStorageClass ()Laws/sdk/kotlin/services/s3/model/StorageClass;
243244
public fun hashCode ()I
244245
public fun toString ()Ljava/lang/String;
245246
public fun useAccelerateEndpoint ()Z
@@ -251,6 +252,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadFil
251252
public fun build ()Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions;
252253
public fun serverSideEncryption (Lcom/amplifyframework/storage/s3/ServerSideEncryption;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
253254
public fun setUseAccelerateEndpoint (Z)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
255+
public fun storageClass (Laws/sdk/kotlin/services/s3/model/StorageClass;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadFileOptions$Builder;
254256
}
255257

256258
public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions : com/amplifyframework/storage/options/StorageUploadInputStreamOptions {
@@ -259,6 +261,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadInp
259261
public fun equals (Ljava/lang/Object;)Z
260262
public static fun from (Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
261263
public fun getServerSideEncryption ()Lcom/amplifyframework/storage/s3/ServerSideEncryption;
264+
public fun getStorageClass ()Laws/sdk/kotlin/services/s3/model/StorageClass;
262265
public fun hashCode ()I
263266
public fun toString ()Ljava/lang/String;
264267
public fun useAccelerateEndpoint ()Z
@@ -270,6 +273,7 @@ public final class com/amplifyframework/storage/s3/options/AWSS3StorageUploadInp
270273
public fun build ()Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions;
271274
public fun serverSideEncryption (Lcom/amplifyframework/storage/s3/ServerSideEncryption;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
272275
public fun setUseAccelerateEndpoint (Z)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
276+
public fun storageClass (Laws/sdk/kotlin/services/s3/model/StorageClass;)Lcom/amplifyframework/storage/s3/options/AWSS3StorageUploadInputStreamOptions$Builder;
273277
}
274278

275279
public final class com/amplifyframework/storage/s3/request/AWSS3StorageDownloadFileRequest {
@@ -308,13 +312,14 @@ public final class com/amplifyframework/storage/s3/request/AWSS3StorageRemoveReq
308312
}
309313

310314
public final class com/amplifyframework/storage/s3/request/AWSS3StorageUploadRequest {
311-
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
315+
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
312316
public fun getAccessLevel ()Lcom/amplifyframework/storage/StorageAccessLevel;
313317
public fun getContentType ()Ljava/lang/String;
314318
public fun getKey ()Ljava/lang/String;
315319
public fun getLocal ()Ljava/lang/Object;
316320
public fun getMetadata ()Ljava/util/Map;
317321
public fun getServerSideEncryption ()Lcom/amplifyframework/storage/s3/ServerSideEncryption;
322+
public fun getStorageClass ()Laws/sdk/kotlin/services/s3/model/StorageClass;
318323
public fun getTargetIdentityId ()Ljava/lang/String;
319324
public fun useAccelerateEndpoint ()Z
320325
}

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

Lines changed: 13 additions & 0 deletions
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
@@ -571,6 +572,9 @@ public StorageUploadFileOperation<?> uploadFile(
571572
options instanceof AWSS3StorageUploadFileOptions
572573
? ((AWSS3StorageUploadFileOptions) options).getServerSideEncryption()
573574
: ServerSideEncryption.NONE,
575+
options instanceof AWSS3StorageUploadFileOptions
576+
? ((AWSS3StorageUploadFileOptions) options).getStorageClass()
577+
: StorageClass.Standard.INSTANCE,
574578
options.getMetadata(),
575579
useAccelerateEndpoint
576580
);
@@ -609,6 +613,9 @@ public StorageUploadFileOperation<?> uploadFile(
609613
options instanceof AWSS3StorageUploadFileOptions
610614
? ((AWSS3StorageUploadFileOptions) options).getServerSideEncryption()
611615
: ServerSideEncryption.NONE,
616+
options instanceof AWSS3StorageUploadFileOptions
617+
? ((AWSS3StorageUploadFileOptions) options).getStorageClass()
618+
: StorageClass.Standard.INSTANCE,
612619
options.getMetadata(),
613620
useAccelerateEndpoint
614621
);
@@ -699,6 +706,9 @@ public StorageUploadInputStreamOperation<?> uploadInputStream(
699706
options instanceof AWSS3StorageUploadInputStreamOptions
700707
? ((AWSS3StorageUploadInputStreamOptions) options).getServerSideEncryption()
701708
: ServerSideEncryption.NONE,
709+
options instanceof AWSS3StorageUploadInputStreamOptions
710+
? ((AWSS3StorageUploadInputStreamOptions) options).getStorageClass()
711+
: StorageClass.Standard.INSTANCE,
702712
options.getMetadata(),
703713
useAccelerateEndpoint
704714
);
@@ -737,6 +747,9 @@ public StorageUploadInputStreamOperation<?> uploadInputStream(
737747
options instanceof AWSS3StorageUploadInputStreamOptions
738748
? ((AWSS3StorageUploadInputStreamOptions) options).getServerSideEncryption()
739749
: ServerSideEncryption.NONE,
750+
options instanceof AWSS3StorageUploadInputStreamOptions
751+
? ((AWSS3StorageUploadInputStreamOptions) options).getStorageClass()
752+
: StorageClass.Standard.INSTANCE,
740753
options.getMetadata(),
741754
useAccelerateEndpoint
742755
);

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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 35 additions & 0 deletions
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

Lines changed: 30 additions & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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)