package com.idega.block.media.servlet;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.idega.idegaweb.IWMainApplication;
import com.idega.util.database.ConnectionBroker;
/**
* Title: com.idega.block.media.business.MediaOutputWriter
* Description: Writes media from database to outputstream
* Copyright: Copyright (c) 2001
* Company: idega software
* @author Aron Birkir aron@idega.is
* @version 1.0
*/
public class MediaOutputWriter {
public void doPost(HttpServletRequest request, HttpServletResponse response,IWMainApplication iwma) throws IOException{
Connection conn = null;
Statement Stmt = null;
ResultSet RS = null;
String mmProp = iwma.getSettings().getProperty(MediaServlet.USES_OLD_TABLES);
boolean usesOldTables = false;
if(mmProp!=null) {
usesOldTables = true;
}
String contentType=null;
String sql = "select file_value,mime_type from ic_file where ic_file_id=";
String mediaId = request.getParameter(MediaServlet.PARAMETER_NAME);
/**
* @todo : remove temporary backward compatability when no longer needed
*/
if( mediaId == null){
mediaId = request.getParameter("image_id");
if( mediaId != null){
//sql = "select image_value,content_type from image where image_id=";
sql = "select image_value from image where image_id=";
}
else{
mediaId = request.getParameter("file_id");
if(mediaId!=null) {
sql = "select file_value,content_type from file_ where file_id=";
}
}
}
else if( usesOldTables ){//special case for the Image object
sql = "select image_value from image where image_id=";
}
try{
if( (mediaId!=null) && (!mediaId.equalsIgnoreCase("-1")) ){
conn = ConnectionBroker.getConnection();
if( conn!=null ){
Stmt = conn.createStatement();
RS = Stmt.executeQuery(sql+mediaId);
InputStream myInputStream = null;
if( (RS!=null) && (RS.next()) ){
contentType = RS.getString(2);
myInputStream = RS.getBinaryStream(1);
}
// debug
if(myInputStream!=null){
if (!RS.wasNull()){
if(contentType!=null) {
response.setContentType(contentType);
}
DataOutputStream output = new DataOutputStream(response.getOutputStream() );
byte buffer[]= new byte[1024];
int noRead = 0;
noRead = myInputStream.read( buffer, 0, 1024 );
//Write out the file to the browser
while ( noRead != -1 ){
output.write( buffer, 0, noRead );
noRead = myInputStream.read( buffer, 0, 1024 );
}
output.flush();
output.close();
myInputStream.close();
}
else {
System.err.println("MediaServlet: Was null");
}
}
else {
System.err.println("InputStream is null");
}
}
}
}
catch (Exception E) {
E.printStackTrace(System.err);
}
finally{
// do not hide an existing exception
try {
if (RS != null) {
RS.close();
}
}
catch (SQLException resultCloseEx) {
System.err.println("MediaOutputWriter] result set could not be closed");
resultCloseEx.printStackTrace(System.err);
}
try{
if(Stmt != null){
Stmt.close();
}
}
catch(SQLException ex){
System.err.println("Exception in "+this.getClass().getName()+" streaming data to browser "+ex.getMessage());
ex.printStackTrace(System.err);
}
if(conn!=null){
ConnectionBroker.freeConnection(conn);
}
}
}//end service
}