/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/servlet/delivery/ShowAttachmentMediaServlet.java $
* $Id: ShowAttachmentMediaServlet.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2007, 2008, 2009 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.tool.assessment.ui.servlet.delivery;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.content.api.ContentResource;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.exception.PermissionException;
import org.sakaiproject.exception.ServerOverloadException;
import org.sakaiproject.exception.TypeException;
import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAttachmentData;
import org.sakaiproject.tool.assessment.services.assessment.AssessmentService;
import org.sakaiproject.tool.assessment.util.TextFormat;
/**
* <p>
* Title: Samigo
* </p>
* <p>
* Description: Sakai Assessment Manager
* </p>
* <p>
* Copyright: Copyright (c) 2004 Sakai Project
* </p>
* <p>
* Organization: Sakai Project
* </p>
*
* @author Ed Smiley
* @version $Id: .java 17070 2006-10-12 00:07:52Z
* ktsao@stanford.edu $
*/
public class ShowAttachmentMediaServlet extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 2203681863823855810L;
private static Log log = LogFactory.getLog(ShowAttachmentMediaServlet.class);
public ShowAttachmentMediaServlet()
{
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
doPost(req,res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
String resourceId = req.getParameter("resourceId");
String mimeType = req.getParameter("mimeType");
String filename = req.getParameter("filename");
String cleanedFilename = TextFormat.convertPlaintextToFormattedTextNoHighUnicode(log, filename);
res.setHeader("Content-Disposition", "inline;filename=\"" + cleanedFilename +"\";");
log.debug("resourceId = " + resourceId);
log.debug("mimeType = " + mimeType);
log.debug("cleanedFilename = " + cleanedFilename);
// ** note that res.setContentType() must be called before
// res.getOutputStream(). see javadoc on this
res.setContentType(mimeType);
ContentResource cr = null;
byte[] media = null;
try {
// create a copy of the resource
cr = AssessmentService.getContentHostingService().getResource(resourceId);
if (cr == null) {
return;
}
media = cr.getContent();
if (media == null) {
return;
}
res.setContentLength((int) cr.getContentLength());
log.debug("**** media.length = " + media.length);
} catch (PermissionException e) {
log.warn("PermissionException from doPost(): " + e.getMessage());
} catch (IdUnusedException e) {
log.warn("IdUnusedException from doPost(): " + e.getMessage());
} catch (TypeException e) {
log.warn("TypeException from doPost(): " + e.getMessage());
} catch (ServerOverloadException e) {
log.warn("ServerOverloadException from doPost(): " + e.getMessage());
}
finally {
// in case of any exceptions above being caught, media would still be null
if (media == null) {
return;
}
}
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(media);
BufferedInputStream buf_inputStream = new BufferedInputStream(byteArrayInputStream);
ServletOutputStream outputStream = res.getOutputStream();
BufferedOutputStream buf_outputStream = null;
int count=0;
try{
buf_outputStream = new BufferedOutputStream(outputStream);
int i=0;
while ((i=buf_inputStream.read()) != -1){
// System.out.print(i);
buf_outputStream.write(i);
count++;
}
//res.setContentLength(count);
res.flushBuffer();
}
catch(Exception e){
log.warn(e.getMessage());
}
finally {
if (buf_outputStream != null) {
try {
buf_outputStream.close();
}
catch(IOException e) {
log.error(e.getMessage());
}
}
if (buf_inputStream != null) {
try {
buf_inputStream.close();
}
catch(IOException e) {
log.error(e.getMessage());
}
}
if (outputStream != null) {
try {
outputStream.close();
}
catch(IOException e) {
log.error(e.getMessage());
}
}
if (byteArrayInputStream != null) {
try {
byteArrayInputStream.close();
}
catch(IOException e) {
log.error(e.getMessage());
}
}
}
}
}