import javax.swing.JOptionPane;
import javax.swing.JDialog;
import javax.swing.JTextField;
import java.beans.*;
import java.awt.*;
import java.awt.event.*;

/**
 * Clase DialogoModificar
 * Clase que muestra el dialogo con el usuario que le permite modificar el
 * parametro escogido del objeto seleccionado para modificar.
 * @author Patricio A. Castillo Pizarro - Eric C. Maldonado Olguin
 * @version 1.0 - Jun 26th, 2007
 */
class DialogoModificar extends JDialog
                   implements ActionListener,
                              PropertyChangeListener {
    private String typedText = null;
    private JTextField textField;
    private Dialogo dd;

    private String magicWord;
    private JOptionPane optionPane;

    private String btnString1 = "Enter";
    private String btnString2 = "Cancel";

    public String getValidatedText() {
        return typedText;
    }

    public DialogoModificar(Frame aFrame, String aWord, Dialogo parent) {
        super(aFrame, true);
        dd = parent;

        magicWord = aWord.toUpperCase();
        setTitle("nada aun");

        textField = new JTextField(10);

        String msgString1 = "nada";
        String msgString2 = "nada";
        Object[] array = {msgString1, msgString2, textField};

        Object[] options = {btnString1, btnString2};

        optionPane = new JOptionPane(array,
                                    JOptionPane.QUESTION_MESSAGE,
                                    JOptionPane.YES_NO_OPTION,
                                    null,
                                    options,
                                    options[0]);

        setContentPane(optionPane);

        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent we) {

                    optionPane.setValue(new Integer(
                                        JOptionPane.CLOSED_OPTION));
            }
        });

        addComponentListener(new ComponentAdapter() {
            public void componentShown(ComponentEvent ce) {
                textField.requestFocusInWindow();
            }
        });

        textField.addActionListener(this);

        optionPane.addPropertyChangeListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        optionPane.setValue(btnString1);
    }

    public void propertyChange(PropertyChangeEvent e) {
        String prop = e.getPropertyName();

        if (isVisible()
         && (e.getSource() == optionPane)
         && (JOptionPane.VALUE_PROPERTY.equals(prop) ||
             JOptionPane.INPUT_VALUE_PROPERTY.equals(prop))) {
            Object value = optionPane.getValue();

            if (value == JOptionPane.UNINITIALIZED_VALUE) {
                return;
            }

            optionPane.setValue(
                    JOptionPane.UNINITIALIZED_VALUE);

            if (btnString1.equals(value)) {
                    typedText = textField.getText();
                String ucText = typedText.toUpperCase();
                if (magicWord.equals(ucText)) {
                    clearAndHide();
                } else {
                    textField.selectAll();
                    JOptionPane.showMessageDialog(
                                    DialogoModificar.this,
                                    "nada",
                                    "nada",
                                    JOptionPane.ERROR_MESSAGE);
                    typedText = null;
                    textField.requestFocusInWindow();
                }
            } else {
                dd.setLabel("nada.");
                typedText = null;
                clearAndHide();
            }
        }
    }

    public void clearAndHide() {
        textField.setText(null);
        setVisible(false);
    }
}
