package org.isatools.isacreator.gs.gui; import org.apache.log4j.Logger; import org.isatools.errorreporter.model.ErrorMessage; import org.isatools.errorreporter.model.FileType; import org.isatools.errorreporter.model.ISAFileErrorReport; import org.isatools.isacreator.api.Authentication; import org.isatools.isacreator.api.ImportConfiguration; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.effects.components.RoundedJPasswordField; import org.isatools.isacreator.effects.components.RoundedJTextField; import org.isatools.isacreator.gs.GSLocalFilesManager; import org.isatools.isacreator.gui.menu.*; import org.isatools.isacreator.launch.ISAcreatorCLArgs; import org.jdesktop.fuse.InjectedResource; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; /** * Created by the ISATeam. * User: agbeltran * Date: 08/10/2012 * Time: 17:26 * * @author <a href="mailto:alejandra.gonzalez.beltran@gmail.com">Alejandra Gonzalez-Beltran</a> */ public class GSAuthenticationMenu extends MenuUIComponent { private static final Logger log = Logger.getLogger(GSAuthenticationMenu.class); //GUI related fields private JLabel status; private JPasswordField password; private JTextField username; private JLabel iconLabel; private JLabel register, login, exit, ssoLabel; //checkbox for single sign on private JCheckBox sso; private Authentication authentication = null; @InjectedResource public ImageIcon gs_logo, pleaseLogin, loginButton, loginButtonOver, registerIcon, registerOverIcon, exitButtonSml, exitButtonSmlOver, genomespacelogo, ssoIcon, ssoOverIcon; public GSAuthenticationMenu(ISAcreatorMenu menu, Authentication authManager) { super(menu); authentication = authManager; status = new JLabel(); status.setForeground(UIHelper.RED_COLOR); setPreferredSize(new Dimension(400, 300)); setLayout(new BorderLayout()); setOpaque(false); setClassFields(); } public GSAuthenticationMenu(ISAcreatorMenu menu, Authentication authManager, String defaultUsername) { this(menu, authManager); username.setText(defaultUsername); } private void setClassFields() { username = new RoundedJTextField(10, UIHelper.TRANSPARENT_LIGHT_GREEN_COLOR); } public void createGUI() { // create username field info Box fields = Box.createVerticalBox(); fields.add(Box.createVerticalStrut(10)); fields.setOpaque(false); //username JPanel userNameCont = new JPanel(new GridLayout(1, 2)); JLabel usernameLabel = new JLabel("username "); usernameLabel.setFont(UIHelper.VER_12_BOLD); usernameLabel.setForeground(UIHelper.DARK_GREEN_COLOR); userNameCont.add(usernameLabel); username.setOpaque(false); UIHelper.renderComponent(username, UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR, false); userNameCont.add(username); userNameCont.setOpaque(false); username.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { status.setText(""); } } ); //password JPanel passwordCont = new JPanel(new GridLayout(1, 2)); JLabel passwordLabel = new JLabel("password "); passwordLabel.setFont(UIHelper.VER_12_BOLD); passwordLabel.setForeground(UIHelper.DARK_GREEN_COLOR); passwordCont.add(passwordLabel); password = new RoundedJPasswordField(10, UIHelper.TRANSPARENT_LIGHT_GREEN_COLOR); UIHelper.renderComponent(password, UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR, false); password.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { status.setText(""); } } ); passwordCont.add(password); passwordCont.setOpaque(false); fields.add(userNameCont); fields.add(Box.createVerticalStrut(10)); fields.add(passwordCont); //north panel JPanel northPanel = new JPanel(); northPanel.add(new JLabel( gs_logo, JLabel.LEFT), BorderLayout.NORTH); northPanel.add(new JLabel( pleaseLogin, JLabel.RIGHT), BorderLayout.NORTH); northPanel.add(fields, BorderLayout.CENTER); JPanel buttonContainer = new JPanel(new BorderLayout()); buttonContainer.setOpaque(false); login = new JLabel(loginButton, JLabel.RIGHT); login.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { login.setIcon(GSAuthenticationMenu.this.loginButton); confirmExitPanel.setVisible(false); status.setText(""); menu.showProgressPanel("Logging in to GenomeSpace..."); login(); } public void mouseEntered(MouseEvent event) { login.setIcon(loginButtonOver); } public void mouseExited(MouseEvent event) { login.setIcon(loginButton); } }); login.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { status.setText(""); } } ); Action loginAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { menu.showProgressPanel("Logging in to GenomeSpace..."); login(); } }; password.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "LOGIN"); password.getActionMap().put("LOGIN", loginAction); username.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "LOGIN"); username.getActionMap().put("LOGIN", loginAction); final JLabel registerButton = new JLabel(registerIcon); UIHelper.renderComponent(registerButton, UIHelper.VER_9_BOLD, UIHelper.DARK_GREEN_COLOR, false); /* //code to use the API to register when ready //register register = new JLabel(registerIcon, JLabel.LEFT); register.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { register.setIcon(registerIcon); clearFields(); confirmExitPanel.setVisible(false); //TODO change this for registration menu menu.changeView(menu.getCreateProfileGUI()); } public void mouseEntered(MouseEvent event) { register.setIcon(registerOverIcon); } public void mouseExited(MouseEvent event) { register.setIcon(registerIcon); } }); buttonContainer.add(register); */ registerButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent mouseEvent) { registerButton.setIcon(registerIcon); } @Override public void mouseEntered(MouseEvent mouseEvent) { registerButton.setIcon(registerOverIcon); } @Override public void mousePressed(MouseEvent mouseEvent) { registerButton.setIcon(registerIcon); try { Desktop.getDesktop().browse(new URI("http://www.genomespace.org/register")); } catch (IOException e1) { log.error("IOException - " + e1.getMessage()); } catch (URISyntaxException e1) { log.error("URISyntaxException - " + e1.getMessage()); } } }); buttonContainer.add(registerButton, BorderLayout.WEST); buttonContainer.add(login, BorderLayout.EAST); exit = new JLabel(exitButtonSml, JLabel.CENTER); exit.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { exit.setIcon(exitButtonSml); confirmExitPanel.setVisible(true); confirmExitPanel.getParent().validate(); } public void mouseEntered(MouseEvent event) { exit.setIcon(exitButtonSmlOver); } public void mouseExited(MouseEvent event) { exit.setIcon(exitButtonSml); } }); //exit JPanel exitContainer = new JPanel(new GridLayout(1, 1)); exitContainer.setOpaque(false); exitContainer.add(exit); //south panel JPanel southPanel = new JPanel(new GridLayout(4, 1)); southPanel.setOpaque(false); southPanel.add(status); southPanel.add(buttonContainer); southPanel.add(exitContainer); southPanel.add(confirmExitPanel); northPanel.add(southPanel, BorderLayout.SOUTH); northPanel.setOpaque(false); add(northPanel, BorderLayout.CENTER); } private void login() { Thread performer = new Thread(new Runnable() { public void run() { // success, so load String passwordString = new String(password.getPassword()); if (!username.getText().equals("") && !passwordString.equals("") && authentication.login(username.getText(), password.getPassword())) { //logged in clearFields(); if (ISAcreatorCLArgs.configDir() == null) { SwingUtilities.invokeLater(new Runnable() { public void run() { menu.stopProgressIndicator(); menu.resetViewAfterProgress(); menu.changeView(menu.getImportConfigurationGUI()); } }); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { menu.stopProgressIndicator(); menu.resetViewAfterProgress(); menu.changeView( UIHelper.wrapComponentInPanel(new JLabel(AbstractImportFilesMenu.loadISAanimation)) ); } }); //load configuration and go to main menu ImportConfiguration importConfiguration = new ImportConfiguration(ISAcreatorCLArgs.configDir()); boolean successful = importConfiguration.loadConfiguration(); if (successful) { if (ISAcreatorCLArgs.isatabDir() != null) { java.util.List<ErrorMessage> errors = GSLocalFilesManager.downloadFiles(menu.getAuthentication()); if (!errors.isEmpty()) { //Problem downloading the files //load menu to show errors when loading files System.out.println("Number of errors: " + errors.size()); System.out.println("Showing first one: " + errors.get(0).getMessage()); //status.setText(errors.get(0).getMessage()); ISAFileErrorReport error = new ISAFileErrorReport("", FileType.INVESTIGATION, errors); List<ISAFileErrorReport> list = new ArrayList<ISAFileErrorReport>(); list.add(error); ErrorMenu errorMenu = new ErrorMenu(menu, list, false, menu.getMainMenuGUI()); errorMenu.createGUI(); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { menu.loadFiles(ISAcreatorCLArgs.isatabDir(), false); } }); } } else { //isatabDir is null SwingUtilities.invokeLater(new Runnable() { public void run() { menu.resetViewAfterProgress(); menu.changeView(menu.getMainMenuGUI()); } }); } } else { SwingUtilities.invokeLater(new Runnable() { public void run() { menu.resetViewAfterProgress(); status.setText( "<html><b>Error: </b> Loading of configuratin file was unsuccessful. </html>"); } }); } } } else { SwingUtilities.invokeLater(new Runnable() { public void run() { menu.stopProgressIndicator(); menu.resetViewAfterProgress(); status.setText( "<html><b>Error: </b> Username or password incorrect! </html>"); } }); } } } ); performer.start(); } public void clearFields() { status.setText(""); password.setText(""); username.setText(""); } }