Author: tchemit Date: 2008-02-13 22:45:06 +0000 (Wed, 13 Feb 2008) New Revision: 940 Added: trunk/simexplorer-is/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/LoginUI.jaxx Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties Log: action de connexion ok Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java 2008-02-13 22:21:29 UTC (rev 939) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java 2008-02-13 22:45:06 UTC (rev 940) @@ -18,12 +18,17 @@ * ##% */ package fr.cemagref.simexplorer.is.ui.swing.actions; +import fr.cemagref.simexplorer.is.service.AuthenticationServiceHelper; import fr.cemagref.simexplorer.is.service.SimExplorerServiceException; import fr.cemagref.simexplorer.is.service.StorageService; +import fr.cemagref.simexplorer.is.ui.SimExplorerRuntimeException; +import fr.cemagref.simexplorer.is.ui.StorageServiceHelper; +import fr.cemagref.simexplorer.is.ui.swing.LoginUI; +import fr.cemagref.simexplorer.is.ui.swing.SimExplorerUIRefreshHelper; import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractAction; -import fr.cemagref.simexplorer.is.ui.swing.SimExplorerUIRefreshHelper; -import fr.cemagref.simexplorer.is.ui.StorageServiceHelper; +import static org.codelutin.i18n.I18n._; +import javax.swing.JOptionPane; import java.awt.event.ActionEvent; /** @@ -43,11 +48,11 @@ ) public class ConnectAction extends SimExplorerAbstractAction { + LoginUI ui; + MyLoginUIHandler loginUIHandler; + private static final long serialVersionUID = -6172528731543675359L; - String login; - String password; - public ConnectAction(String name) { super(name); } @@ -57,41 +62,85 @@ if (getContext().isConnected()) { return false; } - - login = getContext().getConfig().getRemoteLogin(); - password = getContext().getConfig().getRemotePassword(); - if (login == null || password == null) { - //TODO show login ui - password = "password"; - getContext().getConfig().setRemotePassword(password); - } + initLoginUI(); return true; } @Override protected void doAction(ActionEvent e) throws Exception { super.doAction(e); - StorageService service = StorageServiceHelper.getService(getContext(),true); - - try { - String token = service.loginUser(login, password); - getContext().setToken(token); - } catch (SimExplorerServiceException e1) { - //TODO alert user of error - log.warn("could not connect user for reason " + e1.getMessage()); - throw e1; + String login = getContext().getConfig().getRemoteLogin(); + String hashPassword = getContext().getConfig().getRemotePassword(); + if (hashPassword == null || hashPassword.length()==0 || !loginUIHandler.connect(login, hashPassword)) { + ui.launch(login); } } @Override protected void afterAction(ActionEvent e) throws Exception { - SimExplorerUIRefreshHelper.refreshConnnectState(getMainUI(), true); + SimExplorerUIRefreshHelper.refreshConnnectState(getMainUI(), getContext().isConnected()); } @Override protected void clear() { super.clear(); - login = null; - password = null; } + + protected void initLoginUI() { + if (ui == null) { + loginUIHandler = new MyLoginUIHandler(); + ui = new LoginUI(getMainUI(), loginUIHandler); + } + } + + private class MyLoginUIHandler extends LoginUI.LoginUIHandler { + /** + * Tente de se connecter au service. + * <p/> + * Le mot de passe hashé est sauvegardé. + * <p/> + * Si l'utilisateur abandonne l'opération, alors on reset le mot de + * passe hashé dans la config et on sauvegarde la config. + * + * @param login le login de l'utilisateur + * @param password le password hashé de l'utilisateur + * @return <code>true</code> si l'utilisateur est connecté + */ + protected boolean connect(String login, String password) { + StorageService service = StorageServiceHelper.getService(getContext(), true); + String token; + try { + token = service.loginUser(login, password); + } catch (SimExplorerServiceException e) { + token = null; + } + getContext().setToken(token); + boolean isConnected = getContext().isConnected(); + if (isConnected) { + // keep login and password + getContext().getConfig().setRemoteLogin(login); + getContext().getConfig().setRemotePassword(password); + } else { + // delete login and password + getContext().getConfig().setRemoteLogin(null); + getContext().getConfig().setRemotePassword(null); + } + //Save configuration, I don't like it, but required by client... + getContext().getConfig().saveSafely(); + return isConnected; + } + + protected boolean connect(String login, char[] password) { + try { + return connect(login, AuthenticationServiceHelper.computeHash(password)); + } catch (SimExplorerServiceException e) { + throw new SimExplorerRuntimeException(e); + } + } + + protected boolean failedToConnect() { + int result = JOptionPane.showConfirmDialog(ui, _("simexplorer.login.retry"), _("simexplorer.login.failed"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE); + return result == JOptionPane.NO_OPTION; + } + } } \ No newline at end of file Modified: trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties 2008-02-13 22:21:29 UTC (rev 939) +++ trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties 2008-02-13 22:45:06 UTC (rev 940) @@ -117,13 +117,16 @@ simexplorer.action.unconnect.help= simexplorer.action.unconnect.tooltip=Disconnect from remote server simexplorer.change.config.property= +simexplorer.common.apply= simexplorer.common.cancel= simexplorer.common.close=Close simexplorer.common.creationDate=create date simexplorer.common.description=description simexplorer.common.key=key +simexplorer.common.login= simexplorer.common.name=name simexplorer.common.ok= +simexplorer.common.passphrase= simexplorer.common.type=type simexplorer.common.value=value simexplorer.common.version=version @@ -153,6 +156,9 @@ simexplorer.error.load.actions.file=could not load actions.properties file for reason {0} simexplorer.error.unfound.config.property= simexplorer.help.menu=Help +simexplorer.login.failed= +simexplorer.login.retry= +simexplorer.login.title= simexplorer.main.menu=Main simexplorer.main.ui.title=SimExplorer SI v 0.0.1 simexplorer.message.reset.user.configuration= Modified: trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties 2008-02-13 22:21:29 UTC (rev 939) +++ trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties 2008-02-13 22:45:06 UTC (rev 940) @@ -117,13 +117,16 @@ simexplorer.action.unconnect.help= simexplorer.action.unconnect.tooltip=Se d\u00E9connecter du serveur distant simexplorer.change.config.property= +simexplorer.common.apply=Appliquer simexplorer.common.cancel=Annuler simexplorer.common.close=Fermer simexplorer.common.creationDate=date de cr\u00E9ation simexplorer.common.description=description simexplorer.common.key=nom descriptor +simexplorer.common.login=Login utilisateur simexplorer.common.name=nom simexplorer.common.ok=Ok +simexplorer.common.passphrase=Mot de passe simexplorer.common.type=type simexplorer.common.value=valeur simexplorer.common.version=version @@ -153,6 +156,9 @@ simexplorer.error.load.actions.file=could not load actions.properties file for reason {0} simexplorer.error.unfound.config.property= simexplorer.help.menu=Aide +simexplorer.login.failed=L'authentification a \u00E9chou\u00E9e +simexplorer.login.retry=Voulez-vous ressayer de vous connecter ? +simexplorer.login.title=Connexion au serveur central simexplorer.main.menu=Menu principal simexplorer.main.ui.title=SimExplorer SI v 0.0.1 simexplorer.message.reset.user.configuration= Added: trunk/simexplorer-is/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/LoginUI.jaxx =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/LoginUI.jaxx (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/LoginUI.jaxx 2008-02-13 22:45:06 UTC (rev 940) @@ -0,0 +1,89 @@ +<JDialog title='simexplorer.login.title' modal='true'> + <script> + public static abstract class LoginUIHandler { + + boolean cancel; + LoginUI ui; + + protected abstract boolean connect(String login,char[] password); + + protected abstract boolean failedToConnect(); + + public void doConnect() { + cancel = false; + if (!connect(ui.getLogin().getText(),ui.getPassword().getPassword())) { + if (failedToConnect()) { + cancel = true; + } + } else { + cancel = true; + } + } + + public void doCancel() { + cancel = false; + ui.login.setText(null); + ui.password.setText(null); + } + + protected void setUi(LoginUI ui) { + this.ui = ui; + } + } + + protected LoginUIHandler handler; + + public boolean launch(String login) { + if (login != null) { + this.getLogin().setText(login); + } + setVisible(true); + return !handler.cancel; + } + + public LoginUI(JFrame instance, LoginUIHandler handler) { + super(instance); + this.handler = handler; + this.handler.setUi(this); + // block close operation + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + } + protected void doConnect() { + handler.doConnect(); + if (handler.cancel) { + doCancel(); + } + } + + protected void doCancel() { + handler.doCancel(); + dispose(); + } + </script> + <Table> + <row fill='horizontal'> + <cell> + <JLabel text='simexplorer.common.login' labelFor='{login}'/> + </cell> + <cell> + <JTextField id='login' onKeyReleased='ok.setEnabled(login.getText().trim().length()>0 && password.getPassword().length>0)'/> + </cell> + </row> + <row fill='horizontal'> + <cell> + <JLabel text='simexplorer.common.passphrase' labelFor='{password}'/> + </cell> + <cell> + <JPasswordField id='password' onKeyReleased='ok.setEnabled(login.getText().trim().length()>0 && password.getPassword().length>0)'/> + </cell> + </row> + <row fill='horizontal'> + <cell columns="2"> + <JPanel layout='{new GridLayout(0, 2, 2, 2)}'> + <JButton id='ok' text='simexplorer.common.apply' onActionPerformed="doConnect()" enabled='false'/> + <JButton text='simexplorer.common.cancel' onActionPerformed="doCancel()"/> + </JPanel> + </cell> + </row> + </Table> +</JDialog>