// PasswordDialog
package org.javamoney.examples.ez.money.gui.dialog;
import static org.javamoney.examples.ez.common.utility.I18NHelper.getSharedProperty;
import static org.javamoney.examples.ez.money.IconKeys.DIALOG_PASSWORD;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPasswordField;
import org.javamoney.examples.ez.money.IconKeys;
import org.javamoney.examples.ez.common.gui.DialogHeader;
import org.javamoney.examples.ez.common.gui.Panel;
import org.javamoney.examples.ez.common.utility.I18NHelper;
import org.javamoney.examples.ez.common.utility.TextConstrainer;
/**
* This class facilitates allowing a user to enter a password.
*/
public
final
class
PasswordDialog
extends ApplicationDialog
{
/**
* Constructs a new dialog.
*/
public
PasswordDialog()
{
super(525, 300);
createFields();
buildPanel();
}
/**
* This method displays a a dialog allowing a user to enter in a password.
* This method returns the password entered or null if the dialog was
* cancelled.
*
* @return The password entered or null if the dialog was cancelled.
*/
public
String
showDialog()
{
String password = null;
getOKButton().setEnabled(false);
runDialog();
if(wasAccepted() == true)
{
password = getPassword(PASSWORD);
}
return password;
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
void
buildPanel()
{
Panel panel = getContentPane();
// Build panel.
panel.setFill(GridBagConstraints.BOTH);
panel.add(createDialogHeader(), 0, 0, 1, 1, 0, 0);
panel.add(createPasswordPanel(), 0, 1, 1, 1, 100, 100);
panel.add(createWarningPanel(), 0, 2, 1, 1, 0, 0);
panel.add(createOKCancelButtonPanel(new ActionHandler()), 0, 3, 1, 1, 0, 0);
}
private
void
createFields()
{
itsFields = new JPasswordField[2];
for(int len = 0; len < getFields().length; ++len)
{
getFields()[len] = new JPasswordField();
getFields()[len].addKeyListener(new KeyHandler());
getFields()[len].setDocument(new TextConstrainer(16));
}
}
private
static
DialogHeader
createDialogHeader()
{
String description = getProperty("header.description");
String title = getProperty("header.title");
return new DialogHeader(title, description, DIALOG_PASSWORD.getIcon());
}
private
Panel
createPasswordPanel()
{
Panel panel = new Panel();
String gap = ": ";
// Build panel.
panel.setAnchor(GridBagConstraints.EAST);
panel.add(getSharedProperty("password") + gap, 0, 0, 1, 1, 0, 50);
panel.add(getProperty("retype") + gap, 0, 1, 1, 1, 0, 50);
panel.setFill(GridBagConstraints.HORIZONTAL);
panel.add(getFields()[PASSWORD], 1, 0, 1, 1, 100, 0);
panel.add(getFields()[PASSWORD_CONFIRM], 1, 1, 1, 1, 0, 0);
panel.setInsets(new Insets(10, 10, 10, 150));
return panel;
}
private
Panel
createWarningPanel()
{
Panel panel = new Panel();
// Build panel.
panel.setAnchor(GridBagConstraints.EAST);
panel.add(IconKeys.WARNING.getIcon(), 0, 0, 1, 1, 25, 100);
panel.addEmptyCellAt(1, 0);
panel.setAnchor(GridBagConstraints.WEST);
panel.add(getProperty("warning"), 2, 0, 1, 1, 75, 0);
return panel;
}
private
JPasswordField[]
getFields()
{
return itsFields;
}
private
String
getPassword(int field)
{
return new String(getFields()[field].getPassword());
}
private
static
String
getProperty(String key)
{
return I18NHelper.getProperty("PasswordDialog." + key);
}
//////////////////////////////////////////////////////////////////////////////
// Start of inner classes.
//////////////////////////////////////////////////////////////////////////////
private
class
ActionHandler
implements ActionListener
{
public
void
actionPerformed(ActionEvent event)
{
setAccepted(event.getActionCommand().equals(ACTION_OK));
dispose();
}
}
private
class
KeyHandler
extends KeyAdapter
{
@Override
public
void
keyReleased(KeyEvent event)
{
String pass1 = getPassword(PASSWORD);
String pass2 = getPassword(PASSWORD_CONFIRM);
getOKButton().setEnabled(pass1.equals(pass2) && pass1.length() != 0);
}
}
//////////////////////////////////////////////////////////////////////////////
// Start of class members.
//////////////////////////////////////////////////////////////////////////////
private JPasswordField[] itsFields;
private static final int PASSWORD = 0;
private static final int PASSWORD_CONFIRM = 1;
}