Package org.jets3t.service.multi

Source Code of org.jets3t.service.multi.DownloadPackage

/*
* JetS3t : Java S3 Toolkit
* Project hosted at http://bitbucket.org/jmurty/jets3t/
*
* Copyright 2006-2010 James Murty
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jets3t.service.multi;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jets3t.service.io.GZipInflatingOutputStream;
import org.jets3t.service.model.StorageObject;
import org.jets3t.service.security.EncryptionUtil;

import javax.crypto.NoSuchPaddingException;

/**
* A simple container object to associate a {@link StorageObject} with an
* output file or output stream to which the object's data will be written.
*
* @author James Murty
*/
public class DownloadPackage {
    private static final Log log = LogFactory.getLog(DownloadPackage.class);

    protected StorageObject object = null;

    protected File outputFile = null;
    protected OutputStream outputStream = null;
    protected boolean isUnzipping = false;
    protected EncryptionUtil encryptionUtil = null;

    private boolean appendToFile = false;

    public DownloadPackage(StorageObject object, File outputFile) {
        this(object, outputFile, false, null);
    }

    public DownloadPackage(StorageObject object, File outputFile, boolean isUnzipping,
        EncryptionUtil encryptionUtil)
    {
        this.object = object;
        this.outputFile = outputFile;
        this.isUnzipping = isUnzipping;
        this.encryptionUtil = encryptionUtil;
    }

    public DownloadPackage(StorageObject object, OutputStream outputStream) {
        this(object, outputStream, false, null);
    }

    public DownloadPackage(StorageObject object, OutputStream outputStream, boolean isUnzipping,
        EncryptionUtil encryptionUtil)
    {
        this.object = object;
        this.outputStream = outputStream;
        this.isUnzipping = isUnzipping;
        this.encryptionUtil = encryptionUtil;
    }

    public StorageObject getObject() {
        return object;
    }

    public void setObject(StorageObject object) {
        this.object = object;
    }

    /**
     * @return the target output file for data, or null if this package
     * has an output stream as its target.
     */
    public File getDataFile() {
        return outputFile;
    }

    public boolean isAppendToFile() {
        return appendToFile;
    }

    /**
     * Data will be appended to the target file instead of overwriting it.
     * This option is relevant only for packages with a target file, not
     * those with a target output stream.
     *
     * @param appendToFile
     */
    public void setAppendToFile(boolean appendToFile) {
        this.appendToFile = appendToFile;
    }

    /**
     * Creates an output stream to receive the object's data. The output stream is either
     * the output stream provided to this package in its constructor, or an
     * automatically-created FileOutputStream if a File object was provided as the target
     * output object. The output stream will also be wrapped in a GZipInflatingOutputStream if
     * isUnzipping is true and/or a decrypting output stream if this package has an associated
     * non-null EncryptionUtil.
     *
     * @return
     * an output stream that writes data to the output target managed by this class.
     *
     * @throws IOException
     */
    public OutputStream getOutputStream() throws IOException {
        OutputStream outputStream = null;
        if (outputFile != null) {
            // Create parent directories for file, if necessary.
            if (outputFile.getParentFile() != null) {
                outputFile.getParentFile().mkdirs();
            }

            outputStream = new FileOutputStream(outputFile, appendToFile);
        } else {
            outputStream = this.outputStream;
        }

        if (isUnzipping) {
            log.debug("Inflating gzipped data for object: " + object.getKey());
            outputStream = new GZipInflatingOutputStream(outputStream);
        }
        if (encryptionUtil != null) {
            log.debug("Decrypting encrypted data for object: " + object.getKey());
            try {
                outputStream = encryptionUtil.decrypt(outputStream);
            }
            catch(InvalidKeyException e) {
                final IOException exception = new IOException(e.getMessage());
                exception.initCause(e);
                throw exception;
            }
            catch(InvalidAlgorithmParameterException e) {
                final IOException exception = new IOException(e.getMessage());
                exception.initCause(e);
                throw exception;
            }
            catch(NoSuchAlgorithmException e) {
                final IOException exception = new IOException(e.getMessage());
                exception.initCause(e);
                throw exception;
            }
            catch(NoSuchPaddingException e) {
                final IOException exception = new IOException(e.getMessage());
                exception.initCause(e);
                throw exception;
            }
        }
        return outputStream;
    }

}
TOP

Related Classes of org.jets3t.service.multi.DownloadPackage

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.