package com.idega.io;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.driver.OracleResultSet;
import com.idega.util.IWTimestamp;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company: idega multimedia
* @author <a href="mailto:aron@idega.is">aron@idega.is</a>
* @version 1.0
*/
public class ImageSave {
public static int saveImageToDB(Connection Conn,int imageId, InputStream in,String ContentType,String FileName,boolean NewImage){
if (Conn!=null){
String dataBaseType = com.idega.data.DatastoreInterface.getDataStoreType(Conn);
if( !dataBaseType.equalsIgnoreCase("oracle") ) {
return saveImageToDB(imageId,-1,in,ContentType,FileName,"-1", "-1",NewImage);
}
else {
return saveImageToOracleDB(imageId,-1,in,ContentType,FileName,"-1","-1",NewImage);
}
}
else {
return -1;
}
}
public static int saveImageToDataBase(int imageId, int parentImageId, InputStream in,String ContentType,String FileName, String width, String height, boolean NewImage){
Connection Conn = null;
try{
Conn = com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity").getConnection();
String dataBaseType = com.idega.data.DatastoreInterface.getDataStoreType(Conn);
if( !dataBaseType.equalsIgnoreCase("oracle") ) {
return saveImageToDB(imageId,parentImageId,in,ContentType,FileName,width, height,NewImage);
}
else {
return saveImageToOracleDB(imageId,parentImageId,in,ContentType,FileName,width, height,NewImage);
}
}
catch(SQLException e){
e.printStackTrace(System.err);
return -1;
}
finally{
if(Conn != null ) {
com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity").freeConnection(Conn);
}
}
}
public static int saveImageToDB(int imageId, int parentImageId, InputStream in,String ContentType,String FileName, String width, String height, boolean NewImage){
int id = -1;
String statement ;
Connection Conn = null;
boolean dimensions = true;
if(width.equalsIgnoreCase("-1")) {
dimensions = false;
}
try{
Conn = com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity").getConnection();
if(Conn== null) {
return id;
}
if(NewImage){
id = com.idega.data.EntityControl.createUniqueID(com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity"));
if( dimensions ) {
statement = "insert into image (image_id,image_value,content_type,image_name,date_added,from_file,parent_id,width,height) values("+id+",?,?,?,'"+IWTimestamp.getTimestampRightNow().toString()+"','N',"+parentImageId+",?,?)";
}
else {
statement = "insert into image (image_id,image_value,content_type,image_name,date_added,from_file,parent_id) values("+id+",?,?,?,'"+IWTimestamp.getTimestampRightNow().toString()+"','N',"+parentImageId+")";
}
}
else{
if( dimensions ) {
statement = "update image set image_value=?,content_type=?,image_name=?,width=?,height=? where image_id="+imageId;
}
else {
statement = "update image set image_value=?,content_type=?,image_name=? where image_id="+imageId;
}
}
Conn.setAutoCommit(false);
BufferedInputStream bin = new BufferedInputStream(in);
PreparedStatement PS = Conn.prepareStatement(statement);
PS.setBinaryStream(1, bin, bin.available() );
PS.setString(2, ContentType );
PS.setString(3, FileName );
if(dimensions){
PS.setString(4, width );
PS.setString(5, height );
}
PS.execute();
PS.close();
Conn.commit();
Conn.setAutoCommit(true);
}
catch(SQLException ex){ex.printStackTrace(); System.err.println( "error saving to db");}
catch(Exception ex){ex.printStackTrace();}
finally{
if(Conn != null) {
com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity").freeConnection(Conn);
}
}
return id;
}
public static int saveImageToOracleDB(int imageId, int parentImageId, InputStream in,String ContentType,String FileName, String width, String height, boolean NewImage){
int id = -1;
String statement ;
Connection Conn = null;
boolean dimensions = false;
if(width.equalsIgnoreCase("-1")) {
dimensions = false;
}
System.out.println("ImageSave : width ="+width);
System.out.println("ImageSave : height ="+height);
try{
Conn = com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity").getConnection();
if(Conn == null) {
return id;
}
if(NewImage){
id = com.idega.data.EntityControl.createUniqueID(com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity"));
if(dimensions) {
statement = "insert into image (image_id,image_value,content_type,image_name,width,height,date_added,from_file,parent_id) values("+id+",?,?,?,?,?,"+IWTimestamp.RightNow().toOracleString()+",'N',"+parentImageId+")";
}
else {
statement = "insert into image (image_id,image_value,content_type,image_name,date_added,from_file,parent_id) values("+id+",?,?,?,"+IWTimestamp.RightNow().toOracleString()+",'N',"+parentImageId+")";
}
}
else{
if(dimensions) {
statement = "update image set image_value=?,content_type=?,image_name=?,width=?,height=? where image_id='"+imageId+"'";
}
else {
statement = "update image set image_value=?,content_type=?,image_name=? where image_id='"+imageId+"'";
}
}
oracle.sql.BLOB blob;
System.out.println(statement);
Conn.setAutoCommit(false);
PreparedStatement myPreparedStatement = Conn.prepareStatement ( statement );
myPreparedStatement.setString(1, "00000001");// 00000001 i sta� hins venjulega empty_blob()
myPreparedStatement.setString(2, ContentType );
myPreparedStatement.setString(3, FileName );
if(dimensions){
myPreparedStatement.setString(4, width );
myPreparedStatement.setString(5, height );
}
myPreparedStatement.execute();
myPreparedStatement.close();
Conn.commit();
Conn.setAutoCommit(false);
Statement stmt2 = Conn.createStatement();
if(!NewImage) {
id = imageId;
}
String cmd = "SELECT image_value FROM image WHERE image_id ='"+id+"' FOR UPDATE ";
ResultSet RS2 = stmt2.executeQuery(cmd);
RS2.next();
blob = ((OracleResultSet)RS2).getBLOB(1);
// write the array of binary data to a BLOB
OutputStream outstream = blob.getBinaryOutputStream();
int size = blob.getBufferSize();
byte[] buffer = new byte[size];
int length = -1;
while ((length = in.read(buffer)) != -1) {
outstream.write(buffer, 0, length );
}
outstream.flush();
outstream.close();
in.close();
stmt2.close();
RS2.close();
Conn.commit();
Conn.setAutoCommit(true);
}
catch(SQLException ex){ex.printStackTrace(); System.err.println( "error saving to db");}
catch(Exception ex){ex.printStackTrace();}
finally{
if(Conn != null) {
com.idega.data.GenericEntity.getStaticInstance("com.idega.jmodule.image.data.ImageEntity").freeConnection(Conn);
}
}
return id;
}
}