Author: jukka
Date: Tue Jan 22 02:43:46 2008
New Revision: 614167

URL: http://svn.apache.org/viewvc?rev=614167&view=rev
Log:
TIKA-97: Tika GUI
    - Added a simple Swing GUI for Tika

Added:
    incubator/tika/trunk/src/main/java/org/apache/tika/gui/
    
incubator/tika/trunk/src/main/java/org/apache/tika/gui/ParsingTransferHandler.java
    incubator/tika/trunk/src/main/java/org/apache/tika/gui/TikaGUI.java
Modified:
    incubator/tika/trunk/CHANGES.txt

Modified: incubator/tika/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/incubator/tika/trunk/CHANGES.txt?rev=614167&r1=614166&r2=614167&view=diff
==============================================================================
--- incubator/tika/trunk/CHANGES.txt (original)
+++ incubator/tika/trunk/CHANGES.txt Tue Jan 22 02:43:46 2008
@@ -13,6 +13,9 @@
 
 5. TIKA-115 - Tika package with all the dependencies (Jukka Zitting)
 
+6. TIKA-97  - Tika GUI (Jukka Zitting)
+
+
 Release 0.1-incubating - 12/27/2007
 
 1. TIKA-5 - Port Metadata Framework from Nutch (mattmann)

Added: 
incubator/tika/trunk/src/main/java/org/apache/tika/gui/ParsingTransferHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tika/trunk/src/main/java/org/apache/tika/gui/ParsingTransferHandler.java?rev=614167&view=auto
==============================================================================
--- 
incubator/tika/trunk/src/main/java/org/apache/tika/gui/ParsingTransferHandler.java
 (added)
+++ 
incubator/tika/trunk/src/main/java/org/apache/tika/gui/ParsingTransferHandler.java
 Tue Jan 22 02:43:46 2008
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.gui;
+
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.InputEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.List;
+
+import javax.swing.Icon;
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.TransferHandler;
+import javax.swing.table.DefaultTableModel;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.AutoDetectParser;
+import org.apache.tika.parser.Parser;
+
+public class ParsingTransferHandler extends TransferHandler {
+
+    private final Parser parser = new AutoDetectParser();
+
+    private final TransferHandler delegate;
+
+    private final DefaultTableModel table;
+
+    private final JEditorPane editor;
+
+    public ParsingTransferHandler(
+            TransferHandler delegate,
+            DefaultTableModel table, JEditorPane editor) {
+        this.delegate = delegate;
+        this.table = table;
+        this.editor = editor;
+    }
+
+    public boolean canImport(TransferSupport support) {
+        return canImport(null, support.getDataFlavors());
+    }
+
+    public boolean canImport(JComponent component, DataFlavor[] flavors) {
+        for (DataFlavor flavor : flavors) {
+            if (flavor.equals(DataFlavor.javaFileListFlavor)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean importData(TransferSupport support) {
+        return importData(null, support.getTransferable());
+    }
+
+    public boolean importData(
+            JComponent component, Transferable transferable) {
+        try {
+            List<?> files = (List<?>)
+                transferable.getTransferData(DataFlavor.javaFileListFlavor);
+            for (Object file : files) {
+                importFile((File) file);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    private void importFile(File file) throws Exception {
+        InputStream input = new FileInputStream(file);
+        try {
+            StringWriter writer = new StringWriter();
+            Metadata metadata = new Metadata();
+            metadata.set(Metadata.RESOURCE_NAME_KEY, file.getName());
+
+            SAXTransformerFactory factory = (SAXTransformerFactory)
+                SAXTransformerFactory.newInstance();
+            TransformerHandler handler = factory.newTransformerHandler();
+            handler.getTransformer().setOutputProperty(
+                    OutputKeys.METHOD, "html");
+            handler.setResult(new StreamResult(writer));
+            parser.parse(input, handler, metadata);
+
+            table.setRowCount(0);
+            for (String name : metadata.names()) {
+                table.addRow(new Object[] { name, metadata.get(name) });
+            }
+            editor.setText(writer.toString());
+        } finally {
+            input.close();
+        }
+    }
+
+    public void exportAsDrag(JComponent arg0, InputEvent arg1, int arg2) {
+        delegate.exportAsDrag(arg0, arg1, arg2);
+    }
+
+    public void exportToClipboard(JComponent arg0, Clipboard arg1, int arg2)
+            throws IllegalStateException {
+        delegate.exportToClipboard(arg0, arg1, arg2);
+    }
+
+    public int getSourceActions(JComponent arg0) {
+        return delegate.getSourceActions(arg0);
+    }
+
+    public Icon getVisualRepresentation(Transferable arg0) {
+        return delegate.getVisualRepresentation(arg0);
+    }
+
+}
\ No newline at end of file

Added: incubator/tika/trunk/src/main/java/org/apache/tika/gui/TikaGUI.java
URL: 
http://svn.apache.org/viewvc/incubator/tika/trunk/src/main/java/org/apache/tika/gui/TikaGUI.java?rev=614167&view=auto
==============================================================================
--- incubator/tika/trunk/src/main/java/org/apache/tika/gui/TikaGUI.java (added)
+++ incubator/tika/trunk/src/main/java/org/apache/tika/gui/TikaGUI.java Tue Jan 
22 02:43:46 2008
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.gui;
+
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * Simple Swing GUI for Apache Tika. Opens a window with tabs for
+ * "Text content" and "Metadata". You can drag and drop files on top
+ * of the window to have them parsed.
+ */
+public class TikaGUI implements Runnable {
+
+    public void run() {
+        JFrame frame = new JFrame("Apache Tika");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        JTabbedPane tabs = new JTabbedPane();
+        frame.add(tabs);
+
+        JEditorPane editor = new JEditorPane();
+        editor.setContentType("text/html");
+        editor.setText("<center>Drop file here</center>");
+        tabs.add("Text content", editor);
+
+        DefaultTableModel model = new DefaultTableModel(
+                new Object[][] { { "", "" } },
+                new Object[] { "Name", "Value" });
+        JTable table = new JTable(model);
+        table.setFillsViewportHeight(true);
+        tabs.addTab("Metadata", new JScrollPane(table));
+
+        table.setTransferHandler(new ParsingTransferHandler(
+                table.getTransferHandler(), model, editor));
+        editor.setTransferHandler(new ParsingTransferHandler(
+                editor.getTransferHandler(), model, editor));
+
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+    public static void main(String[] args) throws Exception {
+        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+        SwingUtilities.invokeLater(new TikaGUI());
+    }
+
+}


Reply via email to