package org.commonjava.sshwrap.ui; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class SwingPrompter implements Prompter { private String password; private String passphrase; @Override public String getPassphrase() { return passphrase; } @Override public String getPassword() { return password; } @Override public boolean promptPassphrase( final String prompt ) { if ( passphrase == null ) { passphrase = JOptionPane.showInputDialog( prompt ); } return true; } @Override public boolean promptPassword( final String prompt ) { if ( password == null ) { password = JOptionPane.showInputDialog( prompt ); } return true; } @Override public boolean promptYesNo( final String prompt ) { // return true; return JOptionPane.showConfirmDialog( null, prompt ) == JOptionPane.OK_OPTION; } @Override public void showMessage( final String message ) { JOptionPane.showMessageDialog( null, message ); } @Override public String[] promptKeyboardInteractive( final String destination, final String name, final String instruction, final String[] prompt, final boolean[] echo ) { final Container panel = new JPanel(); panel.setLayout( new GridBagLayout() ); final GridBagConstraints gbc = new GridBagConstraints( 0, 0, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets( 0, 0, 0, 0 ), 0, 0 ); gbc.weightx = 1.0; gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.gridx = 0; panel.add( new JLabel( instruction ), gbc ); gbc.gridy++; gbc.gridwidth = GridBagConstraints.RELATIVE; final JTextField[] texts = new JTextField[prompt.length]; for ( int i = 0; i < prompt.length; i++ ) { gbc.fill = GridBagConstraints.NONE; gbc.gridx = 0; gbc.weightx = 1; panel.add( new JLabel( prompt[i] ), gbc ); gbc.gridx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weighty = 1; if ( echo[i] ) { texts[i] = new JTextField( 20 ); } else { texts[i] = new JPasswordField( 20 ); } panel.add( texts[i], gbc ); gbc.gridy++; } final int answer = JOptionPane.showConfirmDialog( null, panel, destination + ": " + name, JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE ); if ( answer == JOptionPane.OK_OPTION ) { final String[] response = new String[prompt.length]; for ( int i = 0; i < prompt.length; i++ ) { response[i] = texts[i].getText(); } return response; } else { return null; // cancel } } }