Repository: incubator-nifi
Updated Branches:
  refs/heads/NIFI-353 bd9ef8431 -> 605a05b89


NIFI-353:
- Adding mime type detection using tika.

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

Branch: refs/heads/NIFI-353
Commit: 605a05b89f09bd16311d6321d6a1eeee881880b5
Parents: bd9ef84
Author: Matt Gilman <[email protected]>
Authored: Thu Feb 19 23:15:54 2015 -0500
Committer: Matt Gilman <[email protected]>
Committed: Thu Feb 19 23:15:54 2015 -0500

----------------------------------------------------------------------
 .../nifi-web/nifi-web-content-viewer/pom.xml    | 12 ++++
 .../nifi/web/ContentViewerController.java       | 61 ++++++++++++--------
 2 files changed, 49 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/605a05b8/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
index b51c456..7cdc870 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-content-viewer/pom.xml
@@ -35,6 +35,18 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-core</artifactId>
+            <version>1.7</version>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-parsers</artifactId>
+            <version>1.7</version>
         </dependency>
         <dependency>
             <groupId>javax.servlet.jsp</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/605a05b8/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 e7def77..8cc11a3 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
@@ -16,8 +16,10 @@
  */
 package org.apache.nifi.web;
 
+import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.PrintWriter;
 import javax.servlet.RequestDispatcher;
 
 import javax.servlet.ServletContext;
@@ -26,6 +28,10 @@ import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,16 +42,7 @@ import org.slf4j.LoggerFactory;
 public class ContentViewerController extends HttpServlet {
 
     private static final Logger logger = 
LoggerFactory.getLogger(ContentViewerController.class);
-    
-    // context for accessing the extension mapping
-//    private ServletContext servletContext;
-//
-//    @Override
-//    public void init(final ServletConfig config) throws ServletException {
-//        super.init(config);
-//        servletContext = config.getServletContext();
-//    }
-    
+
     /**
      *
      * @param request servlet request
@@ -55,8 +52,6 @@ public class ContentViewerController extends HttpServlet {
      */
     @Override
     protected void doGet(final HttpServletRequest request, final 
HttpServletResponse response) throws ServletException, IOException {
-        logger.info(request.getServletPath());
-        
         // get the content
         final ServletContext servletContext = request.getServletContext();
         final ContentAccess contentAccess = (ContentAccess) 
servletContext.getAttribute("nifi-content-access");
@@ -81,31 +76,49 @@ public class ContentViewerController extends HttpServlet {
                 return request.getHeader("X-ProxiedEntitiesChain");
             }
         });
-        
+
         // ensure the content is found
         if (downloadableContent == null) {
-            
+            response.getWriter().println("No content...");
+            return;
         }
-        
+
         // 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);
+        final Metadata metadata = new Metadata();
+        metadata.set(Metadata.RESOURCE_NAME_KEY, 
downloadableContent.getFilename());
         
-        // lookup a viewer for the content
-        final String contentViewerUri = 
servletContext.getInitParameter("application/json");
+        // 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) {
+            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;
         }
-        
+
         // generate the header
         final RequestDispatcher header = 
request.getRequestDispatcher("/WEB-INF/jsp/header.jsp");
         header.include(request, response);
-        
+
         // create a request attribute for accessing the content
         request.setAttribute(ViewableContent.CONTENT_REQUEST_ATTRIBUTE, new 
ViewableContent() {
             @Override
             public InputStream getContent() {
-                return downloadableContent.getContent();
+                return bis;
             }
 
             @Override
@@ -115,18 +128,18 @@ public class ContentViewerController extends HttpServlet {
 
             @Override
             public String getContentType() {
-                return downloadableContent.getType();
+                return mimeType;
             }
         });
-        
+
         // generate the content
         final ServletContext viewerContext = 
servletContext.getContext(contentViewerUri);
         final RequestDispatcher content = 
viewerContext.getRequestDispatcher("/view-content");
         content.include(request, response);
-        
+
         // remove the request attribute
         request.removeAttribute(ViewableContent.CONTENT_REQUEST_ATTRIBUTE);
-        
+
         // generate footer
         final RequestDispatcher footer = 
request.getRequestDispatcher("/WEB-INF/jsp/footer.jsp");
         footer.include(request, response);

Reply via email to