39
39
import java .net .URLDecoder ;
40
40
import java .util .Arrays ;
41
41
import java .util .Iterator ;
42
+ import java .util .List ;
42
43
import java .util .ListIterator ;
43
44
44
45
/**
@@ -70,6 +71,7 @@ public class S3Source extends SyncSource<S3SyncObject> {
70
71
private String rootKey ;
71
72
private boolean decodeKeys ;
72
73
private S3Target s3Target ;
74
+ private boolean versioningEnabled = false ;
73
75
74
76
private AmazonS3 s3 ;
75
77
@@ -123,6 +125,15 @@ public void configure(SyncSource source, Iterator<SyncFilter> filters, SyncTarge
123
125
if (endpoint != null )
124
126
s3 .setEndpoint (endpoint );
125
127
128
+ // TODO: generalize uri translation
129
+ S3Util .S3Uri s3Uri = new S3Util .S3Uri ();
130
+ s3Uri .protocol = protocol ;
131
+ s3Uri .endpoint = endpoint ;
132
+ s3Uri .accessKey = accessKey ;
133
+ s3Uri .secretKey = secretKey ;
134
+ s3Uri .rootKey = rootKey ;
135
+ if (sourceUri == null ) sourceUri = s3Uri .toUri ();
136
+
126
137
if (disableVHosts ) {
127
138
l4j .info ("The use of virtual hosted buckets on the s3 source has been DISABLED. Path style buckets will be used." );
128
139
S3ClientOptions opts = new S3ClientOptions ();
@@ -139,7 +150,14 @@ public void configure(SyncSource source, Iterator<SyncFilter> filters, SyncTarge
139
150
if (rootKey .length () > 0 && !rootKey .endsWith ("/" )) rootKey += "/" ; // " ends with slash
140
151
141
152
// for version support. TODO: genericize version support
142
- if (target instanceof S3Target ) s3Target = (S3Target ) target ;
153
+ if (target instanceof S3Target ) {
154
+ s3Target = (S3Target ) target ;
155
+ if (s3Target .isIncludeVersions ()) {
156
+ BucketVersioningConfiguration versioningConfig = s3 .getBucketVersioningConfiguration (bucketName );
157
+ List <String > versionedStates = Arrays .asList (BucketVersioningConfiguration .ENABLED , BucketVersioningConfiguration .SUSPENDED );
158
+ versioningEnabled = versionedStates .contains (versioningConfig .getStatus ());
159
+ }
160
+ }
143
161
}
144
162
145
163
@ Override
@@ -493,4 +511,8 @@ public boolean isDecodeKeys() {
493
511
public void setDecodeKeys (boolean decodeKeys ) {
494
512
this .decodeKeys = decodeKeys ;
495
513
}
514
+
515
+ public boolean isVersioningEnabled () {
516
+ return versioningEnabled ;
517
+ }
496
518
}
0 commit comments