All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mozafaq.extmergesort.AWSS3BucketStreamWriter Maven / Gradle / Ivy

There is a newer version: 2.0.4.RELEASE
Show newest version
package com.mozafaq.extmergesort;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;

/**
 * @author Mozaffar Afaque
 */
public class AWSS3BucketStreamWriter implements StreamWriter {

    private boolean isClosed = false;
    private String path;
    private String objectName ;
    private String region;

    final private StreamWriter tempStreamFileWriter;
    private AWSCredentials awsCredsAwsCredentials;
    private AmazonS3 s3client = null;

    public AWSS3BucketStreamWriter(IOLocation ioLocation, StreamWriter tempStreamFileWriter) {
        this.path = ioLocation.getS3Path();
        this.objectName = ioLocation.getObjectName();
        this.region = ioLocation.getS3Region();
        this.tempStreamFileWriter = tempStreamFileWriter;
    }

    public void create() {
        s3client = AmazonS3ClientBuilder.standard()
                .withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(awsCredsAwsCredentials))
                .build();
    }

    @Override
    public OutputStream open() throws IOException {
       return tempStreamFileWriter.open();
    }

    @Override
    public OutputStream get() {
        return tempStreamFileWriter.get();
    }

    @Override
    public String getFullPath() {
        return String.format("s3://%s/%s", path, objectName);
    }

    private void transferData(String fullPath) throws IOException {

        InputStream is = new FileInputStream(fullPath);
        ObjectMetadata objectMetadata = new ObjectMetadata() ;
        PutObjectRequest request =
                new PutObjectRequest(path, objectName, is, objectMetadata);
        s3client.putObject(request);
    }

    @Override
    public void close() throws IOException {
        if (!isClosed) {
            transferData(tempStreamFileWriter.getFullPath());
            tempStreamFileWriter.close();
            Files.delete(Path.of(tempStreamFileWriter.getFullPath()));
            isClosed = true;
        }
    }

    public void setAwsCredentials(AWSCredentials awsCredsAwsCredentials) {
        this.awsCredsAwsCredentials = awsCredsAwsCredentials;
    }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy