This is an automated email from the git hooks/post-receive script. New commit to branch feature/8159-deconnexionAvecModification in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 1e9f435a970edb2a3022ef52eb625694b373ad3c Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Mar 23 12:13:12 2016 +0100 ne pas poroposer l'enregistrement des écran si la connexion avec le serveur a expirée (see #8159). --- .../fr/ird/observe/db/ObserveSwingDataSource.java | 35 ++++--- .../src/main/java/fr/ird/observe/ui/UIHelper.java | 7 +- .../ird/observe/ui/content/ContentUIHandler.java | 106 +++++++++++---------- .../observe-application-swing_fr_FR.properties | 2 +- 4 files changed, 84 insertions(+), 66 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java index 7c33dc1..e9695df 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java @@ -26,7 +26,6 @@ import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; -import fr.ird.observe.services.security.InvalidAuthenticationTokenException; import fr.ird.observe.services.service.BabModelVersionException; import fr.ird.observe.services.service.DataSourceService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; @@ -67,10 +66,14 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements protected ObserveDataSourceConnection connection; + // indique que la connexion a expiré mais que la source n'est pas complétement fermer + private boolean expired; + public ObserveSwingDataSource(ObserveDataSourceConfiguration configuration) { this.configuration = configuration; this.listenerList = new EventListenerList(); this.referentialCache = new ObserveReferentialCache(); + this.expired = false; } public ObserveDataSourceConfiguration getConfiguration() { @@ -174,20 +177,20 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements referentialCache.close(); - DataSourceService dataSourceService = newService(DataSourceService.class); - try { - dataSourceService.close(); - } catch (InvalidAuthenticationTokenException e) { - if (log.isWarnEnabled()) { - log.warn("Connexion from server was already close"); - } - } + // si la connection a expirée la source a deja été fermer pas le serveur + if (!expired) { + DataSourceService dataSourceService = newService(DataSourceService.class); - connection = null; + dataSourceService.close(); + } + } finally { + connection = null; + expired = false; - fireNewMessage(t("observe.storage.message.closed", getLabel())); - fireClosed(); + fireNewMessage(t("observe.storage.message.closed", getLabel())); + fireClosed(); + } } @@ -459,4 +462,12 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements protected void checkIsNotOpen() { Preconditions.checkState(!isOpen(), "Connection is open"); } + + public boolean isExpired() { + return expired; + } + + public void expired() { + this.expired = true; + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/UIHelper.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/UIHelper.java index 2aa5c2b..8ad6ab7 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/UIHelper.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/UIHelper.java @@ -530,7 +530,12 @@ public class UIHelper extends SwingUtil { if (containsExceptionInStack(e, InvalidAuthenticationTokenException.class)) { - ObserveMainUI observeMainUI = ObserveSwingApplicationContext.get().getObserveMainUI(); + ObserveSwingApplicationContext context = ObserveSwingApplicationContext.get(); + + // on indique que la source de donnée a expiré + context.getDataSource().expired(); + + ObserveMainUI observeMainUI = context.getObserveMainUI(); int result = askUser(observeMainUI, t("observe.storage.server.sessionExpire.title"), diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java index 368b106..d8792f0 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java @@ -171,60 +171,62 @@ public abstract class ContentUIHandler<E extends IdDto> { boolean wasClosed = true; - if (model.isValid()) { - // ask user if wants to save - int reponse = UIHelper.askUser( - (JComponent) ui, - t("observe.title.need.confirm"), - t("observe.message.quit.valid.edit"), - JOptionPane.WARNING_MESSAGE, - new Object[]{ - t("observe.choice.save"), - t("observe.choice.doNotSave"), - t("observe.choice.cancel")}, - 0); - if (log.isDebugEnabled()) { - log.debug("response : " + reponse); - } + if (! ui.getDataSource().isExpired()) { + if (model.isValid()) { + // ask user if wants to save + int reponse = UIHelper.askUser( + (JComponent) ui, + t("observe.title.need.confirm"), + t("observe.message.quit.valid.edit"), + JOptionPane.WARNING_MESSAGE, + new Object[]{ + t("observe.choice.save"), + t("observe.choice.doNotSave"), + t("observe.choice.cancel")}, + 0); + if (log.isDebugEnabled()) { + log.debug("response : " + reponse); + } - switch (reponse) { - case JOptionPane.CLOSED_OPTION: - case 2: - wasClosed = false; - break; - case 0: - // will save ui - ui.save(false); - break; - case 1: - // wil reset ui - ui.resetEdit(); - break; - } + switch (reponse) { + case JOptionPane.CLOSED_OPTION: + case 2: + wasClosed = false; + break; + case 0: + // will save ui + ui.save(false); + break; + case 1: + // wil reset ui + ui.resetEdit(); + break; + } - } else { - // ask user if wants to quit without saving since edit is not valid - int reponse = UIHelper.askUser( - (JComponent) ui, - t("observe.title.need.confirm"), - t("observe.message.quit.invalid.edit"), - JOptionPane.ERROR_MESSAGE, - new Object[]{ - t("observe.choice.continue"), - t("observe.choice.cancel")}, - 0); - if (log.isDebugEnabled()) { - log.debug("response : " + reponse); - } - switch (reponse) { - case JOptionPane.CLOSED_OPTION: - case 1: - wasClosed = false; - break; - case 0: - // wil reset ui - ui.resetEdit(); - break; + } else { + // ask user if wants to quit without saving since edit is not valid + int reponse = UIHelper.askUser( + (JComponent) ui, + t("observe.title.need.confirm"), + t("observe.message.quit.invalid.edit"), + JOptionPane.ERROR_MESSAGE, + new Object[]{ + t("observe.choice.continue"), + t("observe.choice.cancel")}, + 0); + if (log.isDebugEnabled()) { + log.debug("response : " + reponse); + } + switch (reponse) { + case JOptionPane.CLOSED_OPTION: + case 1: + wasClosed = false; + break; + case 0: + // wil reset ui + ui.resetEdit(); + break; + } } } if (wasClosed) { diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties index 6c7c649..ccb8c61 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties @@ -1942,7 +1942,7 @@ observe.storage.selected.dbMode=Type de source de données sélectionné observe.storage.selectedCreationMode=Mode de création sélectionné observe.storage.server.dataBase=Base de données observe.storage.server.db=(serveur distant) -observe.storage.server.sessionExpire=La connexion avec le serveur n'est plus active. Que voulez-faire ?\n\n\t - Fermer la connexion avec le serveur, \n\t - Changer de source de données, \n\t - Se re-conncter au serveur. +observe.storage.server.sessionExpire=La connexion avec le serveur n'est plus active. Que voulez-faire ?\n\n\t - Fermer la connexion avec le serveur, \n\t - Changer de source de données, \n\t - Se re-conncter au serveur.\n\n ATTENTION : Les modifications en cours seront perdu ! observe.storage.server.sessionExpire.change=Changer observe.storage.server.sessionExpire.close=Fermer observe.storage.server.sessionExpire.reload=Re-connecter -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.