org.jopendocument.tools.ContentFinder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jOpenDocument Show documentation
Show all versions of jOpenDocument Show documentation
jOpenDocument is a free library for developers looking to use
Open Document files without OpenOffice.org.
The newest version!
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU
* General Public License Version 3 only ("GPL").
* You may not use this file except in compliance with the License.
* You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html
* See the License for the specific language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*
*/
package org.jopendocument.tools;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.jopendocument.io.ODTContentExtractor;
/**
* A small application to find documents containing a given text
*/
public class ContentFinder extends JFrame {
private static final long serialVersionUID = -8535510980733968129L;
private File selectedDir;
final JTextField textFieldFolder = new JTextField(200);
public ContentFinder() {
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Explore folder:"), BorderLayout.WEST);
p.add(textFieldFolder, BorderLayout.CENTER);
final JButton buttonSelection = new JButton("Select folder");
buttonSelection.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openSelectionDialog();
}
});
p.add(buttonSelection, BorderLayout.EAST);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(new JLabel("Find text:"), BorderLayout.WEST);
final JTextField textFieldRecherche = new JTextField(200);
mainPanel.add(textFieldRecherche, BorderLayout.CENTER);
final JLabel status = new JLabel("");
mainPanel.add(status, BorderLayout.SOUTH);
final JTextArea result = new JTextArea();
result.setEditable(false);
JScrollPane scroll = new JScrollPane(result);
final JButton searchButton = new JButton("Find");
searchButton.setEnabled(false);
//
JPanel framePanel = new JPanel();
framePanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 0;
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(2, 2, 2, 2);
framePanel.add(p, c);
//
c.gridy++;
framePanel.add(mainPanel, c);
//
c.gridy++;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
framePanel.add(scroll, c);
//
c.gridy++;
c.gridy++;
c.weightx = 0;
c.weighty = 0;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
framePanel.add(searchButton, c);
this.setContentPane(framePanel);
searchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
searchButton.setEnabled(false);
if (selectedDir == null) {
openSelectionDialog();
}
Runnable r = new Runnable() {
public void run() {
if (selectedDir != null && selectedDir.isDirectory()) {
File files[] = selectedDir.listFiles();
result.setText("");
for (int i = 0; i < files.length; i++) {
File file = files[i];
final String name = file.getName();
if (name.endsWith(".sxw") || name.endsWith(".sxc") || name.endsWith(".ods") || name.endsWith(".odt")) {
updateStatus("Looking at:" + file.getAbsolutePath());
ODTContentExtractor l = new ODTContentExtractor(file);
try {
l.load();
} catch (IOException e) {
e.printStackTrace();
}
if (l.containsIgnoreCase(textFieldRecherche.getText())) {
result.append(file.getAbsolutePath() + "\n");
}
}
updateStatus("Done");
}
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
searchButton.setEnabled(true);
}
});
}
private void updateStatus(final String s) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
status.setText(s);
}
});
}
};
Thread th = new Thread(r);
th.start();
}
});
textFieldRecherche.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
checkDocument();
}
private void checkDocument() {
if (textFieldRecherche.getText().trim().length() == 0) {
searchButton.setEnabled(false);
} else {
searchButton.setEnabled(true);
}
}
public void insertUpdate(DocumentEvent e) {
checkDocument();
}
public void removeUpdate(DocumentEvent e) {
checkDocument();
}
});
textFieldFolder.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
checkDocument();
}
private void checkDocument() {
String fNma = textFieldFolder.getText().trim();
File f = new File(fNma);
if (f.exists() && f.isDirectory()) {
selectedDir = f;
textFieldFolder.setBackground(Color.WHITE);
} else {
textFieldFolder.setBackground(new Color(255, 220, 110));
}
}
public void insertUpdate(DocumentEvent e) {
checkDocument();
}
public void removeUpdate(DocumentEvent e) {
checkDocument();
}
});
}
protected void openSelectionDialog() {
JFileChooser fChooser = new JFileChooser();
fChooser.setApproveButtonText("Look in folder...");
fChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (fChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File fi = fChooser.getSelectedFile();
if (fi != null && fi.isDirectory()) {
this.selectedDir = fi;
this.textFieldFolder.setText(fi.getAbsolutePath());
}
}
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final JFrame f = new ContentFinder();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(new Dimension(800, 400));
f.setLocation(100, 100);
f.setVisible(true);
}
}