package com.iaworld.oa.web.infostore.servlet;import com.iaworld.oa.infostore.Document;
import com.iaworld.oa.infostore.InfoStore;
import com.iaworld.oa.infostore.InfoStoreFactory;
import com.iaworld.oa.web.login.AppContext;
import com.iaworld.oa.web.login.Config;
import com.iaworld.oa.web.InfoStoreEnvImpl;
import com.iaworld.util.StreamUtil;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.FileInputStream;/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: Jul 18, 2003
 * Time: 10:41:00 AM
 * To change this template use Options | File Templates.
 */
public class DownloadFileServlet
    extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException
    {
        try
        {
            boolean download = false;            Config cfg = AppContext.getAppConfig(this);            if (request.getParameter("download") != null) download = true;
            HttpSession session = request.getSession();
        AppContext ctx = AppContext.getAppContext(session);
            String repositoryPath = cfg.getDocumentRoot();
            InfoStore infoStore = InfoStoreFactory.getInfoStore(new InfoStoreEnvImpl(ctx));
            Integer docId = new Integer(request.getParameter("docId"));
            Document doc = infoStore.getDocument(docId);
            java.io.File file = null;
            file = new java.io.File(repositoryPath + doc.getParentPath() + "/" + doc.getName());
            FileInputStream fileIn = null;
            try
            {
                long fileLen = file.length();
                fileIn = new FileInputStream(file);
                String contentType = getServletContext().getMimeType(file.getAbsolutePath());
                System.out.println("<<<<<<<<<<<<< File Content Type: " + contentType);
                if (contentType == null || contentType.equals("application/octet-stream") || download)
                {
                    System.out.println("<<<<<<<<<<<<<<<: Download!");
                    response.setContentType("application/octet-stream; charset=utf8");
                    String fileName = new String(doc.getName().getBytes(), "iso8859-1");
                    response.setHeader("Content-Disposition", "attachment;filename=" + fileName);                }
                else
                {
                    System.out.println("<<<<<<<<<<<<<<<: Known MIME");
                    response.setHeader("Content-Type", contentType);
                }
                response.setContentLength((int) fileLen);
                StreamUtil.write(fileIn, response.getOutputStream());
                response.getOutputStream().flush();
                response.getOutputStream().close();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                try
                {
                    if (fileIn != null) fileIn.close();                }
                catch (Exception e)
                {                }
            }
        }
        catch (Exception e)
        {
            throw new ServletException(e.getMessage());
        }    }    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException
    {
        doGet(request, response);
    }
}