Repository: incubator-nifi Updated Branches: refs/heads/NIFI-353 098f9709d -> 173177c91
NIFI-353: - Cleaning up error handling. - Showing the file name and content type. Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/173177c9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/173177c9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/173177c9 Branch: refs/heads/NIFI-353 Commit: 173177c918e6c07c1c98d807ecc7f8be6d0fa637 Parents: 098f970 Author: Matt Gilman <[email protected]> Authored: Wed Mar 11 23:21:43 2015 -0400 Committer: Matt Gilman <[email protected]> Committed: Wed Mar 11 23:21:43 2015 -0400 ---------------------------------------------------------------------- .../nifi/web/ContentViewerController.java | 77 ++++++++++++-------- .../src/main/webapp/WEB-INF/jsp/header.jsp | 1 + .../src/main/webapp/WEB-INF/jsp/no-viewer.jsp | 4 +- .../src/main/webapp/css/main.css | 30 +++++++- .../main/webapp/META-INF/nifi-content-viewer | 2 +- 5 files changed, 79 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/173177c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/java/org/apache/nifi/web/ContentViewerController.java ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/java/org/apache/nifi/web/ContentViewerController.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/java/org/apache/nifi/web/ContentViewerController.java index bc29e7f..771465a 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/java/org/apache/nifi/web/ContentViewerController.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/java/org/apache/nifi/web/ContentViewerController.java @@ -21,8 +21,6 @@ import com.ibm.icu.text.CharsetMatch; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.PrintWriter; -import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; @@ -39,6 +37,7 @@ import org.apache.tika.metadata.Metadata; import org.apache.tika.mime.MediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; /** * @@ -60,10 +59,12 @@ public class ContentViewerController extends HttpServlet { // get the content final ServletContext servletContext = request.getServletContext(); final ContentAccess contentAccess = (ContentAccess) servletContext.getAttribute("nifi-content-access"); - final DownloadableContent downloadableContent = contentAccess.getContent(getContentRequest(request)); - - // ensure the content is found - if (downloadableContent == null) { + + // get the content + final DownloadableContent downloadableContent; + try { + downloadableContent = contentAccess.getContent(getContentRequest(request)); + } catch (final ResourceNotFoundException rnfe) { request.setAttribute("title", "Error"); request.setAttribute("messages", "Unable to find the specified content"); @@ -71,6 +72,22 @@ public class ContentViewerController extends HttpServlet { final ServletContext viewerContext = servletContext.getContext("/nifi"); viewerContext.getRequestDispatcher("/message").include(request, response); return; + } catch (final AccessDeniedException ade) { + request.setAttribute("title", "Acess Denied"); + request.setAttribute("messages", "Unable to approve access to the specified content: " + ade.getMessage()); + + // forward to the error page + final ServletContext viewerContext = servletContext.getContext("/nifi"); + viewerContext.getRequestDispatcher("/message").include(request, response); + return; + } catch (final Exception e) { + request.setAttribute("title", "Error"); + request.setAttribute("messages", "An unexcepted error has occurred: " + e.getMessage()); + + // forward to the error page + final ServletContext viewerContext = servletContext.getContext("/nifi"); + viewerContext.getRequestDispatcher("/message").include(request, response); + return; } // determine how we want to view the data @@ -95,57 +112,53 @@ public class ContentViewerController extends HttpServlet { return; } - // build the request url + // detect the content type + final DefaultDetector detector = new DefaultDetector(); + + // create the stream for tika to process, buffer to support reseting + final BufferedInputStream bis = new BufferedInputStream(downloadableContent.getContent()); + final TikaInputStream tikaStream = TikaInputStream.get(bis); + + // provide a hint based on the filename + final Metadata metadata = new Metadata(); + metadata.set(Metadata.RESOURCE_NAME_KEY, downloadableContent.getFilename()); + + // Get mime type + final MediaType mediatype = detector.detect(tikaStream, metadata); + final String mimeType = mediatype.toString(); + + // add attributes needed for the header final StringBuffer requestUrl = request.getRequestURL(); request.setAttribute("requestUrl", requestUrl.toString()); request.setAttribute("dataRef", request.getParameter("ref")); + request.setAttribute("filename", downloadableContent.getFilename()); + request.setAttribute("contentType", mimeType); // generate the header request.getRequestDispatcher("/WEB-INF/jsp/header.jsp").include(request, response); - // remove the request url + // remove the attributes needed for the header request.removeAttribute("requestUrl"); request.removeAttribute("dataRef"); + request.removeAttribute("filename"); + request.removeAttribute("contentType"); // generate the markup for the content based on the display mode if (DisplayMode.Hex.equals(displayMode)) { // convert stream into the base 64 bytes - final byte[] bytes = IOUtils.toByteArray(downloadableContent.getContent()); + final byte[] bytes = IOUtils.toByteArray(bis); final String base64 = Base64.encodeBase64String(bytes); // defer to the jsp request.setAttribute("content", base64); request.getRequestDispatcher("/WEB-INF/jsp/hexview.jsp").include(request, response); } else { - // detect the content type - final DefaultDetector detector = new DefaultDetector(); - - // create the stream for tika to process, buffer to support reseting - final BufferedInputStream bis = new BufferedInputStream(downloadableContent.getContent()); - final TikaInputStream tikaStream = TikaInputStream.get(bis); - - // provide a hint based on the filename - final Metadata metadata = new Metadata(); - metadata.set(Metadata.RESOURCE_NAME_KEY, downloadableContent.getFilename()); - - // Get mime type - final MediaType mediatype = detector.detect(tikaStream, metadata); - final String mimeType = mediatype.toString(); - // lookup a viewer for the content final String contentViewerUri = servletContext.getInitParameter(mimeType); // handle no viewer for content type if (contentViewerUri == null) { request.getRequestDispatcher("/WEB-INF/jsp/no-viewer.jsp").include(request, response); - -// final PrintWriter out = response.getWriter(); -// out.println("No viewer..."); -// out.println("identified mime type: " + mimeType); -// out.println("filename: " + downloadableContent.getFilename()); -// out.println("type: " + downloadableContent.getType()); -// -// return; } else { // create a request attribute for accessing the content request.setAttribute(ViewableContent.CONTENT_REQUEST_ATTRIBUTE, new ViewableContent() { http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/173177c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/header.jsp ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/header.jsp b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/header.jsp index 2f5047b..6501f5b 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/header.jsp +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/header.jsp @@ -87,4 +87,5 @@ <body class="message-pane"> <div id="view-as-label">View as</div> <div id="view-as" class="pointer button-normal"></div> + <div id="content-filename">${filename} <span id="content-type">(${contentType})</span></div> <div class="message-pane-message-box"> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/173177c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/no-viewer.jsp ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/no-viewer.jsp b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/no-viewer.jsp index 845df4f..8eddbe2 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/no-viewer.jsp +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/WEB-INF/jsp/no-viewer.jsp @@ -15,4 +15,6 @@ limitations under the License. --%> <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %> -No viewer is registered for this content type. \ No newline at end of file +<div id="no-viewer"> + No viewer is registered for this content type. +</div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/173177c9/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/css/main.css ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/css/main.css b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/css/main.css index 47904bb..0d260ee 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/css/main.css +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/src/main/webapp/css/main.css @@ -35,6 +35,20 @@ height: 18px; } +#content-filename { + position: absolute; + top: 72px; + right: 50px; + line-height: 24px; + font-size: 12px; + font-weight: bold; +} + +#content-type { + font-style: italic; + font-weight: normal; +} + .pointer { cursor: pointer; } @@ -66,4 +80,18 @@ padding: 2px; } -/* no viewer */ \ No newline at end of file +/* no viewer */ + +#no-viewer { + position: absolute; + right: 50px; + bottom: 50px; + left: 100px; + top: 100px; + border: 1px solid #aaa; + overflow: auto; + background-color: #fff; + font-style: italic; + padding: 5px; + font-size: 13px; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/173177c9/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer ---------------------------------------------------------------------- diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer index 29fed60..6fb1b93 100644 --- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer +++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/META-INF/nifi-content-viewer @@ -1,2 +1,2 @@ application/xml -application/json \ No newline at end of file +application/js2on \ No newline at end of file
