/*********************************************************************** * * $CVSHeader$ * * This file is part of WebScarab, an Open Web Application Security * Project utility. For details, please see http://www.owasp.org/ * * Copyright (c) 2002 - 2004 Rogan Dawes * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Getting Source * ============== * * Source for this application is maintained at Sourceforge.net, a * repository for free software projects. * * For details, please see http://www.sourceforge.net/projects/owasp * */ /* * SearchDialog.java * * Created on November 5, 2003, 11:14 PM */ package org.owasp.webscarab.ui.swing.editors; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JComponent; import javax.swing.text.JTextComponent; import java.awt.event.ActionEvent; import javax.swing.KeyStroke; import java.awt.event.KeyEvent; /** * * @author rdawes */ public class SearchDialog extends javax.swing.JDialog { /** * */ private static final long serialVersionUID = -3627749756146163207L; private JTextComponent _textComponent = null; /** Creates new form SearchDialog */ public SearchDialog(java.awt.Frame parent, JTextComponent textComponent) { super(parent); if (textComponent == null) { throw new NullPointerException("Can't search a null text component!"); } _textComponent = textComponent; initComponents(); if (!_textComponent.isEditable()) { replaceButton.setVisible(false); replaceTextField.setVisible(false); replaceLabel.setVisible(false); pack(); } String selection = _textComponent.getSelectedText(); if (selection != null) { findTextField.setText(selection); } addWindowListener(new WindowAdapter() { public void windowActivated(WindowEvent evt) { findTextField.requestFocus(); } }); KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); Action escapeAction = new AbstractAction() { /** * */ private static final long serialVersionUID = 482285775389739514L; public void actionPerformed(ActionEvent e) { setVisible( false ); } }; getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "ESCAPE"); getRootPane().getActionMap().put("ESCAPE", escapeAction); getRootPane().setDefaultButton(searchButton); } public void doSearch() { if (_textComponent == null) { System.err.println("Uninitialised textComponent"); return; } String searchText = findTextField.getText(); if (searchText.length() > 0) { int caret = _textComponent.getSelectionStart(); int position = _textComponent.getText().indexOf(searchText, caret+1); if (position == -1 && caret > 0) { position = _textComponent.getText().indexOf(searchText); } if (position > -1) { try { _textComponent.setCaretPosition(position); _textComponent.moveCaretPosition(position + searchText.length()); } catch (IllegalArgumentException iae) { System.err.println("error showing search results : " + iae); } } else { System.err.println("'" + searchText + "' not found!"); _textComponent.setCaretPosition(caret); } } } public void doReplace() { if (_textComponent == null) { System.err.println("Uninitialised textComponent"); return; } String searchText = findTextField.getText(); String replaceText = replaceTextField.getText(); if (searchText.length() > 0) { String text = _textComponent.getText(); int caret = _textComponent.getSelectionStart(); int position = _textComponent.getText().indexOf(searchText, caret); if (position == -1 && caret > 0) { position = _textComponent.getText().indexOf(searchText); } if (position < 0) { System.err.println("Search text not found"); return; } text = text.substring(0,position) + replaceText + text.substring(position+searchText.length()); _textComponent.setText(text); _textComponent.setCaretPosition(position); _textComponent.moveCaretPosition(position + replaceText.length()); } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; findLabel = new javax.swing.JLabel(); findTextField = new javax.swing.JTextField(); replaceLabel = new javax.swing.JLabel(); replaceTextField = new javax.swing.JTextField(); buttonPanel = new javax.swing.JPanel(); searchButton = new javax.swing.JButton(); replaceButton = new javax.swing.JButton(); closeButton = new javax.swing.JButton(); getContentPane().setLayout(new java.awt.GridBagLayout()); setTitle("Find"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); findLabel.setText("Find "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(findLabel, gridBagConstraints); findTextField.setColumns(40); findTextField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { findTextFieldActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(findTextField, gridBagConstraints); replaceLabel.setText("Replace"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(replaceLabel, gridBagConstraints); replaceTextField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { replaceTextFieldActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(replaceTextField, gridBagConstraints); buttonPanel.setLayout(new java.awt.GridBagLayout()); searchButton.setText("Search"); searchButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { searchButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints.weightx = 1.0; buttonPanel.add(searchButton, gridBagConstraints); replaceButton.setText("Replace"); replaceButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { replaceButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; buttonPanel.add(replaceButton, gridBagConstraints); closeButton.setText("Close"); closeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; buttonPanel.add(closeButton, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); getContentPane().add(buttonPanel, gridBagConstraints); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-400)/2, (screenSize.height-120)/2, 400, 120); } // </editor-fold>//GEN-END:initComponents private void replaceTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceTextFieldActionPerformed doReplace(); }//GEN-LAST:event_replaceTextFieldActionPerformed private void findTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findTextFieldActionPerformed doSearch(); }//GEN-LAST:event_findTextFieldActionPerformed private void replaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceButtonActionPerformed doReplace(); }//GEN-LAST:event_replaceButtonActionPerformed private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed doSearch(); }//GEN-LAST:event_searchButtonActionPerformed private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed setVisible(false); }//GEN-LAST:event_closeButtonActionPerformed /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog setVisible(false); }//GEN-LAST:event_closeDialog /** * @param args the command line arguments */ public static void main(String args[]) { JTextComponent text = new javax.swing.JTextArea(); text.setEditable(true); new SearchDialog(new javax.swing.JFrame(), text).setVisible(true); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel buttonPanel; private javax.swing.JButton closeButton; private javax.swing.JLabel findLabel; private javax.swing.JTextField findTextField; private javax.swing.JButton replaceButton; private javax.swing.JLabel replaceLabel; private javax.swing.JTextField replaceTextField; private javax.swing.JButton searchButton; // End of variables declaration//GEN-END:variables }