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

src-main.org.awakefw.sql.jdbc.BlobHttp Maven / Gradle / Ivy

/*
 * Awake File: Easy file upload & download through HTTP with Java
 * Awake SQL: Remote JDBC access through HTTP.                                    
 * Copyright (C) 2012, Kawan Softwares S.A.S.
 * (http://www.awakeframework.org). All rights reserved.                                
 *                                                                               
 * Awake File/SQL is free software; you can redistribute it and/or                 
 * modify it under the terms of the GNU Lesser General Public                    
 * License as published by the Free Software Foundation; either                  
 * version 2.1 of the License, or (at your option) any later version.            
 *                                                                               
 * Awake File/SQL 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             
 * Lesser General Public License for more details.                               
 *                                                                               
 * You should have received a copy of the GNU Lesser General Public              
 * License along with this library; if not, write to the Free Software           
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 * 02110-1301  USA
 *
 * Any modifications to this file must keep this entire header
 * intact.
 */

// Last Updates: 
// 18/11/11 17:40 NDP : BlobHttp creation
// 18/11/11 20:25 NDP : BlobHttp: free() does the delete of underlying file

package org.awakefw.sql.jdbc;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;

import org.apache.commons.io.IOUtils;
import org.awakefw.file.util.KeepTempFilePolicyParms;
import org.awakefw.file.util.Tag;

/**
 * Awake Blob. 
*/ public class BlobHttp implements Blob { private static final String BLOB_IS_NOT_ACCESSIBLE_ANYMORE = "BLOB is not accessible anymore."; public static final String BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION = Tag.AWAKE + "BLOB method is not yet implemented in Awake SQL."; /** The file that wrap the Blob */ private File file = null; /** * Constructor * * @param file * a file that is wrapped by this blob */ public BlobHttp(File file) { this.file = file; } /** * Returns the number of bytes in the BLOB value designated by * this Blob object. * * @return length of the BLOB in bytes * @exception SQLException * if there is an error accessing the length of the * BLOB * @since 1.2 */ public long length() throws SQLException { if (file == null) { return 0; } if (!file.exists()) { throw new SQLException( BLOB_IS_NOT_ACCESSIBLE_ANYMORE); } return this.file.length(); } /** * Retrieves all or part of the BLOB value that this * Blob object represents, as an array of bytes. This * byte array contains up to length consecutive * bytes starting at position pos. * * @param pos * the ordinal position of the first byte in the * BLOB value to be extracted; the first byte is at * position 1 * @param length * the number of consecutive bytes to be copied * @return a byte array containing up to length consecutive * bytes from the BLOB value designated by this * Blob object, starting with the byte at position * pos * @exception SQLException * if there is an error accessing the BLOB value * @see #setBytes * @since 1.2 */ public byte[] getBytes(long pos, int length) throws SQLException { if (file == null) { return null; } if (!file.exists()) { throw new SQLException( BLOB_IS_NOT_ACCESSIBLE_ANYMORE); } InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); byte[] b = new byte[length]; in.skip(pos - 1); in.read(b); return b; } catch (IOException e) { throw new SQLException(e); } finally { IOUtils.closeQuietly(in); } } /** * Retrieves the BLOB value designated by this * Blob instance as a stream. * * @return a stream containing the BLOB data * @exception SQLException * if there is an error accessing the BLOB value * @see #setBinaryStream * @since 1.2 */ public InputStream getBinaryStream() throws SQLException { if (file == null) { return null; } if (!file.exists()) { throw new SQLException( BLOB_IS_NOT_ACCESSIBLE_ANYMORE); } InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); return in; } catch (IOException e) { throw new SQLException(e); } } /** * Retrieves the byte position at which the specified byte array * pattern begins within the BLOB value that this * Blob object represents. The search for pattern * begins at position start. * * @param pattern * the byte array for which to search * @param start * the position at which to begin searching; the first position * is 1 * @return the position at which the pattern appears, else -1 * @exception SQLException * if there is an error accessing the BLOB * @since 1.2 */ public long position(byte[] pattern, long start) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } /** * Retrieves the byte position in the BLOB value designated by * this Blob object at which pattern begins. The * search begins at position start. * * @param pattern * the Blob object designating the BLOB * value for which to search * @param start * the position in the BLOB value at which to begin * searching; the first position is 1 * @return the position at which the pattern begins, else -1 * @exception SQLException * if there is an error accessing the BLOB value * @since 1.2 */ public long position(Blob pattern, long start) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } // // // -------------------------- JDBC 3.0 ----------------------------------- // // /** * Writes the given array of bytes to the BLOB value that this * Blob object represents, starting at position * pos, and returns the number of bytes written. * * @param pos * the position in the BLOB object at which to start * writing * @param bytes * the array of bytes to be written to the BLOB * value that this Blob object represents * @return the number of bytes written * @exception SQLException * if there is an error accessing the BLOB value * @see #getBytes * @since 1.4 */ public int setBytes(long pos, byte[] bytes) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } /** * Writes all or part of the given byte array to the * BLOB value that this Blob object represents and * returns the number of bytes written. Writing starts at position * pos in the BLOB value; len bytes * from the given byte array are written. * * @param pos * the position in the BLOB object at which to start * writing * @param bytes * the array of bytes to be written to this BLOB * object * @param offset * the offset into the array bytes at which to start * reading the bytes to be set * @param len * the number of bytes to be written to the BLOB * value from the array of bytes bytes * @return the number of bytes written * @exception SQLException * if there is an error accessing the BLOB value * @see #getBytes * @since 1.4 */ public int setBytes(long pos, byte[] bytes, int offset, int len) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } /** * Retrieves a stream that can be used to write to the BLOB * value that this Blob object represents. The stream begins at * position pos. * * @param pos * the position in the BLOB value at which to start * writing * @return a java.io.OutputStream object to which data can be * written * @exception SQLException * if there is an error accessing the BLOB value * @see #getBinaryStream * @since 1.4 */ public OutputStream setBinaryStream(long pos) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } /** * Truncates the BLOB value that this Blob object * represents to be len bytes in length. * * @param len * the length, in bytes, to which the BLOB value * that this Blob object represents should be * truncated * @exception SQLException * if there is an error accessing the BLOB value * @since 1.4 */ public void truncate(long len) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } /** * This method frees the Blob object and releases the resources * that it holds. The object is invalid once the free method is * called. *

* After free has been called, any attempt to invoke a method * other than free will result in a SQLException * being thrown. If free is called multiple times, the * subsequent calls to free are treated as a no-op. *

* * @throws SQLException * if an error occurs releasing the Blob's resources * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method * @since 1.6 */ public void free() throws SQLException { if (!KeepTempFilePolicyParms.KEEP_TEMP_FILE) { this.file.delete(); } } /** * Returns an InputStream object that contains a partial * Blob value, starting with the byte specified by pos, which * is length bytes in length. * * @param pos * the offset to the first byte of the partial value to be * retrieved. The first byte in the Blob is at * position 1 * @param length * the length in bytes of the partial value to be retrieved * @return InputStream through which the partial * Blob value can be read. * @throws SQLException * if pos is less than 1 or if pos is greater than the number of * bytes in the Blob or if pos + length is greater * than the number of bytes in the Blob * * @exception SQLFeatureNotSupportedException * if the JDBC driver does not support this method * @since 1.6 */ public InputStream getBinaryStream(long pos, long length) throws SQLException { throw new SQLFeatureNotSupportedException( BLOB_FEATURE_NOT_SUPPORTED_IN_THIS_VERSION); } } // EOF





© 2015 - 2025 Weber Informatics LLC | Privacy Policy