package grith.jgrith.view.swing.proxyInit; import grisu.jcommons.commonInterfaces.ProxyCreatorHolder; import grith.jgrith.plainProxy.PlainProxy; import grith.jgrith.utils.CredentialHelpers; import grith.jgrith.view.swing.Utils; import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import org.globus.gsi.GlobusCredential; import org.ietf.jgss.GSSCredential; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.FormSpecs; import com.jgoodies.forms.layout.RowSpec; public class LocalX509CertProxyCreatorPanel extends JPanel { public static final Integer[] DEFAULT_PROXY_LIFETIME_VALUES = new Integer[] { 1, 2, 3, 7, 14, 21 }; private JComboBox comboBox; private JLabel lifetimeInDaysLabel; private JButton authenticateButton; private JPasswordField passwordField; private JLabel pleaseProvideYourLabel; private ProxyCreatorHolder holder = null; private DefaultComboBoxModel lifetimeModel = new DefaultComboBoxModel( DEFAULT_PROXY_LIFETIME_VALUES); /** * Create the panel */ public LocalX509CertProxyCreatorPanel() { super(); setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("43dlu:grow"), FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, RowSpec.decode("10dlu"), FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, RowSpec.decode("11dlu"), RowSpec.decode("default:grow"), FormSpecs.RELATED_GAP_ROWSPEC, })); // enablePanel(false); add(getPleaseProvideYourLabel(), new CellConstraints(2, 2, 3, 1)); add(getPasswordField(), new CellConstraints(2, 4, 3, 1)); add(getAuthenticateButton(), "4, 8, default, bottom"); add(getLifetimeInDaysLabel(), new CellConstraints(2, 6)); add(getComboBox(), new CellConstraints(4, 6)); } public void enablePanel(boolean enable) { getPasswordField().setEnabled(enable); getAuthenticateButton().setEnabled(enable); getComboBox().setEnabled(enable); } /** * @return */ protected JButton getAuthenticateButton() { if (authenticateButton == null) { authenticateButton = new JButton(); authenticateButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (holder != null) { new Thread() { public void run() { gridProxyInit(); } }.start(); } } }); authenticateButton.setText("Authenticate"); } return authenticateButton; } /** * @return */ protected JComboBox getComboBox() { if (comboBox == null) { comboBox = new JComboBox(lifetimeModel); comboBox.setEditable(true); } return comboBox; } /** * @return */ protected JLabel getLifetimeInDaysLabel() { if (lifetimeInDaysLabel == null) { lifetimeInDaysLabel = new JLabel(); lifetimeInDaysLabel.setText("Lifetime in days:"); } return lifetimeInDaysLabel; } /** * @return */ protected JPasswordField getPasswordField() { if (passwordField == null) { passwordField = new JPasswordField(); passwordField.addKeyListener(new KeyAdapter() { public void keyPressed(final KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { if (holder != null) { new Thread() { public void run() { gridProxyInit(); } }.start(); } } } }); } return passwordField; } /** * @return */ protected JLabel getPleaseProvideYourLabel() { if (pleaseProvideYourLabel == null) { pleaseProvideYourLabel = new JLabel(); pleaseProvideYourLabel .setText("Please provide your private key passphrase:"); } return pleaseProvideYourLabel; } private void gridProxyInit() { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); enablePanel(false); Integer lifetimeInDays = null; try { lifetimeInDays = (Integer) lifetimeModel.getSelectedItem(); } catch (Exception e) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); JOptionPane.showMessageDialog(LocalX509CertProxyCreatorPanel.this, "You have to specify an integer value for the lifetime", "Error parsing lifetime value", JOptionPane.ERROR_MESSAGE); enablePanel(true); return; } int lifetime_in_hours = lifetimeInDays * 24; try { GSSCredential cred = PlainProxy.init(getPasswordField() .getPassword(), lifetime_in_hours); GlobusCredential proxy = CredentialHelpers .unwrapGlobusCredential(cred); holder.proxyCreated(proxy); getPasswordField().setText(""); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); enablePanel(true); } catch (Exception e1) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); enablePanel(true); Utils.showErrorMessage(LocalX509CertProxyCreatorPanel.this, "localProxyCreationError", e1); } } public void setProxyCreatorHolder(ProxyCreatorHolder holder) { this.holder = holder; if (this.holder == null) { enablePanel(false); } else { enablePanel(true); } } }