X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fentity%2FEntityImages.java;h=7221e9b902f6389db91b64c3ed31fd062501dc91;hb=259a8dadb6be28e48c7ffbd15de888eab066064c;hp=1569a1c0607d1d32e55ff33680ce4edc879b58d6;hpb=1442c0fdda9fd01f150d0c301277cec6479eeb7c;p=mir.git diff --git a/source/mircoders/entity/EntityImages.java b/source/mircoders/entity/EntityImages.java index 1569a1c0..7221e9b9 100755 --- a/source/mircoders/entity/EntityImages.java +++ b/source/mircoders/entity/EntityImages.java @@ -30,31 +30,19 @@ package mircoders.entity; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; - -import mir.config.MirPropertiesConfiguration; import mir.log.LoggerWrapper; -import mir.misc.FileUtil; -import mir.storage.StorageObject; import mir.storage.StorageObjectFailure; +import mir.util.StreamCopier; import mircoders.media.ImageProcessor; -import org.postgresql.largeobject.BlobInputStream; -import org.postgresql.largeobject.LargeObject; -import org.postgresql.largeobject.LargeObjectManager; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.sql.SQLException; /** - * Diese Klasse enth?lt die Daten eines MetaObjekts * * @author RK, mh, mir-coders - * @version $Id: EntityImages.java,v 1.21.2.2 2003/11/28 21:21:33 rk Exp $ + * @version $Id: EntityImages.java,v 1.21.2.7 2005/01/23 15:36:04 zapata Exp $ */ @@ -73,123 +61,49 @@ public class EntityImages extends EntityUploadedMedia logger = new LoggerWrapper("Entity.UploadedMedia.Images"); } - public EntityImages(StorageObject theStorage) { - this(); - setStorage(theStorage); - } - - // - // methods - - + /** + * Retrieves the image data + */ public InputStream getImage() throws StorageObjectFailure { - logger.debug("EntityImages.getimage started"); - java.sql.Connection con=null; - Statement stmt=null; - BlobInputStream in; - InputStream img_in = null; try { - con = theStorageObject.getPooledCon(); - con.setAutoCommit(false); - LargeObjectManager lom; - java.sql.Connection jCon; - stmt = con.createStatement(); - ResultSet rs = theStorageObject.executeSql(stmt, - "select image_data from images where id="+getId()); - jCon = ((com.codestudio.sql.PoolManConnectionHandle)con) - .getNativeConnection(); - lom = ((org.postgresql.Connection)jCon).getLargeObjectAPI(); - if(rs!=null) { - if (rs.next()) { - LargeObject lob = lom.open(rs.getInt(1)); - in = (BlobInputStream)lob.getInputStream(); - img_in = new ImageInputStream(in, con, stmt); - } - rs.close(); - } + return database.getBinaryField("select image_data from images where id="+getId()); } - catch (Throwable t) { - logger.error("EntityImages.getImage failed: " + t.toString()); - t.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); - - try { - con.setAutoCommit(true); - } - catch (Throwable e) { - logger.error("EntityImages.getImage resetting transaction mode failed: " + e.toString()); - e.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); - } - - try { - theStorageObject.freeConnection(con, stmt); - } - catch (Throwable e) { - logger.error("EntityImages.getImage freeing connection failed: " +e.toString()); - } - - throwStorageObjectFailure(t, "EntityImages -- getImage failed: "); + catch (SQLException e) { + throw new StorageObjectFailure(e); } - return img_in; } - public void setImage(InputStream in, String type) throws StorageObjectFailure { - - if (in != null) { - - Connection con = null; - PreparedStatement pstmt = null; - File f = null; + /** + * Processes and saves image data + */ + public void setImage(InputStream anInputStream, String type) throws StorageObjectFailure { + if (anInputStream != null) { try { - logger.debug("EntityImages.settimage :: making internal representation of image"); + ByteArrayOutputStream inputData = new ByteArrayOutputStream(); + StreamCopier.copy(anInputStream, inputData); - f = File.createTempFile("mir", ".tmp", - new File(MirPropertiesConfiguration.instance().getString("TempDir"))); - FileUtil.write(f, in); - ImageProcessor processor = new ImageProcessor(f); + ImageProcessor processor = new ImageProcessor(inputData.toByteArray()); + processor.descaleImage(maxImageSize, minDescaleRatio, minDescaleReduction); - con = theStorageObject.getPooledCon(); - con.setAutoCommit(false); - LargeObjectManager lom; - java.sql.Connection connection; - connection = ((com.codestudio.sql.PoolManConnectionHandle)con).getNativeConnection(); + ByteArrayOutputStream imageData = new ByteArrayOutputStream(); + processor.writeScaledData(imageData, type); + database.setBinaryField("image_data", getId(), imageData.toByteArray()); - lom = ((org.postgresql.Connection) connection).getLargeObjectAPI(); + setFieldValue("img_height", new Integer(processor.getScaledHeight()).toString()); + setFieldValue("img_width", new Integer(processor.getScaledWidth()).toString()); - int oidImage = lom.create(); - LargeObject lobImage = lom.open(oidImage); - processor.descaleImage(maxImageSize, minDescaleRatio, minDescaleReduction); - processor.writeScaledData(lobImage.getOutputStream(), type); - lobImage.close(); - setValueForProperty("img_height", new Integer(processor.getScaledHeight()).toString()); - setValueForProperty("img_width", new Integer(processor.getScaledWidth()).toString()); - - int oidIcon = lom.create(); - LargeObject lobIcon = lom.open(oidIcon); + imageData.reset(); processor.descaleImage(maxIconSize, minDescaleRatio, minDescaleReduction); - processor.writeScaledData(lobIcon.getOutputStream(), type); - lobIcon.close(); + processor.writeScaledData(imageData, type); + database.setBinaryField("icon_data", getId(), imageData.toByteArray()); - setValueForProperty("icon_height", new Integer(processor.getScaledHeight()).toString()); - setValueForProperty("icon_width", new Integer(processor.getScaledWidth()).toString()); + setFieldValue("icon_height", new Integer(processor.getScaledHeight()).toString()); + setFieldValue("icon_width", new Integer(processor.getScaledWidth()).toString()); - setValueForProperty("image_data", new Integer(oidImage).toString()); - setValueForProperty("icon_data", new Integer(oidIcon).toString()); update(); } catch (Exception e) { - throwStorageObjectFailure(e, "settimage :: setImage failed: "); - } - finally { - try { - if (con!=null) - con.setAutoCommit(true); - // get rid of the temp. file - f.delete(); - } catch (SQLException e) { - throwStorageObjectFailure(e,"Resetting transaction-mode failed"); - } - if (con!=null) - theStorageObject.freeConnection(con,pstmt); + throw new StorageObjectFailure(e); } } } @@ -201,84 +115,11 @@ public class EntityImages extends EntityUploadedMedia * It will also take care of closing the OutputStream. */ public InputStream getIcon() throws StorageObjectFailure { - Connection con=null; - Statement stmt=null; - BlobInputStream in=null; - ImageInputStream img_in=null; - try { - con = theStorageObject.getPooledCon(); - con.setAutoCommit(false); - LargeObjectManager lom; - java.sql.Connection jCon; - stmt = con.createStatement(); - ResultSet rs = theStorageObject.executeSql(stmt, "select icon_data from images where id="+getId()); - jCon = ((com.codestudio.sql.PoolManConnectionHandle)con) - .getNativeConnection(); - lom = ((org.postgresql.Connection)jCon).getLargeObjectAPI(); - if(rs!=null) { - if (rs.next()) { - LargeObject lob = lom.open(rs.getInt(1)); - in = (BlobInputStream)lob.getInputStream(); - img_in = new ImageInputStream( in, con ,stmt); - //img_data = rs.getBytes(1); - } - rs.close(); - } - } - catch (Throwable t) { - logger.error("EntityImages.getIcon failed: "+t.toString()); - t.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); - - try { - con.setAutoCommit(true); - } - catch (SQLException e) { - logger.error("EntityImages.getIcon resetting transaction mode failed: " + e.toString()); - e.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); - } - try { - theStorageObject.freeConnection(con, stmt); - } - catch (Throwable e) { - logger.error("EntityImages -- freeing connection failed: " + e.getMessage()); - } - - throwStorageObjectFailure(t, "EntityImages -- getIcon failed:"); + return database.getBinaryField("select icon_data from images where id="+getId()); } - - return img_in; - } - - /** - * a small wrapper class that allows us to store the DB connection resources - * that the BlobInputStream is using and free them upon closing of the stream - */ - private class ImageInputStream extends InputStream { - - InputStream _in; - Connection _con; - Statement _stmt; - - public ImageInputStream(BlobInputStream in, Connection con, - Statement stmt ) { - _in = in; - _con = con; - _stmt = stmt; - } - - public void close () throws IOException { - _in.close(); - try { - _con.setAutoCommit(true); - theStorageObject.freeConnection(_con,_stmt); - } catch (Exception e) { - throw new IOException("close(): "+e.toString()); - } - } - - public int read() throws IOException { - return _in.read(); + catch (SQLException e) { + throw new StorageObjectFailure(e); } } }