/**
*
*/
package webctdbexport.server;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
import org.json.JSONException;
import org.json.JSONObject;
import webctdbexport.db.CmsFileContent;
import webctdbexport.test.TestRepository;
import webctdbexport.utils.DbUtils;
import webctdbexport.utils.MoodleRepository;
/** get_file servlet
*
* @author cmg
*
*/
public class GetFileServlet extends HttpServlet {
static Logger logger = Logger.getLogger(GetFileServlet.class.getName());
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String path = req.getPathInfo();
logger.log(Level.INFO, "GetFileServlet path="+path);
Session s = DbUtils.getSession();
try {
CmsFileContent fc = MoodleRepository.getFileContent(s, path);
if (fc==null) {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "no file content for "+path);
return;
}
String mimetype = fc.getCmsMimetype()!=null ? fc.getCmsMimetype().getMimetype() : "application/binary";
String charset = fc.getCmsCeCharset()!=null ? fc.getCmsCeCharset().getCharacterSet() : null;
resp.setContentType(mimetype+(charset!=null ? "; charset="+charset : ""));
resp.setContentLength((int)fc.getContent().length());
InputStream is = fc.getContent().getBinaryStream();
OutputStream os = resp.getOutputStream();
byte buf[] = new byte[200000];
while (true) {
int cnt = is.read(buf);
if (cnt<0)
break;
os.write(buf, 0, cnt);
}
os.close();
} catch (SQLException e) {
logger.log(Level.SEVERE, "getting file "+path, e);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "getting file "+path+": "+e);
return;
}
finally {
s.close();
}
}
}