Package com.intridea.io.vfs.provider.s3

Source Code of com.intridea.io.vfs.provider.s3.S3FileSystem

package com.intridea.io.vfs.provider.s3;

import java.util.Collection;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.Region;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.vfs2.Capability;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.provider.AbstractFileName;
import org.apache.commons.vfs2.provider.AbstractFileSystem;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.transfer.TransferManager;

/**
* An S3 file system.
*
* @author Marat Komarov
* @author Matthias L. Jugel
* @author Moritz Siuts
*/
public class S3FileSystem extends AbstractFileSystem {

    private static final Log logger = LogFactory.getLog(S3FileSystem.class);

    private final AmazonS3Client service;
    private final TransferManager transferManager;
    private final Bucket bucket;
    private final AWSCredentials awsCredentials;

    private Boolean serverSideEncryption;

    public S3FileSystem(
            S3FileName fileName, AWSCredentials awsCredentials, AmazonS3Client service,
            FileSystemOptions fileSystemOptions) throws FileSystemException {
        super(fileName, null, fileSystemOptions);

        String bucketId = fileName.getBucketId();

        this.awsCredentials = awsCredentials;
        this.service = service;
        this.transferManager = new TransferManager(service);
        this.serverSideEncryption = S3FileSystemConfigBuilder
            .getInstance().getServerSideEncryption(fileSystemOptions);

        Region region = S3FileSystemConfigBuilder.getInstance().getRegion(
            fileSystemOptions);
        if (region != null)
            service.setRegion(region.toAWSRegion());

        try {
            if (service.doesBucketExist(bucketId)) {
                bucket = new Bucket(bucketId);
            } else {
                bucket = service.createBucket(bucketId);

                logger.debug("Created new bucket.");
            }

            logger.info("Created new S3 FileSystem " + bucketId);
        } catch (AmazonServiceException e) {
            String s3message = e.getMessage();

            if (s3message != null) {
                throw new FileSystemException(s3message, e);
            } else {
                throw new FileSystemException(e);
            }
        }
    }

    @Override
    protected void addCapabilities(Collection<Capability> caps) {
        caps.addAll(S3FileProvider.capabilities);
    }

    public void shutdown() {
        getTransferManager().shutdownNow();
        getService().shutdown();
    }

    protected Boolean getServerSideEncryption() {
        return serverSideEncryption;
    }

    protected void setServerSideEncryption(Boolean serverSideEncryption) {
        this.serverSideEncryption = serverSideEncryption;
    }

    protected Bucket getBucket() {
        return bucket;
    }

    protected Region getRegion() {
        return getService().getRegion();
    }

    protected AWSCredentials getAwsCredentials() {
        return awsCredentials;
    }

    protected AmazonS3Client getService() {
        return service;
    }

    protected TransferManager getTransferManager() {
        return transferManager;
    }

    @Override
    protected FileObject createFile(AbstractFileName fileName) throws Exception {
        return new S3FileObject(fileName, this);
    }
   
    @Override
    protected void doCloseCommunicationLink()
    {
        if (transferManager != null) {
            transferManager.shutdownNow();
        }
    }
}
TOP

Related Classes of com.intridea.io.vfs.provider.s3.S3FileSystem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.