package org.ripple.power.ui; import java.awt.Dialog; import java.awt.Dimension; import java.awt.Font; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.math.BigDecimal; import java.util.ArrayList; import org.json.JSONObject; import org.ripple.power.blockchain.RippleMemoEncode; import org.ripple.power.config.LSystem; import org.ripple.power.helper.HelperWindow; import org.ripple.power.txns.AccountFind; import org.ripple.power.txns.Currencies; import org.ripple.power.txns.Gateway; import org.ripple.power.txns.NameFind; import org.ripple.power.txns.Payment; import org.ripple.power.txns.Rollback; import org.ripple.power.txns.TransactionFlagMap; import org.ripple.power.txns.Updateable; import org.ripple.power.ui.view.ABaseDialog; import org.ripple.power.ui.view.RPJSonLog; import org.ripple.power.ui.view.RPLabel; import org.ripple.power.ui.view.RPTextBox; import org.ripple.power.ui.view.RPToast; import org.ripple.power.ui.view.WaitDialog; import org.ripple.power.ui.view.RPToast.Style; import org.ripple.power.utils.StringUtils; import org.ripple.power.utils.SwingUtils; import org.ripple.power.wallet.WalletItem; import com.ripple.core.coretypes.Amount; public class RPSendFlagsDialog extends ABaseDialog implements WindowListener{ /** * */ private static final long serialVersionUID = 1L; private RPLabel _amountGatewayLabel; private RPLabel _amountLabel; private RPTextBox _amountText; private RPComboBox _amount_cur_item; private RPComboBox _amount_gateway_item; private RPLabel _amountcurLabel; private RPLabel _deliveredGatewayLabel; private RPLabel _deliveredLabel; private RPTextBox _deliveredText; private RPComboBox _delivered_cur_item; private RPComboBox _delivered_gateway_item; private RPLabel _deliveredcurLabel; private RPCButton _exitButton; private RPLabel _feeLabel; private RPTextBox _feeText; private RPComboBox _flagsItem; private RPLabel _flagsLabel; private RPLabel _idLabel; private RPTextBox _idText; private RPLabel _memoLabel; private RPTextBox _memoText; private RPLabel _recipientLabel; private RPTextBox _recipientText; private RPCButton _sendButton; private RPLabel _sendmaxGatewayLabel; private RPLabel _sendmaxLabel; private RPTextBox _sendmaxText; private RPComboBox _sendmax_cur_item; private RPComboBox _sendmax_gateway_item; private RPLabel _sendmaxcurLabel; private javax.swing.JSeparator _spLine; private RPLabel _tagLabel; private RPTextBox _tagText; private ArrayList<WaitDialog> _waitDialogs = new ArrayList<WaitDialog>(10); private WalletItem _item; public static RPSendFlagsDialog showDialog(String title, Window parent, WalletItem item) { RPSendFlagsDialog dialog = new RPSendFlagsDialog(title, parent, item); dialog.pack(); dialog.setLocationRelativeTo(parent); dialog.setVisible(true); return dialog; } public RPSendFlagsDialog(String title, Window parent, WalletItem item) { super(parent, title, Dialog.ModalityType.DOCUMENT_MODAL); this._item = item; addWindowListener(HelperWindow.get()); setIconImage(UIRes.getIcon()); setResizable(false); Dimension dim = new Dimension(815, 565); setPreferredSize(dim); setSize(dim); initComponents(); } private void initComponents() { _amountGatewayLabel = new RPLabel(); _amountLabel = new RPLabel(); _amountText = new RPTextBox(); _amount_gateway_item = new RPComboBox(); _amountcurLabel = new RPLabel(); _amount_cur_item = new RPComboBox(); _amount_cur_item.setEditable(true); _sendmaxGatewayLabel = new RPLabel(); _flagsLabel = new RPLabel(); _sendmaxText = new RPTextBox(); _sendmax_gateway_item = new RPComboBox(); _sendmaxcurLabel = new RPLabel(); _flagsItem = new RPComboBox(); _deliveredGatewayLabel = new RPLabel(); _memoLabel = new RPLabel(); _memoText = new RPTextBox(); _delivered_gateway_item = new RPComboBox(); _deliveredcurLabel = new RPLabel(); _delivered_cur_item = new RPComboBox(); _delivered_cur_item.setEditable(true); _deliveredLabel = new RPLabel(); _deliveredText = new RPTextBox(); _recipientLabel = new RPLabel(); _recipientText = new RPTextBox(); _sendmaxLabel = new RPLabel(); _sendmax_cur_item = new RPComboBox(); _sendmax_cur_item.setEditable(true); _tagLabel = new RPLabel(); _tagText = new RPTextBox(); _feeText = new RPTextBox(); _feeLabel = new RPLabel(); _idText = new RPTextBox(); _idLabel = new RPLabel(); _spLine = new javax.swing.JSeparator(); _exitButton = new RPCButton(); _sendButton = new RPCButton(); getContentPane().setLayout(null); ArrayList<String> curList = Currencies.values(); Object[] curlist = curList.toArray(); ArrayList<String> gateways = Gateway.gatewayList(); Object[] gatewayslist = gateways.toArray(); ArrayList<String> flags = TransactionFlagMap.values(); Object[] flagslist = flags.toArray(); Font font = UIRes.getFont(); _amountGatewayLabel.setFont(font); // NOI18N _amountGatewayLabel.setText("Gateway"); getContentPane().add(_amountGatewayLabel); _amountGatewayLabel.setBounds(530, 60, 70, 33); _amountLabel.setFont(font); // NOI18N _amountLabel.setText("Amount"); getContentPane().add(_amountLabel); _amountLabel.setBounds(10, 60, 60, 30); _amountText.setFont(font); // NOI18N getContentPane().add(_amountText); _amountText.setBounds(140, 60, 190, 30); _amount_gateway_item.setItemModel(gatewayslist); getContentPane().add(_amount_gateway_item); _amount_gateway_item.setBounds(600, 60, 200, 30); _amountcurLabel.setFont(font); // NOI18N _amountcurLabel.setText("Currency"); getContentPane().add(_amountcurLabel); _amountcurLabel.setBounds(340, 60, 80, 33); _amount_cur_item.setItemModel(curlist); getContentPane().add(_amount_cur_item); _amount_cur_item.setBounds(420, 60, 100, 30); _sendmaxGatewayLabel.setFont(font); // NOI18N _sendmaxGatewayLabel.setText("Gateway"); getContentPane().add(_sendmaxGatewayLabel); _sendmaxGatewayLabel.setBounds(530, 110, 70, 33); _flagsLabel.setFont(font); // NOI18N _flagsLabel.setText("Flags"); getContentPane().add(_flagsLabel); _flagsLabel.setBounds(10, 310, 130, 30); _sendmaxText.setFont(font); // NOI18N getContentPane().add(_sendmaxText); _sendmaxText.setBounds(140, 110, 190, 30); _sendmax_gateway_item.setItemModel(gatewayslist); getContentPane().add(_sendmax_gateway_item); _sendmax_gateway_item.setBounds(600, 110, 200, 30); _sendmaxcurLabel.setFont(font); // NOI18N _sendmaxcurLabel.setText("Currency"); getContentPane().add(_sendmaxcurLabel); _sendmaxcurLabel.setBounds(340, 110, 80, 33); _flagsItem.setItemModel(flagslist); _flagsItem.setSelectedItem("Empty"); getContentPane().add(_flagsItem); _flagsItem.setBounds(140, 310, 250, 30); _deliveredGatewayLabel.setFont(font); // NOI18N _deliveredGatewayLabel.setText("Gateway"); getContentPane().add(_deliveredGatewayLabel); _deliveredGatewayLabel.setBounds(530, 160, 70, 33); _memoLabel.setFont(font); // NOI18N _memoLabel.setText("Memo"); getContentPane().add(_memoLabel); _memoLabel.setBounds(10, 360, 130, 30); _memoText.setFont(font); // NOI18N getContentPane().add(_memoText); _memoText.setBounds(140, 360, 660, 30); _delivered_gateway_item.setItemModel(gatewayslist); getContentPane().add(_delivered_gateway_item); _delivered_gateway_item.setBounds(600, 160, 200, 30); _deliveredcurLabel.setFont(font); // NOI18N _deliveredcurLabel.setText("Currency"); getContentPane().add(_deliveredcurLabel); _deliveredcurLabel.setBounds(340, 160, 80, 33); _delivered_cur_item.setItemModel(curlist); getContentPane().add(_delivered_cur_item); _delivered_cur_item.setBounds(420, 160, 100, 30); _deliveredLabel.setFont(font); // NOI18N _deliveredLabel.setText("Delivered Amount"); getContentPane().add(_deliveredLabel); _deliveredLabel.setBounds(10, 160, 130, 30); _deliveredText.setFont(font); // NOI18N getContentPane().add(_deliveredText); _deliveredText.setBounds(140, 160, 190, 30); _recipientLabel.setFont(font); // NOI18N _recipientLabel.setText("Recipient"); getContentPane().add(_recipientLabel); _recipientLabel.setBounds(10, 10, 130, 30); _recipientText.setFont(font); // NOI18N getContentPane().add(_recipientText); _recipientText.setBounds(140, 10, 660, 30); _sendmaxLabel.setFont(font); // NOI18N _sendmaxLabel.setText("SendMax"); getContentPane().add(_sendmaxLabel); _sendmaxLabel.setBounds(10, 110, 60, 30); _sendmax_cur_item.setItemModel(curlist); getContentPane().add(_sendmax_cur_item); _sendmax_cur_item.setBounds(420, 110, 100, 30); _tagLabel.setFont(font); // NOI18N _tagLabel.setText("DestinationTag"); getContentPane().add(_tagLabel); _tagLabel.setBounds(10, 210, 130, 30); _tagText.setFont(font); // NOI18N _tagText.setText("0"); getContentPane().add(_tagText); _tagText.setBounds(140, 210, 380, 30); _feeText.setFont(font); // NOI18N getContentPane().add(_feeText); _feeText.setBounds(140, 410, 190, 30); _feeLabel.setFont(font); // NOI18N _feeLabel.setText("Fee"); getContentPane().add(_feeLabel); _feeLabel.setBounds(10, 410, 60, 30); _idText.setFont(font); // NOI18N getContentPane().add(_idText); _idText.setBounds(140, 260, 660, 30); _idLabel.setFont(font); // NOI18N _idLabel.setText("InvoiceID"); getContentPane().add(_idLabel); _idLabel.setBounds(10, 260, 130, 30); getContentPane().add(_spLine); _spLine.setBounds(0, 460, 820, 10); _exitButton.setText(UIMessage.exit); _exitButton.setFont(font); getContentPane().add(_exitButton); _exitButton.setBounds(710, 480, 90, 40); _exitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SwingUtils.close(RPSendFlagsDialog.this); } }); _sendButton.setText(UIMessage.send); _sendButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final WaitDialog dialog = WaitDialog .showDialog(RPSendFlagsDialog.this); _waitDialogs.add(dialog); Updateable update = new Updateable() { @Override public void action(Object o) { String recipient = _recipientText.getText().trim(); if (!AccountFind.isRippleAddress(recipient)) { try { recipient = NameFind.getAddress(recipient); } catch (Exception ex) { RPToast.makeText(RPSendFlagsDialog.this, UIMessage.errNotAddress, Style.ERROR) .display(); return; } } String fee = _feeText.getText().trim(); if (!StringUtils.isNumber(fee)) { return; } Amount amount = getAmount(_amountText, _amount_cur_item, _amount_gateway_item); if (amount != null) { Amount deliveredAmount = getAmount(_deliveredText, _delivered_cur_item, _delivered_gateway_item); Amount sendMax = getAmount(_sendmaxText, _sendmax_cur_item, _sendmax_gateway_item); String invoiceID = _idText.getText().trim(); long dt = 0; long flags = 0; try { dt = new BigDecimal(_tagText.getText().trim()) .longValue(); flags = new BigDecimal(TransactionFlagMap .getFlag(((String) _flagsItem .getSelectedItem()).trim())) .longValue(); } catch (Exception ex) { dt = 0; flags = 0; } String memo = _memoText.getText().trim(); RippleMemoEncode encode = null; if (!StringUtils.isEmpty(memo)) { encode = new RippleMemoEncode( RippleMemoEncode.Mode.ENCODE, "message", memo, null); } Payment.send(_item.getSeed(), amount, sendMax, deliveredAmount, recipient, flags, dt, invoiceID, encode, fee, new Rollback() { @Override public void success(JSONObject res) { RPJSonLog.get().println(res); dialog.closeDialog(); } @Override public void error(JSONObject res) { dialog.closeDialog(); } }); } } }; LSystem.postThread(update); } }); _sendButton.setFont(font); getContentPane().add(_sendButton); _sendButton.setBounds(610, 480, 90, 40); _amountText.setText(LSystem.getMinSend()); _feeText.setText(LSystem.getFee()); getContentPane().setBackground(UIConfig.dialogbackground); pack(); } private static Amount getAmount(RPTextBox amountText, RPComboBox amount_cur_item, RPComboBox amount_gateway_item) { String amount = amountText.getText().trim(); if (!StringUtils.isNumber(amount)) { return null; } Amount amount_value = null; String amount_cur = ((String) amount_cur_item.getSelectedItem()).trim(); String amount_gateway = ((String) amount_gateway_item.getSelectedItem()) .trim(); if (StringUtils.isEmpty(amount_cur) || StringUtils.isEmpty(amount_gateway) || LSystem.nativeCurrency.equalsIgnoreCase(amount_cur)) { amount_value = Amount.fromString(amount); } else { String gateway_address = null; if (!AccountFind.isRippleAddress(amount_gateway)) { Gateway gateway = Gateway.getAddress(amount_gateway); if (gateway == null) { try { gateway_address = NameFind.getAddress(gateway_address); } catch (Exception ex) { return null; } } else { gateway_address = gateway.accounts.get(0).address; } } else { gateway_address = amount_gateway; } amount_value = Amount.fromString(amount + "/" + amount_cur + "/" + gateway_address); } return amount_value; } @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosing(WindowEvent e) { if (_waitDialogs != null) { for (WaitDialog wait : _waitDialogs) { if (wait != null) { wait.closeDialog(); } } } } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } }