package org.ripple.power.ui.btc;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import org.ripple.power.txns.btc.Address;
import org.ripple.power.txns.btc.AddressFormatException;
import org.ripple.power.ui.UIRes;
import org.ripple.power.ui.view.ABaseDialog;
import org.ripple.power.ui.view.ButtonPane;
import org.ripple.power.ui.view.log.ErrorLog;
public class AddressEditDialog extends ABaseDialog implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private Address updatedAddress;
private final JTextField nameField;
private final JTextField addressField;
public AddressEditDialog(JDialog parent, Address address, boolean editAddress) {
super(parent, "Edit Address", Dialog.ModalityType.DOCUMENT_MODAL);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
JPanel editPane = new JPanel();
editPane.setLayout(new BoxLayout(editPane, BoxLayout.X_AXIS));
nameField = new JTextField(address!=null?address.getLabel():"", 32);
addressField = new JTextField(address!=null?address.toString():"", 34);
if (!editAddress)
addressField.setEditable(false);
JPanel namePane = new JPanel();
namePane.add(new JLabel("Name:", JLabel.RIGHT));
namePane.add(nameField);
editPane.add(namePane);
editPane.add(Box.createHorizontalStrut(10));
JPanel addressPane = new JPanel();
addressPane.add(new JLabel("Address:", JLabel.RIGHT));
addressPane.add(addressField);
editPane.add(addressPane);
JPanel buttonPane = new ButtonPane(this, 10, new String[] {"Save", "save"},
new String[] {"Cancel", "cancel"});
JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
contentPane.setOpaque(true);
contentPane.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
contentPane.add(editPane);
contentPane.add(Box.createVerticalStrut(15));
contentPane.add(buttonPane);
setContentPane(contentPane);
}
public static Address showDialog(JDialog parent, Address address, boolean editAddress) {
Address updatedAddress = null;
try {
AddressEditDialog dialog = new AddressEditDialog(parent, address, editAddress);
dialog.pack();
dialog.setLocationRelativeTo(parent);
dialog.setVisible(true);
updatedAddress = dialog.updatedAddress;
} catch (Exception exc) {
ErrorLog.get().logException("Exception while displaying dialog", exc);
}
return updatedAddress;
}
@Override
public void actionPerformed(ActionEvent ae) {
try {
String action = ae.getActionCommand();
switch (action) {
case "save":
if (processFields()) {
setVisible(false);
dispose();
}
break;
case "cancel":
updatedAddress = null;
setVisible(false);
dispose();
break;
}
} catch (Exception exc) {
ErrorLog.get().logException("Exception while processing action event", exc);
}
}
private boolean processFields() {
String name = nameField.getText();
String addr = addressField.getText();
if (name.isEmpty()) {
UIRes.showErrorMessage(this, "Error", "You must specify a name");
return false;
}
if (name.length() > 64) {
UIRes.showErrorMessage(this,"Error", "The name must be 64 characters or less");
return false;
}
if (addr.isEmpty()) {
UIRes.showErrorMessage(this, "Error","You must specify an address");
return false;
}
boolean valid = true;
try {
updatedAddress = new Address(addr, name);
} catch (AddressFormatException exc) {
UIRes.showErrorMessage(this, "Error", "Address is not valid");
valid = false;
}
return valid;
}
}