Skip to content

Commit 74e085b

Browse files
committed
Use abstract DefaultHttpSignRequest to avoid duplication
1 parent e1cc7bc commit 74e085b

File tree

4 files changed

+37
-172
lines changed

4 files changed

+37
-172
lines changed

core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/HttpSigner.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public interface HttpSigner<IdentityT extends Identity> {
4444
/**
4545
* Method that takes in inputs to sign a request with sync payload and returns a signed version of the request.
4646
* <p>
47-
* Similar to {@link #sign(SyncHttpSignRequest)}, but takes a lambda to configure a new {@link HttpSignRequest.Builder}. This
48-
* removes the need to call {@link SyncHttpSignRequest#builder(Class)}} and {@link SyncHttpSignRequest.Builder#build()}.
47+
* Similar to {@link #sign(SyncHttpSignRequest)}, but takes a lambda to configure a new {@link SyncHttpSignRequest.Builder}.
48+
* This removes the need to call {@link SyncHttpSignRequest#builder(Class)}} and {@link SyncHttpSignRequest.Builder#build()}.
4949
*
5050
* @param consumer A {@link Consumer} to which an empty {@link SyncHttpSignRequest.Builder} will be given.
5151
* @return A signed version of the request.

core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/internal/DefaultAsyncHttpSignRequest.java

Lines changed: 7 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -16,51 +16,18 @@
1616
package software.amazon.awssdk.http.auth.spi.internal;
1717

1818
import java.nio.ByteBuffer;
19-
import java.util.HashMap;
20-
import java.util.Map;
21-
import java.util.Optional;
2219
import org.reactivestreams.Publisher;
2320
import software.amazon.awssdk.annotations.SdkInternalApi;
24-
import software.amazon.awssdk.http.SdkHttpRequest;
2521
import software.amazon.awssdk.http.auth.spi.AsyncHttpSignRequest;
26-
import software.amazon.awssdk.http.auth.spi.SignerProperty;
2722
import software.amazon.awssdk.identity.spi.Identity;
2823
import software.amazon.awssdk.utils.ToString;
29-
import software.amazon.awssdk.utils.Validate;
3024

3125
@SdkInternalApi
32-
public final class DefaultAsyncHttpSignRequest<IdentityT extends Identity> implements AsyncHttpSignRequest<IdentityT> {
26+
public final class DefaultAsyncHttpSignRequest<IdentityT extends Identity>
27+
extends DefaultHttpSignRequest<Publisher<ByteBuffer>, IdentityT> implements AsyncHttpSignRequest<IdentityT> {
3328

34-
private final SdkHttpRequest request;
35-
private final Publisher<ByteBuffer> payload;
36-
private final IdentityT identity;
37-
private final Map<SignerProperty<?>, Object> properties;
38-
39-
DefaultAsyncHttpSignRequest(BuilderImpl<IdentityT> builder) {
40-
this.request = Validate.paramNotNull(builder.request, "request");
41-
this.payload = builder.payload;
42-
this.identity = Validate.paramNotNull(builder.identity, "identity");
43-
this.properties = new HashMap<>(builder.properties);
44-
}
45-
46-
@Override
47-
public SdkHttpRequest request() {
48-
return request;
49-
}
50-
51-
@Override
52-
public Optional<Publisher<ByteBuffer>> payload() {
53-
return payload == null ? Optional.empty() : Optional.of(payload);
54-
}
55-
56-
@Override
57-
public IdentityT identity() {
58-
return identity;
59-
}
60-
61-
@Override
62-
public <T> T property(SignerProperty<T> property) {
63-
return (T) properties.get(property);
29+
private DefaultAsyncHttpSignRequest(BuilderImpl<IdentityT> builder) {
30+
super(builder);
6431
}
6532

6633
@Override
@@ -72,35 +39,9 @@ public String toString() {
7239
}
7340

7441
@SdkInternalApi
75-
public static final class BuilderImpl<IdentityT extends Identity> implements Builder<IdentityT> {
76-
private SdkHttpRequest request;
77-
private Publisher<ByteBuffer> payload;
78-
private IdentityT identity;
79-
private final Map<SignerProperty<?>, Object> properties = new HashMap<>();
80-
81-
@Override
82-
public Builder<IdentityT> request(SdkHttpRequest request) {
83-
this.request = request;
84-
return this;
85-
}
86-
87-
@Override
88-
public Builder<IdentityT> payload(Publisher<ByteBuffer> payload) {
89-
this.payload = payload;
90-
return this;
91-
}
92-
93-
@Override
94-
public Builder<IdentityT> identity(IdentityT identity) {
95-
this.identity = identity;
96-
return this;
97-
}
98-
99-
@Override
100-
public <T> Builder<IdentityT> putProperty(SignerProperty<T> key, T value) {
101-
this.properties.put(key, value);
102-
return this;
103-
}
42+
public static final class BuilderImpl<IdentityT extends Identity>
43+
extends DefaultHttpSignRequest.BuilderImpl<BuilderImpl<IdentityT>, Publisher<ByteBuffer>, IdentityT>
44+
implements AsyncHttpSignRequest.Builder<IdentityT> {
10445

10546
@Override
10647
public AsyncHttpSignRequest<IdentityT> build() {

core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/internal/DefaultHttpSignRequest.java

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,31 +23,23 @@
2323
import software.amazon.awssdk.http.auth.spi.HttpSignRequest;
2424
import software.amazon.awssdk.http.auth.spi.SignerProperty;
2525
import software.amazon.awssdk.identity.spi.Identity;
26-
import software.amazon.awssdk.utils.ToString;
2726
import software.amazon.awssdk.utils.Validate;
2827

2928
@SdkInternalApi
30-
public final class DefaultHttpSignRequest<PayloadT, IdentityT extends Identity> implements HttpSignRequest<PayloadT, IdentityT> {
29+
abstract class DefaultHttpSignRequest<PayloadT, IdentityT extends Identity> implements HttpSignRequest<PayloadT, IdentityT> {
3130

32-
private final Class<PayloadT> payloadType;
33-
private final SdkHttpRequest request;
34-
private final PayloadT payload;
35-
private final IdentityT identity;
36-
private final Map<SignerProperty<?>, Object> properties;
31+
protected final SdkHttpRequest request;
32+
protected final PayloadT payload;
33+
protected final IdentityT identity;
34+
protected final Map<SignerProperty<?>, Object> properties;
3735

38-
DefaultHttpSignRequest(BuilderImpl<PayloadT, IdentityT> builder) {
39-
this.payloadType = Validate.paramNotNull(builder.payloadType, "payloadType");
36+
protected DefaultHttpSignRequest(BuilderImpl<?, PayloadT, IdentityT> builder) {
4037
this.request = Validate.paramNotNull(builder.request, "request");
4138
this.payload = builder.payload;
4239
this.identity = Validate.paramNotNull(builder.identity, "identity");
4340
this.properties = new HashMap<>(builder.properties);
4441
}
4542

46-
@Override
47-
public Class<PayloadT> payloadType() {
48-
return payloadType;
49-
}
50-
5143
@Override
5244
public SdkHttpRequest request() {
5345
return request;
@@ -68,49 +60,40 @@ public <T> T property(SignerProperty<T> property) {
6860
return (T) properties.get(property);
6961
}
7062

71-
@Override
72-
public String toString() {
73-
return ToString.builder("HttpSignRequest")
74-
.add("payloadType", payloadType)
75-
.add("request", request)
76-
.add("properties", properties)
77-
.build();
78-
}
79-
80-
81-
public static final class BuilderImpl<PayloadT, IdentityT extends Identity> implements Builder<PayloadT, IdentityT> {
82-
private final Class<PayloadT> payloadType;
63+
@SdkInternalApi
64+
protected static class BuilderImpl<B extends BuilderImpl<B, PayloadT, IdentityT>, PayloadT, IdentityT extends Identity>
65+
implements HttpSignRequest.Builder<PayloadT, IdentityT> {
8366
private SdkHttpRequest request;
8467
private PayloadT payload;
8568
private IdentityT identity;
8669
private final Map<SignerProperty<?>, Object> properties = new HashMap<>();
8770

88-
public BuilderImpl(Class<PayloadT> payloadType) {
89-
this.payloadType = payloadType;
90-
}
91-
9271
@Override
93-
public Builder<PayloadT, IdentityT> request(SdkHttpRequest request) {
72+
public B request(SdkHttpRequest request) {
9473
this.request = request;
95-
return this;
74+
return thisBuilder();
9675
}
9776

9877
@Override
99-
public Builder<PayloadT, IdentityT> payload(PayloadT payload) {
78+
public B payload(PayloadT payload) {
10079
this.payload = payload;
101-
return this;
80+
return thisBuilder();
10281
}
10382

10483
@Override
105-
public Builder<PayloadT, IdentityT> identity(IdentityT identity) {
84+
public B identity(IdentityT identity) {
10685
this.identity = identity;
107-
return this;
86+
return thisBuilder();
10887
}
10988

11089
@Override
111-
public <T> Builder<PayloadT, IdentityT> putProperty(SignerProperty<T> key, T value) {
90+
public <T> B putProperty(SignerProperty<T> key, T value) {
11291
this.properties.put(key, value);
113-
return this;
92+
return thisBuilder();
93+
}
94+
95+
private B thisBuilder() {
96+
return (B) this;
11497
}
11598
}
11699
}

core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/internal/DefaultSyncHttpSignRequest.java

Lines changed: 7 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -15,51 +15,18 @@
1515

1616
package software.amazon.awssdk.http.auth.spi.internal;
1717

18-
import java.util.HashMap;
19-
import java.util.Map;
20-
import java.util.Optional;
2118
import software.amazon.awssdk.annotations.SdkInternalApi;
2219
import software.amazon.awssdk.http.ContentStreamProvider;
23-
import software.amazon.awssdk.http.SdkHttpRequest;
24-
import software.amazon.awssdk.http.auth.spi.SignerProperty;
2520
import software.amazon.awssdk.http.auth.spi.SyncHttpSignRequest;
2621
import software.amazon.awssdk.identity.spi.Identity;
2722
import software.amazon.awssdk.utils.ToString;
28-
import software.amazon.awssdk.utils.Validate;
2923

3024
@SdkInternalApi
31-
public final class DefaultSyncHttpSignRequest<IdentityT extends Identity> implements SyncHttpSignRequest<IdentityT> {
25+
public final class DefaultSyncHttpSignRequest<IdentityT extends Identity>
26+
extends DefaultHttpSignRequest<ContentStreamProvider, IdentityT> implements SyncHttpSignRequest<IdentityT> {
3227

33-
private final SdkHttpRequest request;
34-
private final ContentStreamProvider payload;
35-
private final IdentityT identity;
36-
private final Map<SignerProperty<?>, Object> properties;
37-
38-
DefaultSyncHttpSignRequest(BuilderImpl<IdentityT> builder) {
39-
this.request = Validate.paramNotNull(builder.request, "request");
40-
this.payload = builder.payload;
41-
this.identity = Validate.paramNotNull(builder.identity, "identity");
42-
this.properties = new HashMap<>(builder.properties);
43-
}
44-
45-
@Override
46-
public SdkHttpRequest request() {
47-
return request;
48-
}
49-
50-
@Override
51-
public Optional<ContentStreamProvider> payload() {
52-
return payload == null ? Optional.empty() : Optional.of(payload);
53-
}
54-
55-
@Override
56-
public IdentityT identity() {
57-
return identity;
58-
}
59-
60-
@Override
61-
public <T> T property(SignerProperty<T> property) {
62-
return (T) properties.get(property);
28+
private DefaultSyncHttpSignRequest(BuilderImpl<IdentityT> builder) {
29+
super(builder);
6330
}
6431

6532
@Override
@@ -71,35 +38,9 @@ public String toString() {
7138
}
7239

7340
@SdkInternalApi
74-
public static final class BuilderImpl<IdentityT extends Identity> implements Builder<IdentityT> {
75-
private SdkHttpRequest request;
76-
private ContentStreamProvider payload;
77-
private IdentityT identity;
78-
private final Map<SignerProperty<?>, Object> properties = new HashMap<>();
79-
80-
@Override
81-
public Builder<IdentityT> request(SdkHttpRequest request) {
82-
this.request = request;
83-
return this;
84-
}
85-
86-
@Override
87-
public Builder<IdentityT> payload(ContentStreamProvider payload) {
88-
this.payload = payload;
89-
return this;
90-
}
91-
92-
@Override
93-
public Builder<IdentityT> identity(IdentityT identity) {
94-
this.identity = identity;
95-
return this;
96-
}
97-
98-
@Override
99-
public <T> Builder<IdentityT> putProperty(SignerProperty<T> key, T value) {
100-
this.properties.put(key, value);
101-
return this;
102-
}
41+
public static final class BuilderImpl<IdentityT extends Identity>
42+
extends DefaultHttpSignRequest.BuilderImpl<BuilderImpl<IdentityT>, ContentStreamProvider, IdentityT>
43+
implements SyncHttpSignRequest.Builder<IdentityT> {
10344

10445
@Override
10546
public SyncHttpSignRequest<IdentityT> build() {

0 commit comments

Comments
 (0)