You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/02/22 03:49:59 UTC

incubator-nifi git commit: NIFI-353: - Allowing the content to be obtained by either stream or as a string (with the char encoding detected using tika). - Set the json viewer size during window resize events.

Repository: incubator-nifi
Updated Branches:
  refs/heads/NIFI-353 43f6e3c05 -> 1955926a8


NIFI-353:
- Allowing the content to be obtained by either stream or as a string (with the char encoding detected using tika).
- Set the json viewer size during window resize events.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/1955926a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/1955926a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/1955926a

Branch: refs/heads/NIFI-353
Commit: 1955926a857daede8091a761e984d22273ada235
Parents: 43f6e3c
Author: Matt Gilman <ma...@gmail.com>
Authored: Sat Feb 21 21:49:48 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Sat Feb 21 21:49:48 2015 -0500

----------------------------------------------------------------------
 .../org/apache/nifi/web/ViewableContent.java    | 11 ++-
 .../nifi/web/ContentViewerController.java       | 75 ++++++++++++++------
 .../web/StandardContentViewerController.java    |  4 +-
 .../src/main/webapp/WEB-INF/jsp/codemirror.jsp  | 23 +++---
 4 files changed, 78 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1955926a/nifi/nifi-api/src/main/java/org/apache/nifi/web/ViewableContent.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-api/src/main/java/org/apache/nifi/web/ViewableContent.java b/nifi/nifi-api/src/main/java/org/apache/nifi/web/ViewableContent.java
index 46a4ab7..25eee9a 100644
--- a/nifi/nifi-api/src/main/java/org/apache/nifi/web/ViewableContent.java
+++ b/nifi/nifi-api/src/main/java/org/apache/nifi/web/ViewableContent.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web;
 
+import java.io.IOException;
 import java.io.InputStream;
 
 /**
@@ -30,7 +31,15 @@ public interface ViewableContent {
      * 
      * @return 
      */
