Skip to content

Commit 32b32b4

Browse files
authored
Add Aws S3 bucket versioning fetcher (#75)
1 parent 117d3d8 commit 32b32b4

File tree

4 files changed

+109
-1
lines changed

4 files changed

+109
-1
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Blazebit
4+
*/
5+
package com.blazebit.query.connector.aws.s3;
6+
7+
import com.blazebit.query.connector.aws.base.AwsWrapper;
8+
import software.amazon.awssdk.services.s3.model.GetBucketVersioningResponse;
9+
10+
/**
11+
* @author Donghwi Kim
12+
* @since 1.0.0
13+
*/
14+
public class AwsBucketVersioning extends AwsWrapper<GetBucketVersioningResponse> {
15+
public AwsBucketVersioning(String accountId, String region, String resourceId, GetBucketVersioningResponse payload) {
16+
super( accountId, region, resourceId, payload );
17+
}
18+
19+
@Override
20+
public GetBucketVersioningResponse getPayload() {
21+
return super.getPayload();
22+
}
23+
}

connector/aws/s3/src/main/java/com/blazebit/query/connector/aws/s3/AwsS3SchemaProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public Set<? extends DataFetcher<?>> resolveSchemaObjects(ConfigurationProvider
2222
return Set.of(
2323
BucketDataFetcher.INSTANCE,
2424
BucketAclFetcher.INSTANCE,
25+
BucketVersioningFetcher.INSTANCE,
2526
BucketPolicyFetcher.INSTANCE,
2627
LifecycleRuleFetcher.INSTANCE,
2728
LoggingEnabledFetcher.INSTANCE,
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Blazebit
4+
*/
5+
package com.blazebit.query.connector.aws.s3;
6+
7+
import com.blazebit.query.connector.aws.base.AwsConnectorConfig;
8+
import com.blazebit.query.connector.aws.base.AwsConventionContext;
9+
import com.blazebit.query.connector.base.DataFormats;
10+
import com.blazebit.query.spi.DataFetchContext;
11+
import com.blazebit.query.spi.DataFetcher;
12+
import com.blazebit.query.spi.DataFetcherException;
13+
import com.blazebit.query.spi.DataFormat;
14+
import software.amazon.awssdk.http.SdkHttpClient;
15+
import software.amazon.awssdk.regions.Region;
16+
import software.amazon.awssdk.services.s3.S3Client;
17+
import software.amazon.awssdk.services.s3.S3ClientBuilder;
18+
import software.amazon.awssdk.services.s3.model.Bucket;
19+
import software.amazon.awssdk.services.s3.model.GetBucketVersioningRequest;
20+
21+
import java.io.Serializable;
22+
import java.util.ArrayList;
23+
import java.util.List;
24+
25+
/**
26+
* @author Donghwi Kim
27+
* @since 1.0.0
28+
*/
29+
public class BucketVersioningFetcher implements DataFetcher<AwsBucketVersioning>, Serializable {
30+
31+
public static final BucketVersioningFetcher INSTANCE = new BucketVersioningFetcher();
32+
33+
private BucketVersioningFetcher() {
34+
}
35+
36+
@Override
37+
public List<AwsBucketVersioning> fetch(DataFetchContext context) {
38+
try {
39+
List<AwsConnectorConfig.Account> accounts = AwsConnectorConfig.ACCOUNT.getAll( context );
40+
SdkHttpClient sdkHttpClient = AwsConnectorConfig.HTTP_CLIENT.find( context );
41+
List<AwsBucketVersioning> list = new ArrayList<>();
42+
for ( AwsConnectorConfig.Account account : accounts ) {
43+
for ( Region region : account.getRegions() ) {
44+
S3ClientBuilder s3ClientBuilder = S3Client.builder()
45+
.region( region )
46+
.credentialsProvider( account.getCredentialsProvider() );
47+
if ( sdkHttpClient != null ) {
48+
s3ClientBuilder.httpClient( sdkHttpClient );
49+
}
50+
try (S3Client client = s3ClientBuilder.build()) {
51+
for ( Bucket bucket : client.listBuckets().buckets() ) {
52+
var bucketVersioning = client.getBucketVersioning(
53+
GetBucketVersioningRequest.builder().bucket( bucket.name() )
54+
.build() );
55+
list.add( new AwsBucketVersioning(
56+
account.getAccountId(),
57+
region.id(),
58+
bucket.name(),
59+
bucketVersioning
60+
) );
61+
}
62+
}
63+
}
64+
}
65+
return list;
66+
}
67+
catch (Exception e) {
68+
throw new DataFetcherException( "Could not fetch bucket versioning list", e );
69+
}
70+
}
71+
72+
@Override
73+
public DataFormat getDataFormat() {
74+
return DataFormats.componentMethodConvention( AwsBucketVersioning.class, AwsConventionContext.INSTANCE );
75+
}
76+
}

examples/app/src/main/java/com/blazebit/query/app/Main.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.blazebit.query.connector.aws.route53.AwsHealthCheck;
4646
import com.blazebit.query.connector.aws.route53.AwsHostedZone;
4747
import com.blazebit.query.connector.aws.s3.AwsBucketAcl;
48+
import com.blazebit.query.connector.aws.s3.AwsBucketVersioning;
4849
import com.blazebit.query.connector.aws.s3.AwsBucketPolicy;
4950
import com.blazebit.query.connector.aws.s3.AwsLoggingEnabled;
5051
import com.blazebit.query.connector.aws.s3.AwsObjectLockConfiguration;
@@ -282,6 +283,7 @@ public static void main(String[] args) throws Exception {
282283
// S3
283284
queryContextBuilder.registerSchemaObjectAlias( AwsBucket.class, "AwsBucket" );
284285
queryContextBuilder.registerSchemaObjectAlias( AwsBucketAcl.class, "AwsBucketAcl" );
286+
queryContextBuilder.registerSchemaObjectAlias( AwsBucketVersioning.class, "AwsBucketVersioning" );
285287
queryContextBuilder.registerSchemaObjectAlias( AwsBucketPolicy.class, "AwsBucketPolicy" );
286288
queryContextBuilder.registerSchemaObjectAlias( AwsLifeCycleRule.class, "AwsLifeCycleRule" );
287289
queryContextBuilder.registerSchemaObjectAlias( AwsLoggingEnabled.class, "AwsLoggingEnabled" );
@@ -552,7 +554,13 @@ private static void testAws(QuerySession session) {
552554
System.out.println("AwsBucketAcl");
553555
print(awsBucketAclResult);
554556

555-
TypedQuery<Object[]> awsBucketPolicyQuery = session.createQuery(
557+
TypedQuery<Object[]> awsBucketVersioningQuery = session.createQuery(
558+
"select f.* from AwsBucketVersioning f" );
559+
List<Object[]> awsBucketVersioningResult = awsBucketVersioningQuery.getResultList();
560+
System.out.println("AwsBucketVersioning");
561+
print(awsBucketVersioningResult);
562+
563+
TypedQuery<Object[]> awsBucketPolicyQuery = session.createQuery(
556564
"select f.* from AwsBucketPolicy f" );
557565
List<Object[]> awsBucketPolicyResult = awsBucketPolicyQuery.getResultList();
558566
System.out.println("AwsBucketPolicy");

0 commit comments

Comments
 (0)