Skip to content
Snippets Groups Projects
Commit 1ec56e82 authored by felmer's avatar felmer
Browse files

LMS-888 use solution from 08.04.x

SVN: 11499
parent 6eb07c3c
No related branches found
No related tags found
No related merge requests found
......@@ -31,5 +31,6 @@
<classpathentry kind="lib" path="/libraries/jaxb/jaxb-api.jar" sourcepath="/libraries/jaxb/jaxb-api-src.zip"/>
<classpathentry kind="lib" path="/libraries/jaxb/jaxb-impl.jar"/>
<classpathentry kind="lib" path="/libraries/jaxb/jsr173_1.0_api.jar"/>
<classpathentry kind="lib" path="/libraries/activation/activation.jar"/>
<classpathentry kind="output" path="targets/classes"/>
</classpath>
......@@ -31,6 +31,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
......@@ -40,6 +41,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
......@@ -71,6 +73,10 @@ public class DatasetDownloadServlet extends HttpServlet
static final String BINARY_CONTENT_TYPE = "binary";
static final String PLAIN_TEXT_CONTENT_TYPE = "text/plain";
private static final MimetypesFileTypeMap MIMETYPES = new MimetypesFileTypeMap();
private static final long serialVersionUID = 1L;
protected static final Logger operationLog =
......@@ -79,6 +85,24 @@ public class DatasetDownloadServlet extends HttpServlet
protected static final Logger notificationLog =
LogFactory.getLogger(LogCategory.NOTIFY, DatasetDownloadServlet.class);
// @Private
static String getMimeType(File f, boolean plainTextMode)
{
if (plainTextMode)
{
return BINARY_CONTENT_TYPE;
} else
{
if (FilenameUtils.getExtension(f.getName()).length() == 0)
{
return PLAIN_TEXT_CONTENT_TYPE;
} else
{
return MIMETYPES.getContentType(f.getName().toLowerCase());
}
}
}
private static final Comparator<File> FILE_COMPARATOR = new Comparator<File>()
{
public int compare(File file1, File file2)
......@@ -214,7 +238,7 @@ public class DatasetDownloadServlet extends HttpServlet
RenderingContext context =
new RenderingContext(rootDir, requestParams.getURLPrefix(), requestParams
.getPathInfo());
renderPage(rendererFactory, response, dataSet, context);
renderPage(rendererFactory, response, dataSet, context, requestParams);
}
private IRendererFactory createRendererFactory(boolean plainTextMode)
......@@ -290,7 +314,8 @@ public class DatasetDownloadServlet extends HttpServlet
}
private void renderPage(IRendererFactory rendererFactory, HttpServletResponse response,
ExternalDataPE dataSet, RenderingContext renderingContext) throws IOException
ExternalDataPE dataSet, RenderingContext renderingContext, RequestParams requestParams)
throws IOException
{
File file = renderingContext.getFile();
if (file.exists() == false)
......@@ -302,7 +327,7 @@ public class DatasetDownloadServlet extends HttpServlet
createPage(rendererFactory, response, dataSet, renderingContext, file);
} else
{
deliverFile(response, dataSet, file);
deliverFile(response, dataSet, file, requestParams.isPlainTextMode());
}
}
......@@ -354,8 +379,8 @@ public class DatasetDownloadServlet extends HttpServlet
}
}
private void deliverFile(final HttpServletResponse response, ExternalDataPE dataSet, File file)
throws IOException, FileNotFoundException
private void deliverFile(final HttpServletResponse response, ExternalDataPE dataSet, File file,
boolean plainTextMode) throws IOException, FileNotFoundException
{
long size = file.length();
if (operationLog.isInfoEnabled())
......@@ -367,7 +392,7 @@ public class DatasetDownloadServlet extends HttpServlet
response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
ServletOutputStream outputStream = null;
FileInputStream fileInputStream = null;
response.setContentType(BINARY_CONTENT_TYPE);
response.setContentType(getMimeType(file, plainTextMode));
try
{
outputStream = response.getOutputStream();
......
......@@ -155,6 +155,17 @@ public class DatasetDownloadServletTest
context.assertIsSatisfied();
}
@Test
public void testGetMimetype()
{
assertEquals("image/tiff", DatasetDownloadServlet.getMimeType(new File("/some/image.tiff"), false));
assertEquals("binary", DatasetDownloadServlet.getMimeType(new File("/some/image.tiff"), true));
assertEquals("image/tiff", DatasetDownloadServlet.getMimeType(new File("/some/image.TIF"), false));
assertEquals("binary", DatasetDownloadServlet.getMimeType(new File("/some/image.TIF"), true));
assertEquals("application/pdf", DatasetDownloadServlet.getMimeType(new File("doc.pdf"), false));
assertEquals("text/plain", DatasetDownloadServlet.getMimeType(new File("/dir/filewithoutext"), false));
}
@Test
public void testInitialDoGet() throws Exception
{
......@@ -305,7 +316,7 @@ public class DatasetDownloadServletTest
context.checking(new Expectations()
{
{
one(response).setContentType(DatasetDownloadServlet.BINARY_CONTENT_TYPE);
one(response).setContentType("text/plain");
one(response).setContentLength(EXAMPLE_FILE_CONTENT.length());
one(response).setHeader("Content-Disposition",
"inline; filename=" + EXAMPLE_FILE_NAME);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment