package grith.jgrith.view.swing.proxyInit; import grisu.jcommons.commonInterfaces.ProxyCreatorHolder; import grith.jgrith.Environment; import grith.jgrith.control.UserProperty; import grith.jgrith.myProxy.MyProxy_light; import grith.jgrith.utils.CredentialHelpers; 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 javax.swing.JTextField; import org.globus.gsi.GlobusCredential; import org.globus.myproxy.MyProxy; import org.globus.myproxy.MyProxyException; import org.ietf.jgss.GSSCredential; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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 MyProxyProxyCreatorPanelWithMyProxyTextFields extends JPanel { private JLabel lifetimeinDaysLabel; private JComboBox comboBox; private static final Logger myLogger = LoggerFactory .getLogger(MyProxyProxyCreatorPanelWithMyProxyTextFields.class .getName()); public static final Integer[] DEFAULT_PROXY_LIFETIME_VALUES = new Integer[] { 1, 2, 3, 7, 14, 21 }; private MyProxy myproxy = null; private JButton button; private JLabel titleLabel; private JPasswordField passwordField; private JTextField usernameTextField; private JLabel passwordLabel; private JLabel usernameLabel; private ProxyCreatorHolder holder = null; private final DefaultComboBoxModel lifetimeModel = new DefaultComboBoxModel( DEFAULT_PROXY_LIFETIME_VALUES); /** * Create the panel */ public MyProxyProxyCreatorPanelWithMyProxyTextFields() { super(); setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("42dlu:grow(1.0)"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("17dlu"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("39dlu"), FormSpecs.RELATED_GAP_COLSPEC }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, RowSpec.decode("9dlu"), FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, RowSpec.decode("9dlu"), FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC })); add(getUsernameLabel(), new CellConstraints(2, 4)); add(getPasswordLabel(), new CellConstraints(2, 6)); add(getUsernameTextField(), new CellConstraints(4, 4, 5, 1)); add(getPasswordField(), new CellConstraints(4, 6, 5, 1)); add(getTitleLabel(), new CellConstraints(2, 2, 7, 1)); add(getButton(), new CellConstraints(6, 10, 3, 1)); add(getComboBox(), new CellConstraints(8, 8)); add(getLifetimeinDaysLabel(), new CellConstraints(2, 8, 3, 1)); // enablePanel(false); } private void enablePanel(boolean enable) { getButton().setEnabled(enable); getUsernameTextField().setEnabled(enable); getPasswordField().setEnabled(enable); getComboBox().setEnabled(enable); } /** * @return */ protected JButton getButton() { if (button == null) { button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (holder != null) { new Thread() { @Override public void run() { myProxyLogin(); } }.start(); } } }); button.setText("Authenticate"); } return button; } /** * @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; } public MyProxy getMyproxy() { if (myproxy == null) { return Environment.getDefaultMyProxy(); } return myproxy; } /** * @return */ protected JPasswordField getPasswordField() { if (passwordField == null) { passwordField = new JPasswordField(); passwordField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { if (holder != null) { new Thread() { @Override public void run() { myProxyLogin(); } }.start(); } } } }); } return passwordField; } /** * @return */ protected JLabel getPasswordLabel() { if (passwordLabel == null) { passwordLabel = new JLabel(); passwordLabel.setText("Password:"); } return passwordLabel; } /** * @return */ protected JLabel getTitleLabel() { if (titleLabel == null) { titleLabel = new JLabel(); titleLabel.setText("Please provide your MyProxy details:"); } return titleLabel; } /** * @return */ protected JLabel getUsernameLabel() { if (usernameLabel == null) { usernameLabel = new JLabel(); usernameLabel.setText("Username:"); } return usernameLabel; } /** * @return */ protected JTextField getUsernameTextField() { if (usernameTextField == null) { usernameTextField = new JTextField(); usernameTextField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { getPasswordField().requestFocus(); } } }); } return usernameTextField; } private void myProxyLogin() { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); enablePanel(false); String username = getUsernameTextField().getText(); if ((username == null) || "".equals(username)) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); JOptionPane.showMessageDialog( MyProxyProxyCreatorPanelWithMyProxyTextFields.this, "You have to provide a username", "No username", JOptionPane.ERROR_MESSAGE); enablePanel(true); return; } try { UserProperty.setProperty(UserProperty.LAST_MYPROXY_USERNAME_KEY, username); } catch (Exception e2) { // doesn't really matter } char[] passphrase = getPasswordField().getPassword(); if ((passphrase == null) || (passphrase.length == 0)) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); JOptionPane.showMessageDialog( MyProxyProxyCreatorPanelWithMyProxyTextFields.this, "You have to provide a password", "No password", JOptionPane.ERROR_MESSAGE); enablePanel(true); return; } Integer lifetimeInDays = null; try { lifetimeInDays = (Integer) lifetimeModel.getSelectedItem(); } catch (Exception e) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); JOptionPane.showMessageDialog( MyProxyProxyCreatorPanelWithMyProxyTextFields.this, "You have to specify an integer value for the lifetime", "Error parsing lifetime value", JOptionPane.ERROR_MESSAGE); enablePanel(true); return; } int lifetimeInSecs = lifetimeInDays * 24 * 3600; try { GSSCredential cred = MyProxy_light.getDelegation(getMyproxy() .getHost(), getMyproxy().getPort(), username, passphrase, lifetimeInSecs); GlobusCredential proxy = CredentialHelpers .unwrapGlobusCredential(cred); holder.proxyCreated(proxy); getPasswordField().setText(""); enablePanel(true); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } catch (MyProxyException e1) { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); JOptionPane.showMessageDialog( MyProxyProxyCreatorPanelWithMyProxyTextFields.this, "Could not download proxy:\n\n" + e1.getLocalizedMessage(), "Proxy download error", JOptionPane.ERROR_MESSAGE); enablePanel(true); return; } } public void setMyproxy(MyProxy myproxy) { this.myproxy = myproxy; } public void setProxyCreatorHolder(ProxyCreatorHolder holder) { this.holder = holder; if (this.holder == null) { enablePanel(false); } else { enablePanel(true); } } }