com.autentia.tnt.upload.impl.DefaultUploader.java Source code

Java tutorial

Introduction

Here is the source code for com.autentia.tnt.upload.impl.DefaultUploader.java

Source

/**
 * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L.
 * Copyright (C) 2007 Autentia Real Bussiness Solution S.L.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * 
 */
package com.autentia.tnt.upload.impl;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang.*;
import org.apache.myfaces.custom.fileupload.UploadedFile;

import com.autentia.tnt.upload.*;
import com.autentia.tnt.util.*;

/**
 * Intraweb default uploader: places files in the path described in
 * configuration file.
 * 
 * @author ivan
 */
public class DefaultUploader implements Uploader {

    /** path where files must be stored */
    private String path;

    /**
     * Constructor
     * 
     * @param object
     *            object the file is associated to
     */
    public DefaultUploader(String object) {
        path = ConfigurationUtil.getDefault().getUploadPath() + object + File.separator;
    }

    /** */
    public void store(String id, UploadedFile file) throws IOException {
        InputStream in = null;
        OutputStream out = null;
        byte[] buffer = new byte[65536];
        int nr;

        try {
            in = file.getInputStream();
            out = new FileOutputStream(getFilePath(id) + FileUtil.getFileName(file.getName()));

            while ((nr = in.read(buffer)) != -1) {
                out.write(buffer, 0, nr);
            }

        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException ioex) {
                    // Ignored
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException ioex) {
                    // Ignored
                }
            }
        }
    }

    /** */
    public void replace(String id, String oldFile, UploadedFile newFile) throws IOException {
        if (oldFile != null) {
            delete(id, oldFile);
        }
        store(id, newFile);
    }

    /** */
    public boolean exists(String id, String file) {
        return new File(getFilePath(id) + file).exists();
    }

    /** */
    public boolean delete(String id, String file) throws IOException {
        final String fullPath = getFilePath(id) + file;
        boolean exists = exists(id, file);
        if (!exists) {
            return false;
        } else {
            boolean ok = new File(fullPath).delete();
            if (!ok) {
                throw new IOException("File could not be deleted: " + fullPath);
            } else {
                return true;
            }
        }
    }

    /** */
    public String version(String id, String oldFile, UploadedFile newFile) throws IOException {

        final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-hhmmss");

        if (!exists(id, oldFile)) {
            throw new FileNotFoundException(oldFile + " doesn't exists!");
        }

        if (oldFile == null) {
            store(id, newFile);
            return newFile.getName();
        }

        final String versioned = oldFile.substring(0, oldFile.lastIndexOf('.')) + "_" + sdf.format(new Date())
                + oldFile.substring(oldFile.lastIndexOf('.'));

        byte[] buffer = new byte[65536];
        int nr;

        InputStream in = null;
        OutputStream out = null;
        try {
            in = newFile.getInputStream();
            out = new FileOutputStream(getFilePath(id) + FileUtil.getFileName(versioned));

            while ((nr = in.read(buffer)) != -1) {
                out.write(buffer, 0, nr);
            }
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException ioex) {
                    // Ignored
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException ioex) {
                    // Ignored
                }
            }
        }

        return versioned;
    }

    /**
     * Get file path and create directories as necessary.
     * 
     * @return the file path (directory where it should be stored
     */
    private String getFilePath(String id) {
        final String filePath = (id == null) ? (path) : (path + id + File.separator);
        new File(filePath).mkdirs();
        return filePath;
    }
}