/
codebase/
codebase/area/
codebase/doc/
codebase/etc/
codebase/src/net/sourceforge/pain/data/trigger/
codebase/src/net/sourceforge/pain/logic/
codebase/src/net/sourceforge/pain/logic/affect/
codebase/src/net/sourceforge/pain/logic/event/
codebase/src/net/sourceforge/pain/logic/event/deploy/
codebase/src/net/sourceforge/pain/logic/event/guitool/
codebase/src/net/sourceforge/pain/logic/event/guitool/event/
codebase/src/net/sourceforge/pain/logic/fn/util/
codebase/src/net/sourceforge/pain/logic/trigger/
codebase/src/net/sourceforge/pain/logic/trigger/impl/
codebase/src/net/sourceforge/pain/network/console/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/plugin/command/
codebase/src/net/sourceforge/pain/plugin/reset/
codebase/src/net/sourceforge/pain/plugin/shutdown/
codebase/src/net/sourceforge/pain/plugin/social/
codebase/src/net/sourceforge/pain/util/
db/doc/javadoc/resources/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.tools.guitool.dialog;

import net.sourceforge.pain.tools.guitool.*;
import net.sourceforge.pain.network.guitool.*;

import javax.swing.*;
import java.awt.event.*;

public class ChangePassPerformer {
    ChangePassDialog d;

    public void changePass() {
        d = new ChangePassDialog(GuiTool.appFrame);
        initDialog();
        d.show();
        d.dispose();

    }

    private void initDialog() {
        MyButtonListener bl = new MyButtonListener();
        d.cancelButton.addActionListener(bl);
        d.changeButton.addActionListener(bl);
        d.setLocationRelativeTo(null);   //center of the screen

        MyKeyListener kl = new MyKeyListener();
        d.cancelButton.addKeyListener(kl);
        d.changeButton.addKeyListener(kl);
        d.oldPassField.addKeyListener(kl);
        d.newPassField.addKeyListener(kl);
        d.repeatNewPassField.addKeyListener(kl);
    }

    private class MyButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            final Object source = e.getSource();
            if (source == d.cancelButton) {
                d.hide();
            } else if (source == d.changeButton && _changePass()) {
                d.hide();
            }
        }


    }

    private void onPassChanged() {
        final String message = "Password changed";
        GuiTool.log(message);
        JOptionPane.showMessageDialog(d, message);
    }

    private boolean _changePass() {
        try {
            String oldPass = new String(d.oldPassField.getPassword());
            String newPass = new String(d.newPassField.getPassword());
            String repreatNewPass = new String(d.repeatNewPassField.getPassword());
            if (oldPass.length() == 0) {
                JOptionPane.showMessageDialog(d, "Old pass is empty", "Error", JOptionPane.ERROR_MESSAGE);
                d.oldPassField.requestFocus();
                return false;
            }
            if (newPass.length() < 5) {
                JOptionPane.showMessageDialog(d, newPass.length() == 0 ? "New pass is empty" : "New pass is too short", "Error", JOptionPane.ERROR_MESSAGE);
                d.newPassField.requestFocus();
                return false;
            }

            if (!repreatNewPass.equals(newPass)) {
                JOptionPane.showMessageDialog(d, "Repeat password error", "Error", JOptionPane.ERROR_MESSAGE);
                d.repeatNewPassField.requestFocus();
                return false;
            }
            GTNetPacket reply = GlobalPerformer.getConnection().sendBlocking(new GTNetPacket("ChangePassword", new String[]{oldPass, newPass}));
            if (reply.data.equals("OK")) {
                onPassChanged();
                return true;
            } else {
                JOptionPane.showMessageDialog(d, reply.data, "Error", JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private class MyKeyListener implements KeyListener {
        boolean myPress = false;

        public void keyPressed(KeyEvent e) {
            myPress = true;
        }

        public void keyReleased(KeyEvent e) {
            if (myPress) {
                myPress = false;
                final int keyCode = e.getKeyCode();
                if (keyCode == KeyEvent.VK_ESCAPE) {
                    e.consume();
                    d.hide();
                } else if (keyCode == KeyEvent.VK_ENTER) {
                    e.consume();
                    if (_changePass()) {
                        d.hide();
                    }
                }
            }
        }

        public void keyTyped(KeyEvent e) {
        }
    }
}