package core.aws.remote.s3;
import core.aws.client.AWS;
import core.aws.env.Environment;
import core.aws.resource.Resources;
import core.aws.resource.s3.Bucket;
import core.aws.util.Asserts;
import java.util.List;
import java.util.Optional;
/**
* @author neo
*/
public class S3Loader {
private final Resources resources;
private final Environment env;
public S3Loader(Resources resources, Environment env) {
this.resources = resources;
this.env = env;
}
public void load() {
List<com.amazonaws.services.s3.model.Bucket> buckets = AWS.s3.listAllBuckets();
for (com.amazonaws.services.s3.model.Bucket bucket : buckets) {
String bucketId = bucketId(env.name, bucket.getName());
if (bucketId != null) {
Optional<Bucket> result = resources.find(Bucket.class, bucketId);
Bucket localBucket = result.orElseGet(() -> resources.add(new Bucket(bucketId)));
Asserts.isNull(localBucket.remoteBucket, "the remote bucket was already loaded, please check duplicated name, bucketId={}", bucketId);
localBucket.remoteBucket = bucket;
localBucket.foundInRemote();
}
}
}
String bucketId(String envName, String bucketName) {
if (!bucketName.startsWith(envName + "-")) return null;
if (bucketName.length() <= envName.length() + 1) return null; // ${env.name}-${name}
return bucketName.substring(envName.length() + 1);
}
}