mercury.DigitalMediaDAO.java Source code

Java tutorial

Introduction

Here is the source code for mercury.DigitalMediaDAO.java

Source

/**
 *  Este arquivo  parte do Biblivre3.
 *  
 *  Biblivre3  um software livre; voc pode redistribu-lo e/ou 
 *  modific-lo dentro dos termos da Licena Pblica Geral GNU como 
 *  publicada pela Fundao do Software Livre (FSF); na verso 3 da 
 *  Licena, ou (caso queira) qualquer verso posterior.
 *  
 *  Este programa  distribudo na esperana de que possa ser  til, 
 *  mas SEM NENHUMA GARANTIA; nem mesmo a garantia implcita de
 *  MERCANTIBILIDADE OU ADEQUAO PARA UM FIM PARTICULAR. Veja a
 *  Licena Pblica Geral GNU para maiores detalhes.
 *  
 *  Voc deve ter recebido uma cpia da Licena Pblica Geral GNU junto
 *  com este programa, Se no, veja em <http://www.gnu.org/licenses/>.
 * 
 *  @author Alberto Wagner <alberto@biblivre.org.br>
 *  @author Danniel Willian <danniel@biblivre.org.br>
 * 
 */

package mercury;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.apache.commons.fileupload.FileItem;

public class DigitalMediaDAO extends DAO {

    public final Integer uploadToDigitalMedia(FileItem file) {
        Connection con = null;
        Integer serial = 0;
        String filename = file.getName();

        if (filename.lastIndexOf('\\') != -1) {
            filename = filename.substring(filename.lastIndexOf('\\') + 1);
        }

        if (filename.lastIndexOf('/') != -1) {
            filename = filename.substring(filename.lastIndexOf('/') + 1);
        }

        try {
            InputStream is = file.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            serial = getNextSerial("digital_media_id_seq");
            if (serial != 0) {
                con = getDataSource().getConnection();
                con.setAutoCommit(false);
                String sql = " INSERT INTO digital_media " + " (id, file, mime_type, file_name) "
                        + " VALUES (?, ?, ?, ?) ";
                PreparedStatement pstm = con.prepareStatement(sql);
                pstm.setInt(1, serial);
                pstm.setBinaryStream(2, bis, (int) file.getSize());
                pstm.setString(3, file.getContentType());
                pstm.setString(4, filename);
                pstm.executeUpdate();
                pstm.close();
                is.close();
                con.commit();
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw new DAOException(e.getMessage());
        } finally {
            closeConnection(con);
        }
        return serial;
    }

    public final DigitalMediaDTO getDigitalMedia(int id, String fileName) {
        Connection con = null;
        byte[] blob = null;
        DigitalMediaDTO dto = new DigitalMediaDTO();
        try {
            con = getDataSource().getConnection();
            String sql = " SELECT file, file_name, mime_type FROM digital_media " + " WHERE id = ? "
                    + " AND file_name = ? ;";
            PreparedStatement pst = con.prepareStatement(sql);
            pst.setInt(1, id);
            pst.setString(2, fileName);
            con.setAutoCommit(false);
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                blob = rs.getBytes(1);
                if (blob == null) {
                    return null;
                }
                dto.setIn(new ByteArrayInputStream(blob));
                dto.setLength((int) blob.length);
                dto.setFileName(rs.getString(2));
                dto.setMimeType(rs.getString(3));
            }
            return dto;
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw new DAOException(e.getMessage());
        } finally {
            closeConnection(con);
        }
    }

}