This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 2b2853bcbaa5806b8a96f1b83f1be6b1e51f5647 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Nov 9 11:53:31 2015 +0100 enregistrement de toutes les source de données ouvertes pour les fermer a l'arrêt de l'appli (refs #7700) --- .../observe/ObserveSwingApplicationContext.java | 55 +++++++++++++++++++--- .../observe/ui/actions/ReloadStorageAction.java | 11 +++-- .../ird/observe/ui/storage/ObstunaAdminAction.java | 15 +++--- .../ird/observe/ui/storage/StorageUIHandler.java | 12 ++--- .../fr/ird/observe/ui/storage/StorageUIModel.java | 10 ++-- 5 files changed, 74 insertions(+), 29 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java index 5451514..6b67185 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java @@ -34,6 +34,7 @@ import fr.ird.observe.db.event.ObserveSwingDataSourceListenerAdapter; import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.ObserveServiceMainFactory; +import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.IdDtos; @@ -171,6 +172,8 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im public static final JAXXContextEntryDef<ObserveSwingDataSource> SWING_DATA_SOURCE_ENTRY_DEF = JAXXUtil.newContextEntryDef(ObserveSwingDataSource.class); + public static final JAXXContextEntryDef<List<ObserveSwingDataSource>> SWING_DATA_SOURCE_LIST_ENTRY_DEF = + JAXXUtil.newListContextEntryDef(); public static final JAXXContextEntryDef<ValidationContext> VALIDATION_CONTEXT_ENTRY_DEF = JAXXUtil.newContextEntryDef(ValidationContext.class); @@ -223,6 +226,45 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im } } + public final ObserveSwingDataSource newDataSource(ObserveDataSourceConfiguration configuration) { + ObserveSwingDataSource dataSource = new ObserveSwingDataSource(configuration); + + dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() { + @Override + public void onOpened(ObserveSwingDataSourceEvent event) { + super.onOpened(event); + ObserveSwingDataSource dataSource = event.getSource(); + getAllDataSource().add(dataSource); + + if (log.isInfoEnabled()) { + log.info("Data source opened : " + dataSource.getConfiguration() + " (" + getAllDataSource().size() + " datas sources open)"); + } + } + + @Override + public void onClosed(ObserveSwingDataSourceEvent event) { + super.onClosed(event); + ObserveSwingDataSource dataSource = event.getSource(); + getAllDataSource().remove(dataSource); + if (log.isInfoEnabled()) { + log.info("Data source closed : " + dataSource.getConfiguration() + " (" + getAllDataSource().size() + " datas sources open)"); + } + } + }); + + return dataSource; + } + + protected List<ObserveSwingDataSource> getAllDataSource() { + List<ObserveSwingDataSource> dataSources = SWING_DATA_SOURCE_LIST_ENTRY_DEF.getContextValue(this); + if (dataSources == null) { + dataSources = Lists.newLinkedList(); + SWING_DATA_SOURCE_LIST_ENTRY_DEF.setContextValue(this, dataSources); + } + return dataSources; + } + + public final DecoratorService getDecoratorService() { DecoratorService decoratorService = DECORATOR_SERVICE_ENTRY_DEF.getContextValue(this); @@ -302,7 +344,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im getConfig().getModelVersion() ); - ObserveSwingDataSource result = new ObserveSwingDataSource(config); + ObserveSwingDataSource result = newDataSource(config); return result; } @@ -392,16 +434,15 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im log.info("Closing swing application context " + this); } - // fermeture du context de données - ObserveSwingDataSource dataSource = getDataSource(); - if (getDataSource() != null && dataSource.isOpen()) { + // fermeture de touts les context de donnée ouvert + for (ObserveSwingDataSource dataSource : Lists.newArrayList(getAllDataSource())) { if (log.isInfoEnabled()) { log.info("Closing dataSource : " + dataSource.getConnection()); } dataSource.close(); - setDataSource(null); } + setDataSource(null); ObserveServiceMainFactory serviceMainFactory = ObserveServiceMainFactory.get(); if (log.isInfoEnabled()) { @@ -797,7 +838,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im } - source.removeObserveSwingDataSourceListeners(); + source.removeObserveSwingDataSourceListener(this); } @@ -908,7 +949,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im dataSourceConfigurationH2.getDirectory() + ')'); } - ObserveSwingDataSource dataSource = new ObserveSwingDataSource(dataSourceConfigurationH2); + ObserveSwingDataSource dataSource = get().newDataSource(dataSourceConfigurationH2); return dataSource; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/ReloadStorageAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/ReloadStorageAction.java index c1ad2ac..a2c870c 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/ReloadStorageAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/ReloadStorageAction.java @@ -71,9 +71,10 @@ public class ReloadStorageAction extends AbstractAction { public void run() { - boolean canContinue = ObserveSwingApplicationContext.get().closeSelectedContentUI(ui); + ObserveSwingApplicationContext context = ObserveSwingApplicationContext.get(); + boolean canContinue = context.closeSelectedContentUI(ui); - ObserveSwingDataSource storage = ObserveSwingApplicationContext.get().getDataSource(); + ObserveSwingDataSource storage = context.getDataSource(); if (canContinue && storage != null) { @@ -89,7 +90,7 @@ public class ReloadStorageAction extends AbstractAction { // fermeture du storage courant storage.close(); - ObserveSwingApplicationConfig appConfig = ObserveSwingApplicationContext.get().getConfig(); + ObserveSwingApplicationConfig appConfig = context.getConfig(); if (storage.isLocal()) { @@ -105,10 +106,10 @@ public class ReloadStorageAction extends AbstractAction { // on conserve les noeuds a selectionner - ObserveSwingApplicationContext.get().setNodesToReselect(ids); + context.setNodesToReselect(ids); // attachement a l'ui - ObserveSwingApplicationContext.get().prepareMainStorage(storage); + context.prepareMainStorage(storage); // ouverture du service storage.open(); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java index 64d5dc2..40394db 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java @@ -24,6 +24,7 @@ package fr.ird.observe.ui.storage; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.db.constantes.DbMode; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; @@ -86,7 +87,7 @@ public enum ObstunaAdminAction { protected void checkImportDbVersion(StorageUIModel model, ObserveDataSourceConfiguration dataSourceConfig) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException { - ObserveSwingDataSource importDataSource = new ObserveSwingDataSource(dataSourceConfig); + ObserveSwingDataSource importDataSource = ObserveSwingApplicationContext.get().newDataSource(dataSourceConfig); Preconditions.checkState(importDataSource != null, "Can't select data on a null dataSource"); @@ -111,11 +112,11 @@ public enum ObstunaAdminAction { // pas autorise a migrer automatiquement pgConfig.setCanMigrate(false); - dataSource = new ObserveSwingDataSource(pgConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(pgConfig); } else { ObserveDataSourceConfigurationRest restConfig = model.getRestConfig(); - dataSource = new ObserveSwingDataSource(restConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(restConfig); } // references import @@ -226,13 +227,13 @@ public enum ObstunaAdminAction { if (DbMode.USE_REMOTE.equals(model.getDbMode())) { ObserveDataSourceConfigurationTopiaPG pgConfig = model.getPgConfig(); - dataSource = new ObserveSwingDataSource(pgConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(pgConfig); } else { ObserveDataSourceConfigurationRest restConfig = model.getRestConfig(); - dataSource = new ObserveSwingDataSource(restConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(restConfig); } targetVersion = model.getConfig().getModelVersion(); @@ -295,11 +296,11 @@ public enum ObstunaAdminAction { // pas autorise a migrer automatiquement pgConfig.setCanMigrate(false); - dataSource = new ObserveSwingDataSource(pgConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(pgConfig); } else { ObserveDataSourceConfigurationRest restConfig = model.getRestConfig(); - dataSource = new ObserveSwingDataSource(restConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(restConfig); } users = model.getSecurityModel().getUsers(); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java index 6170020..3fd86d7 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java @@ -112,7 +112,7 @@ public class StorageUIHandler { case USE_LOCAL: configuration = model.toH2StorageConfig(t("observe.storage.label.local")); - dataSource = new ObserveSwingDataSource(configuration); + dataSource = ObserveSwingApplicationContext.get().newDataSource(configuration); dataSource.addObserveSwingDataSourceListener( new ObserveSwingDataSourceListenerAdapter() { @@ -130,11 +130,11 @@ public class StorageUIHandler { break; case USE_REMOTE: configuration = model.toPGStorageConfig(t("observe.storage.label.remote")); - dataSource = new ObserveSwingDataSource(configuration); + dataSource = ObserveSwingApplicationContext.get().newDataSource(configuration); break; case USE_SERVER: configuration = model.toRestStorageConfig(t("observe.storage.label.server")); - dataSource = new ObserveSwingDataSource(configuration); + dataSource = ObserveSwingApplicationContext.get().newDataSource(configuration); break; } @@ -383,7 +383,7 @@ public class StorageUIHandler { localConfiguration.setCanMigrate(false); // on charge un storage sur la base locale - localDataSource = new ObserveSwingDataSource(localConfiguration); + localDataSource = ObserveSwingApplicationContext.get().newDataSource(localConfiguration); localDataSource.open(); } catch (Exception e) { @@ -1022,11 +1022,11 @@ public class StorageUIHandler { case USE_REMOTE: ObserveDataSourceConfigurationTopiaPG pgConfig = model.getPgConfig(); - dataSource = new ObserveSwingDataSource(pgConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(pgConfig); break; case USE_SERVER: ObserveDataSourceConfigurationRest restConfig = model.getRestConfig(); - dataSource = new ObserveSwingDataSource(restConfig); + dataSource = ObserveSwingApplicationContext.get().newDataSource(restConfig); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java index 0add006..9fe68b5 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java @@ -1551,7 +1551,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { } if (configSrc != null) { - try (ObserveSwingDataSource source = new ObserveSwingDataSource(configSrc)) { + try (ObserveSwingDataSource source = ObserveSwingApplicationContext.get().newDataSource(configSrc)) { source.open(); @@ -1690,7 +1690,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { if (config != null) { - ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config); + ObserveSwingDataSource dataSource = ObserveSwingApplicationContext.get().newDataSource(config); try { @@ -1905,7 +1905,8 @@ public class StorageUIModel extends WizardModel<StorageStep> { dataSourceConfig.setCanMigrate(false); - importDataSource = new ObserveSwingDataSource(dataSourceConfig); + importDataSource = ObserveSwingApplicationContext.get().newDataSource(dataSourceConfig); + } break; @@ -1914,7 +1915,8 @@ public class StorageUIModel extends WizardModel<StorageStep> { // import referentiel from a server db ObserveDataSourceConfigurationRest dataSourceConfig = getCentralSourceModel().toRestStorageConfig(dbLabel); - importDataSource = new ObserveSwingDataSource(dataSourceConfig); + importDataSource = ObserveSwingApplicationContext.get().newDataSource(dataSourceConfig); + } break; default: -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.