-    InputStream getContent();
+    InputStream getContentStream();
+
+    /**
+     * Gets the content as a string.
+     * 
+     * @return 
+     * @throws java.io.IOException 
+     */
+    String getContent() throws IOException;
     
     /**
      * The contents file name.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1955926a/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 8cc11a3..b538631 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
@@ -20,6 +20,7 @@ import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
+import java.nio.charset.Charset;
 import javax.servlet.RequestDispatcher;
 
 import javax.servlet.ServletContext;
@@ -28,10 +29,13 @@ import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.io.IOUtils;
 import org.apache.tika.detect.DefaultDetector;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
+import org.apache.tika.parser.txt.CharsetDetector;
+import org.apache.tika.parser.txt.CharsetMatch;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,27 +59,7 @@ 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(new ContentRequestContext() {
-            @Override
-            public String getDataUri() {
-                return request.getParameter("ref");
-            }
-
-            @Override
-            public String getClusterNodeId() {
-                return request.getParameter("clusterNodeId");
-            }
-
-            @Override
-            public String getClientId() {
-                return request.getParameter("clientId");
-            }
-
-            @Override
-            public String getProxiedEntitiesChain() {
-                return request.getHeader("X-ProxiedEntitiesChain");
-            }
-        });
+        final DownloadableContent downloadableContent = contentAccess.getContent(getContentRequest(request));
 
         // ensure the content is found
         if (downloadableContent == null) {
@@ -89,6 +73,8 @@ public class ContentViewerController extends HttpServlet {
         // 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());
         
@@ -117,11 +103,28 @@ public class ContentViewerController extends HttpServlet {
         // create a request attribute for accessing the content
         request.setAttribute(ViewableContent.CONTENT_REQUEST_ATTRIBUTE, new ViewableContent() {
             @Override
-            public InputStream getContent() {
+            public InputStream getContentStream() {
                 return bis;
             }
 
             @Override
+            public String getContent() throws IOException {
+                // detect the charset
+                final CharsetDetector detector = new CharsetDetector();
+                detector.setText(bis);
+                detector.enableInputFilter(true);
+                final CharsetMatch match = detector.detect();
+                
+                // ensure we were able to detect the charset
+                if (match == null) {
+                    throw new IOException("Unable to detect character encoding.");
+                }
+                
+                // convert the stream using the detected charset
+                return IOUtils.toString(bis, match.getName());
+            }
+
+            @Override
             public String getFileName() {
                 return downloadableContent.getFilename();
             }
@@ -145,4 +148,32 @@ public class ContentViewerController extends HttpServlet {
         footer.include(request, response);
     }
 
+    /**
+     * Get the content request context based on the specified request.
+     * @param request
+     * @return 
+     */
+    private ContentRequestContext getContentRequest(final HttpServletRequest request) {
+        return new ContentRequestContext() {
+            @Override
+            public String getDataUri() {
+                return request.getParameter("ref");
+            }
+
+            @Override
+            public String getClusterNodeId() {
+                return request.getParameter("clusterNodeId");
+            }
+
+            @Override
+            public String getClientId() {
+                return request.getParameter("clientId");
+            }
+
+            @Override
+            public String getProxiedEntitiesChain() {
+                return request.getHeader("X-ProxiedEntitiesChain");
+            }
+        };
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1955926a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/StandardContentViewerController.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/StandardContentViewerController.java b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/StandardContentViewerController.java
index e1206d0..af3cc6d 100644
--- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/StandardContentViewerController.java
+++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/java/org/apache/nifi/web/StandardContentViewerController.java
@@ -43,6 +43,7 @@ public class StandardContentViewerController extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         final ViewableContent content = (ViewableContent) request.getAttribute(ViewableContent.CONTENT_REQUEST_ATTRIBUTE);
+        final String contentString = content.getContent();
         
         // handle json/xml
         if ("application/json".equals(content.getContentType()) || "application/xml".equals(content.getContentType())) {
@@ -50,9 +51,8 @@ public class StandardContentViewerController extends HttpServlet {
             
             // format the content
             if ("application/json".equals(content.getContentType())) {
-                final String json = IOUtils.toString(content.getContent(), StandardCharsets.UTF_8);
                 final ObjectMapper mapper = new ObjectMapper();
-                final Object objectJson = mapper.readValue(json, Object.class);
+                final Object objectJson = mapper.readValue(contentString, Object.class);
                 formatted = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectJson);
             } else {
                 formatted = "";

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/1955926a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/WEB-INF/jsp/codemirror.jsp
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/WEB-INF/jsp/codemirror.jsp b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/WEB-INF/jsp/codemirror.jsp
index 13d32f8..dd79378 100644
--- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/WEB-INF/jsp/codemirror.jsp
+++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-content-viewer/src/main/webapp/WEB-INF/jsp/codemirror.jsp
@@ -17,17 +17,12 @@
 <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
 <link rel="stylesheet" href="../nifi/js/codemirror/lib/codemirror.css" type="text/css" />
 <script type="text/javascript" src="../nifi/js/codemirror/lib/codemirror-compressed.js"></script>
+<script type="text/javascript" src="../nifi/js/jquery/jquery-2.1.1.min.js"></script>
 
 <textarea id="codemirror-content">${content}</textarea>
 
-<style>
-    #codemirror-content {
-        width: 500px;
-    }
-</style>
-
 <script type="text/javascript">
-    function formatContent() {
+    $(document).ready(function() {
         var field = document.getElementById('codemirror-content');
         var editor = CodeMirror.fromTextArea(field, {
             mode: '${mode}',
@@ -36,7 +31,15 @@
             readOnly: true,
             width: 500
         });
-    }
-    
-    formatContent();
+        
+        var setEditorSize = function() {
+            editor.setSize($(window).width() - 150, $(window).height() - 150);
+        };
+        
+        // reset the editor size when the window changes
+        $(window).resize(setEditorSize);
+        
+        // initialize the editor size
+        setEditorSize();
+    });
 </script>
\ No newline at end of file