NIFI-1539 - Add normalization of content type for content viewing

Add code to ContentViewerController to strip content type of any trailing parameters and lowercase the type and subtype.

Added function to ViewableContent to enable retrieving the original value of the content type if needed.

This closes #242

Signed-off-by: Matt Gilman <matt.c.gilman@gmail.com>
This commit is contained in:
Sönke Liebau 2016-02-22 08:25:42 +01:00 committed by Matt Gilman
parent 6af108c0ca
commit fc92441981
2 changed files with 18 additions and 2 deletions

View File

@ -59,7 +59,13 @@ public interface ViewableContent {
String getFileName();
/**
* @return mime type of the content
* @return mime type of the content, value is lowercase and stripped of all parameters if there were any
*/
String getContentType();
/**
* @return unchanged mime type of the content
*/
String getRawContentType();
}

View File

@ -150,6 +150,7 @@ public class ContentViewerController extends HttpServlet {
// buffer the content to support reseting in case we need to detect the content type or char encoding
try (final BufferedInputStream bis = new BufferedInputStream(downloadableContent.getContent());) {
final String mimeType;
final String normalizedMimeType;
// when standalone and we don't know the type is null as we were able to directly access the content bypassing the rest endpoint,
// when clustered and we don't know the type set to octet stream since the content was retrieved from the node's rest endpoint
@ -171,6 +172,10 @@ public class ContentViewerController extends HttpServlet {
mimeType = downloadableContent.getType();
}
// Extract only mime type and subtype from content type (anything after the first ; are parameters)
// Lowercase so subsequent code does not need to implement case insensitivity
normalizedMimeType = mimeType.split(";",2)[0].toLowerCase();
// add attributes needed for the header
request.setAttribute("filename", downloadableContent.getFilename());
request.setAttribute("contentType", mimeType);
@ -202,7 +207,7 @@ public class ContentViewerController extends HttpServlet {
request.getRequestDispatcher("/WEB-INF/jsp/hexview.jsp").include(request, response);
} else {
// lookup a viewer for the content
final String contentViewerUri = servletContext.getInitParameter(mimeType);
final String contentViewerUri = servletContext.getInitParameter(normalizedMimeType);
// handle no viewer for content type
if (contentViewerUri == null) {
@ -244,6 +249,11 @@ public class ContentViewerController extends HttpServlet {
@Override
public String getContentType() {
return normalizedMimeType;
}
@Override
public String getRawContentType() {
return mimeType;
}
});