/* * WPCleaner: A tool to help on Wikipedia maintenance tasks. * Copyright (C) 2013 Nicolas Vervelle * * See README.txt file for licensing information. */ package org.wikipediacleaner.gui.swing.action; import java.awt.event.ActionEvent; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JOptionPane; import javax.swing.JTextPane; import javax.swing.text.JTextComponent; import javax.swing.text.TextAction; import org.wikipediacleaner.i18n.GT; /** * An action for searching/finding text */ @SuppressWarnings("serial") public class FindTextAction extends TextAction { private static String lastSearch = ""; private String search; private JTextPane textPane; public FindTextAction() { this(null, null); } /** * @param search Text to search. * @param textPane Text pane. */ public FindTextAction(String search, JTextPane textPane) { super("FindText"); this.search = search; this.textPane = textPane; } /* (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { JTextComponent text = (textPane != null) ? textPane : getTextComponent(e); String currentSearch = search; if ((currentSearch == null) || (currentSearch.isEmpty())) { currentSearch = text.getSelectedText(); } if ((currentSearch == null) || (currentSearch.isEmpty())) { currentSearch = lastSearch; } currentSearch = JOptionPane.showInputDialog( text.getParent(), GT._("String to find"), currentSearch); if ((currentSearch == null) || ("".equals(currentSearch.trim()))) { return; } lastSearch = currentSearch; String textPattern = ""; char firstChar = lastSearch.charAt(0); if (Character.isLetter(firstChar)) { textPattern = "[" + Character.toUpperCase(firstChar) + Character.toLowerCase(firstChar) + "]" + Pattern.quote(lastSearch.substring(1)); } else { textPattern = Pattern.quote(lastSearch); } Pattern pattern = Pattern.compile(textPattern); Matcher matcher = pattern.matcher(text.getText()); if (matcher.find(text.getCaretPosition())) { text.setCaretPosition(matcher.start()); text.moveCaretPosition(matcher.end()); text.requestFocus(); return; } if (matcher.find(0)) { text.setCaretPosition(matcher.start()); text.moveCaretPosition(matcher.end()); text.requestFocus(); return; } } }