X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fentity%2FEntityImages.java;h=d495f0b784cbf5301d93852c4b9ab1a9b0283e6f;hb=50d223072c642a8e12e0fa99d378426ce2667926;hp=c085a7db630a5d13c76fe7fe234aaea85720c735;hpb=d0a53f777c4cd00509d4ab4a5b53893e42007212;p=mir.git diff --git a/source/mircoders/entity/EntityImages.java b/source/mircoders/entity/EntityImages.java index c085a7db..d495f0b7 100755 --- a/source/mircoders/entity/EntityImages.java +++ b/source/mircoders/entity/EntityImages.java @@ -5,6 +5,15 @@ import java.io.*; import java.util.*; import java.sql.*; +/* + * kind of hack for postgres non-standard LargeObjects that Poolman + * doesn't know about. see all the casting, LargeObj stuff in getIcon, getImage + * at some point when postgres has normal BLOB support, this should go. + */ +import org.postgresql.Connection; +import org.postgresql.largeobject.LargeObject; +import org.postgresql.largeobject.LargeObjectManager; + import mir.entity.*; import mir.misc.*; import mir.storage.*; @@ -17,14 +26,11 @@ import mir.storage.*; */ -public class EntityImages extends AbstractEntity implements Entity +public class EntityImages extends EntityUploadedMedia { - private static int instances; - public EntityImages() { super(); - instances++; } public EntityImages(StorageObject theStorage) { @@ -37,46 +43,63 @@ public class EntityImages extends AbstractEntity implements Entity - public byte[] getImage() + public byte[] getImage() throws StorageObjectException { theLog.printDebugInfo("--getimage started"); - Connection con=null;Statement stmt=null; + java.sql.Connection con=null;Statement stmt=null; byte[] img_data=null; try { con = theStorageObject.getPooledCon(); con.setAutoCommit(false); - stmt = con.createStatement(); - ResultSet rs = theStorageObject.executeSql(stmt,"select image_data from images where id="+getId()); + 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()) { - img_data = rs.getBytes(1); - } - rs.close(); + if (rs.next()) { + LargeObject lob = lom.open(rs.getInt(1)); + img_data = lob.read(lob.size()); + System.err.println("LOB IMG SIZE: "+lob.size()); + lob.close(); + System.err.println("res set img NOT NULL2"); + //img_data = rs.getBytes(1); + } + rs.close(); } - } - catch (Exception e) {theLog.printDebugInfo("-- getImage gescheitert: "+e.toString());} - finally { - try {con.setAutoCommit(true); } catch (Exception e) {;} - theStorageObject.freeConnection(con,stmt); } + } catch (Exception e) { + e.printStackTrace(); + theLog.printError("EntityImages -- getImage failed"+e.toString()); + throwStorageObjectException(e, "EntityImages -- getImage failed: "); + } + finally { + try { + con.setAutoCommit(true); + } catch (Exception e) { + e.printStackTrace(); + theLog.printError( + "EntityImages -- getImage reseting transaction mode failed" + +e.toString()); + } + theStorageObject.freeConnection(con,stmt); + } return img_data; } - public void setImage(byte[] uploadData, String imageType) - { - int type = 0; + public void setImage(byte[] uploadData) + throws StorageObjectException { - //hack -mh - if (imageType.equals("1")) - type = 1; - if (uploadData!=null) { - Connection con=null;PreparedStatement pstmt=null; + java.sql.Connection con=null;PreparedStatement pstmt=null; try { theLog.printDebugInfo("settimage :: making internal representation of image"); - WebdbImage webdbImage= new WebdbImage(uploadData,type); + WebdbImage webdbImage= new WebdbImage(uploadData); theLog.printDebugInfo("settimage :: made internal representation of image"); byte[] imageData = webdbImage.getImage(); theLog.printDebugInfo("settimage :: getImage"); @@ -89,23 +112,39 @@ public class EntityImages extends AbstractEntity implements Entity theLog.printDebugInfo("settimage :: trying to insert image"); // setting values - String sql = "update images set img_height='"+webdbImage.getImageHeight() + + LargeObjectManager lom; + java.sql.Connection jCon; + jCon = ((com.codestudio.sql.PoolManConnectionHandle)con) + .getNativeConnection(); + lom = ((org.postgresql.Connection)jCon).getLargeObjectAPI(); + int oidImage = lom.create(); + int oidIcon = lom.create(); + LargeObject lobImage = lom.open(oidImage); + LargeObject lobIcon = lom.open(oidIcon); + lobImage.write(imageData); + lobIcon.write(iconData); + lobImage.close(); + lobIcon.close(); + String sql = "update images set img_height='" + +webdbImage.getImageHeight() + "',img_width='" + webdbImage.getImageWidth() + "',icon_height='" + webdbImage.getIconHeight() + - "',icon_width='" + webdbImage.getIconWidth() + "', image_data=?, icon_data=? where id="+getId(); + "',icon_width='" + webdbImage.getIconWidth() + + "', image_data="+oidImage+", icon_data="+oidIcon + +" where id="+getId(); theLog.printDebugInfo("settimage :: updating sizes: "+ sql); pstmt = con.prepareStatement(sql); - pstmt.setBytes(1, imageData); - pstmt.setBytes(2, iconData); + //pstmt.setBytes(1, imageData); + //pstmt.setBytes(2, iconData); pstmt.executeUpdate(); sql="update content set is_produced='0' where to_media="+getId(); pstmt = con.prepareStatement(sql); pstmt.executeUpdate(); } } - catch (Exception e) {theLog.printDebugInfo("settimage :: setImage gescheitert: "+e.toString());} + catch (Exception e) {throwStorageObjectException(e, "settimage :: setImage gescheitert: ");} finally { - try {con.setAutoCommit(true); } catch (Exception e) {;} + try { if (con!=null) con.setAutoCommit(true); } catch (Exception e) {;} theStorageObject.freeConnection(con,pstmt); } } } @@ -115,7 +154,7 @@ public class EntityImages extends AbstractEntity implements Entity try { theStorageObject.executeUpdate("update content set is_produced='0' where to_media="+getId()); } catch (SQLException e) { - theLog.printError("EntityImages :: update :: failed!! "+ e.toString()); + throwStorageObjectException(e, "EntityImages :: update :: failed!! "); } } @@ -128,34 +167,52 @@ public class EntityImages extends AbstractEntity implements Entity super.setValues(theStringValues); } - public byte[] getIcon() + public byte[] getIcon() throws StorageObjectException { - Connection con=null;Statement stmt=null; + java.sql.Connection con=null;Statement stmt=null; byte[] img_data=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()); + 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) { + System.err.println("res set NOT NULL"); if (rs.next()) { - img_data = rs.getBytes(1); + LargeObject lob = lom.open(rs.getInt(1)); + img_data = lob.read(lob.size()); + System.err.println("LOB SIZE: "+lob.size()); + lob.close(); + System.err.println("res set NOT NULL2"); + //img_data = rs.getBytes(1); + System.err.println("res set NOT NULL3"); } - rs.close(); + rs.close(); } - } - catch (Exception e) {theLog.printDebugInfo("-- getIcon gescheitert: "+e.toString());} - finally { - try {con.setAutoCommit(true); } catch (Exception e) {;} - theStorageObject.freeConnection(con,stmt); } - - return img_data; + } catch (Exception e) { + e.printStackTrace(); + theLog.printError("EntityImages -- getIcon failed"+e.toString()); + throwStorageObjectException(e, "EntityImages -- getIcon failed:"); + } finally { + try { + con.setAutoCommit(true); + } catch (Exception e) { + e.printStackTrace(); + theLog.printError( + "EntityImages -- getIcon reseting transaction mode failed" + +e.toString()); + } + theStorageObject.freeConnection(con,stmt); + } + + return img_data; } - public void finalize() { - instances--; - super.finalize(); - } - }