branch develop updated (8524f50 -> fe94fbc)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git from 8524f50 Merge branch 'feature/8490_i18n_manquantes' into 'develop' new f274559 At last remove any logic from application context new 609b7af Ajout méthode pour faire une backup de base H2 new fe94fbc Construire une base intermédiaire avec toutes les données si besoin, puis utiliser un instruction sql H2 pour sauver la base The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit fe94fbc370e7860275183cd0a760bdf9d7955e20 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:59:51 2016 +0200 Construire une base intermédiaire avec toutes les données si besoin, puis utiliser un instruction sql H2 pour sauver la base commit 609b7af455360d8a560f3a194c66e7b97a54b49e Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:58:43 2016 +0200 Ajout méthode pour faire une backup de base H2 commit f2745591e4020974c3aabfedd961591656325534 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:57:52 2016 +0200 At last remove any logic from application context Summary of changes: .../observe/application/swing/ObserveRunner.java | 2 +- .../swing/ObserveSwingApplicationContext.java | 280 -------------------- .../ObserveSwingApplicationDataSourcesManager.java | 285 ++++++++++++++++++++- .../swing/ui/admin/AdminUILauncher.java | 2 +- .../swing/ui/storage/StorageBackupUILauncher.java | 83 ++++-- .../swing/ui/storage/StorageUIHandler.java | 4 +- .../swing/ui/storage/StorageUIModel.java | 22 +- .../controller/v1/DataSourceServiceController.java | 6 + .../services/service/DataSourceService.java | 2 + .../topia/service/DataSourceServiceTopia.java | 40 ++- 10 files changed, 394 insertions(+), 332 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit f2745591e4020974c3aabfedd961591656325534 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:57:52 2016 +0200 At last remove any logic from application context --- .../observe/application/swing/ObserveRunner.java | 2 +- .../swing/ObserveSwingApplicationContext.java | 280 -------------------- .../ObserveSwingApplicationDataSourcesManager.java | 285 ++++++++++++++++++++- .../swing/ui/admin/AdminUILauncher.java | 2 +- .../swing/ui/storage/StorageUIHandler.java | 4 +- .../swing/ui/storage/StorageUIModel.java | 22 +- 6 files changed, 296 insertions(+), 299 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java index 7ad5a4a..95d8b48 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java @@ -330,7 +330,7 @@ public abstract class ObserveRunner extends ApplicationRunner { // 3 - init storage - runAction(t("observe.runner.load.database"), context, "initStorage", config, ui, true); + runAction(t("observe.runner.load.database"), context.getDataSourcesManager(), "initStorage", config, ui, true); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java index e5127e9..f36e7ba 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java @@ -25,15 +25,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; -import fr.ird.observe.application.swing.configuration.constants.DbMode; import fr.ird.observe.application.swing.db.DataContext; -import fr.ird.observe.application.swing.db.ObserveSwingDataSource; -import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceEvent; -import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceListenerAdapter; import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.ObserveUIMode; -import fr.ird.observe.application.swing.ui.actions.ChangeStorageAction; import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; import fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction; import fr.ird.observe.application.swing.ui.actions.shared.CloseAndCreateUIAction; @@ -53,19 +47,13 @@ import fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction; import fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction; import fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction; import fr.ird.observe.application.swing.ui.content.ContentUIManager; -import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; import fr.ird.observe.application.swing.validation.ValidationContext; import fr.ird.observe.services.ObserveServicesProvider; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; -import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.reference.ReferenceBinderEngine; import fr.ird.observe.services.dto.reference.ReferenceBinderEngineSupplier; import fr.ird.observe.services.runner.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.runner.ObserveServiceMainFactory; -import fr.ird.observe.services.service.BabModelVersionException; -import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; -import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.services.service.actions.validate.ValidateServiceUtils; import fr.ird.observe.services.service.actions.validate.ValidatorDto; import jaxx.runtime.context.DefaultApplicationContext; @@ -75,16 +63,11 @@ import org.apache.commons.logging.LogFactory; import org.h2.tools.Server; import javax.swing.ActionMap; -import javax.swing.JOptionPane; import java.io.Closeable; -import java.io.File; import java.util.Arrays; import java.util.Collection; -import java.util.EnumSet; import java.util.List; import java.util.Objects; -import java.util.Set; -import java.util.UUID; import static fr.ird.observe.application.swing.ObserveSwingApplicationContext.Entries.ACTIONS; import static fr.ird.observe.application.swing.ObserveSwingApplicationContext.Entries.ACTION_MAP; @@ -103,13 +86,8 @@ import static fr.ird.observe.application.swing.ObserveSwingApplicationContext.En import static fr.ird.observe.application.swing.ObserveSwingApplicationContext.Entries.TEXT_GENERATOR; import static fr.ird.observe.application.swing.ObserveSwingApplicationContext.Entries.VALIDATION_CONTEXT; import static fr.ird.observe.application.swing.ObserveSwingApplicationContext.Entries.VALIDATORS; -import static fr.ird.observe.application.swing.ui.UIHelper.askUser; -import static fr.ird.observe.application.swing.ui.UIHelper.displayInfo; -import static fr.ird.observe.application.swing.ui.UIHelper.handlingError; import static fr.ird.observe.application.swing.ui.UIHelper.newContextEntryDef; import static fr.ird.observe.application.swing.ui.UIHelper.newListContextEntryDef; -import static org.nuiton.i18n.I18n.n; -import static org.nuiton.i18n.I18n.t; /** * Le contexte de l'application. @@ -400,264 +378,6 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im } } - //------------------------------------------- - // - Storages - //------------------------------------------- - - public ObserveSwingDataSource createTemporaryH2Storage(String label) { - ObserveDataSourceConfigurationMainFactory configurationMainFactory = getObserveDataSourceConfigurationMainFactory(); - - File tmpDirectory = getConfig().getTmpDirectory(); - - File dbDirectory = new File(tmpDirectory, ObserveSwingApplicationConfig.DB_NAME + UUID.randomUUID().toString()); - - ObserveDataSourceConfigurationTopiaH2 config = configurationMainFactory.createObserveDataSourceConfigurationTopiaH2( - label, - dbDirectory, - ObserveSwingApplicationConfig.DB_NAME, - getConfig().getH2Login(), - getConfig().getH2Password(), - false, - false, - getConfig().getModelVersion() - ); - - return getDataSourcesManager().newDataSource(config); - } - - public void initStorage(ObserveSwingApplicationConfig config, ObserveMainUI mainUI, boolean askToCreate) { - - if (config.isLocalStorageExist()) { - - // une base locale existe, on l'ouvre - - boolean success = false; - // chargement de la base locale - - // création de la source de données sur la base locale - ObserveSwingDataSource dataSource = getDataSourcesManager().newLocalDatasource(getConfig()); - - try { - - ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); - - dataSource.migrateData(dataSourceInformation, getConfig().getModelVersion()); - - // la source sera utilisée dans les ui - prepareMainStorage(dataSource, true); -// getDataSourcesManager().setMainDataSource(dataSource); - - if (log.isInfoEnabled()) { - log.info(t("observe.init.local.db.detected", dataSource.getLabel())); - } - - // la base locale existe, on l'ouvre - dataSource.open(); - success = true; - } catch (DatabaseConnexionNotAuthorizedException | DatabaseNotFoundException | BabModelVersionException e) { - JOptionPane.showMessageDialog( - null, - e.getMessage(), - t("observe.title.error.dialog"), - JOptionPane.ERROR_MESSAGE - ); - } - - if (success) { - // on peut retourner sur cette base - mainUI.setMode(ObserveUIMode.DB); - } - - } else { - - // on peut retourner sur cette base - mainUI.setMode(ObserveUIMode.NO_DB); - - if (askToCreate) { - - // demande à l'utilisateur s'il veut créer la base locale - - int reponse = askUser( - t("observe.title.no.local.db.found"), - t("observe.message.no.local.db.found", - config.getLocalDBDirectory()), - JOptionPane.QUESTION_MESSAGE, - new Object[]{ - t("observe.choice.useRemoteStorage"), - t("observe.choice.createLocalStorage"), - t("observe.choice.doNothing") - }, - 1 - ); - if (log.isDebugEnabled()) { - log.debug("response : " + reponse); - } - - Set<DbMode> dbModes = EnumSet.noneOf(DbMode.class); - String title = null; - if (reponse != JOptionPane.CLOSED_OPTION && reponse < 2) { - - if (reponse == 1) { - // creation de la base locale - dbModes.add(DbMode.CREATE_LOCAL); - title = n("observe.title.create.local.db"); - } else { - // connexion à une base distante - dbModes.add(DbMode.USE_REMOTE); - dbModes.add(DbMode.USE_SERVER); - title = n("observe.title.load.remote.db"); - } - } - if (!dbModes.isEmpty()) { - new ChangeStorageAction(getMainUI(), dbModes, title).run(); - } - - } - } - if (log.isInfoEnabled()) { - log.info(t("observe.init.storage.done")); - } - } - - - /** - * Prepare le storage principal qui servira dans les ui. - * - * @param dataSource la source de données a preparer - */ - public void prepareMainStorage(ObserveSwingDataSource dataSource, boolean setAsMainDataSource) { - - if (setAsMainDataSource) { - - getDataSourcesManager().setMainDataSource(dataSource); - - } - - dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() { - - @Override - public void onOpening(ObserveSwingDataSourceEvent event) { - ObserveSwingDataSource s = event.getSource(); - displayInfo(t("observe.message.db.loading", s.getLabel())); - } - - @Override - public void onOpened(ObserveSwingDataSourceEvent event) { - - // le service est disponible, on enregistre les listeners - ObserveSwingDataSource source = event.getSource(); - - try { - openOnUI(source); - } catch (Exception e) { - - // la base n'a pas pu être chargée proprement - // ceci peut être due a une base dans une version pas - // assez recente, on doit donc refermer cette base - handlingError("Could not obtain open datas from " + source.getLabel(), e); - - // fermeture de la source - source.close(); - } - - } - - @Override - public void onClosing(ObserveSwingDataSourceEvent event) { - - super.onClosing(event); - - ObserveMainUI mainUI = getMainUI(); - DataContext dataContext = getDataContext(); - dataContext.setEnabled(false); - - // suppresion des opens dans le context de données - getConfig().setTreeOpenNodeIds(dataContext.getOpenIds()); - dataContext.populateOpens(); - - mainUI.getTreeHelper().cleanNavigationUI(mainUI); - - // on met a jour l'état dans la config - getConfig().setMainStorageOpened(false); - - } - - - @Override - public void onClosed(ObserveSwingDataSourceEvent event) { - // le service est indisponible, il faut supprimer toutes les - // references vers le service - ObserveSwingDataSource source = event.getSource(); - - // on ferme la marée, la route ou l'activité ouvertes - getOpenDataManager().close(); - - ObserveMainUI mainUI = getMainUI(); - - // nettoyage de l'ui ( suppression navigation et autres ) - if (mainUI != null) { - - if (log.isDebugEnabled()) { - log.debug("dispose ui from storage " + source.getLabel() + ": " + mainUI.getName()); - } - - mainUI.setMode(ObserveUIMode.NO_DB); - - displayInfo(t("observe.message.db.closed", source.getLabel())); - - } - - source.removeObserveSwingDataSourceListener(this); - - } - - protected void openOnUI(ObserveSwingDataSource source) { - // on rend le service disponible dans le service de validation - //getValidationContext().setMainDataSource(source); - - // toutes les données sont chargées, on peut declarer le service - // comme ouvert dans la configuration - ObserveSwingApplicationConfig config = getConfig(); - config.setMainStorageOpened(true); - config.setMainStorageOpenedLocal(source.isLocal()); - - if (source.isLocal()) { - config.setLocalStorageExist(true); - } - - // remplissage de l'ui - ObserveMainUI mainUI = getMainUI(); - - if (mainUI != null) { - if (log.isDebugEnabled()) { - log.debug("loading ui for storage " + source.getLabel() + ": " + mainUI.getName()); - } - - DataContext dataContext = mainUI.getDataContext(); - dataContext.setEnabled(true); - - ObserveTreeHelper treeHelper = mainUI.getTreeHelper(); - - treeHelper.cleanNavigationUI(mainUI); - - String[] openIds = config.getTreeOpenNodeIds(); - - if (source.canReadData()) { - getOpenDataManager().sanitizeOpenIds(openIds); - } - - dataContext.populateOpens(openIds); - treeHelper.loadNavigationUI(source); - - mainUI.setMode(ObserveUIMode.DB); - - mainUI.getStatus().setStatus(t("observe.message.db.loaded", source.getLabel())); - - } - } - }); - } - @Override public void close() { if (log.isInfoEnabled()) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java index af958ac..38bedf5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java @@ -25,22 +25,40 @@ package fr.ird.observe.application.swing; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; +import fr.ird.observe.application.swing.configuration.constants.DbMode; +import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceEvent; import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceListenerAdapter; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.ObserveUIMode; +import fr.ird.observe.application.swing.ui.actions.ChangeStorageAction; +import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.runner.ObserveDataSourceConfigurationMainFactory; +import fr.ird.observe.services.service.BabModelVersionException; +import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; +import fr.ird.observe.services.service.DatabaseNotFoundException; +import javax.swing.JOptionPane; import java.io.Closeable; import java.io.File; +import java.util.EnumSet; import java.util.LinkedList; import java.util.List; +import java.util.Set; +import java.util.UUID; import static fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig.DB_NAME; +import static fr.ird.observe.application.swing.ui.UIHelper.askUser; +import static fr.ird.observe.application.swing.ui.UIHelper.displayInfo; +import static fr.ird.observe.application.swing.ui.UIHelper.handlingError; import static jaxx.runtime.swing.editor.bean.BeanUIUtil.PopupHandler.log; +import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; /** @@ -68,14 +86,14 @@ public class ObserveSwingApplicationDataSourcesManager implements Closeable { */ public ObserveSwingDataSource newLocalDatasource(ObserveSwingApplicationConfig config) { - ObserveDataSourceConfigurationTopiaH2 dataSourceConfigurationH2 = getDataSourceConfigurationH2(config, t("observe.storage.label.local")); + ObserveDataSourceConfigurationTopiaH2 dataSourceConfigurationH2 = newH2DataSourceConfiguration(config, t("observe.storage.label.local")); Preconditions.checkState(dataSourceConfigurationH2.getDatabaseFile().exists(), "local base must exist, when using this method (" + dataSourceConfigurationH2.getDirectory() + ')'); return newDataSource(dataSourceConfigurationH2); } - public ObserveDataSourceConfigurationTopiaH2 getDataSourceConfigurationH2(ObserveSwingApplicationConfig config, String label) { + public ObserveDataSourceConfigurationTopiaH2 newH2DataSourceConfiguration(ObserveSwingApplicationConfig config, String label) { ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveDataSourceConfigurationMainFactory configurationMainFactory = applicationContext.getObserveDataSourceConfigurationMainFactory(); @@ -93,7 +111,30 @@ public class ObserveSwingApplicationDataSourcesManager implements Closeable { ); } - public ObserveDataSourceConfigurationTopiaPG getDataSourceConfigurationPG(ObserveSwingApplicationConfig config, String label) { + public ObserveSwingDataSource newTemporaryH2Datasource(String label) { + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + ObserveSwingApplicationConfig config = applicationContext.getConfig(); + ObserveDataSourceConfigurationMainFactory configurationMainFactory = applicationContext.getObserveDataSourceConfigurationMainFactory(); + + File tmpDirectory = config.getTmpDirectory(); + + File dbDirectory = new File(tmpDirectory, ObserveSwingApplicationConfig.DB_NAME + UUID.randomUUID().toString()); + + return new ObserveSwingDataSource(configurationMainFactory.createObserveDataSourceConfigurationTopiaH2( + label, + dbDirectory, + ObserveSwingApplicationConfig.DB_NAME, + config.getH2Login(), + config.getH2Password(), + false, + false, + config.getModelVersion() + )); + + } + + public ObserveDataSourceConfigurationTopiaPG newPGDataSourceConfiguration(ObserveSwingApplicationConfig config, String label) { ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveDataSourceConfigurationMainFactory configurationMainFactory = applicationContext.getObserveDataSourceConfigurationMainFactory(); @@ -109,7 +150,7 @@ public class ObserveSwingApplicationDataSourcesManager implements Closeable { ); } - public ObserveDataSourceConfigurationRest getDataSourceConfigurationRest(ObserveSwingApplicationConfig config, String label) { + public ObserveDataSourceConfigurationRest newRestDataSourceConfiguration(ObserveSwingApplicationConfig config, String label) { ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveDataSourceConfigurationMainFactory configurationMainFactory = applicationContext.getObserveDataSourceConfigurationMainFactory(); @@ -180,4 +221,240 @@ public class ObserveSwingApplicationDataSourcesManager implements Closeable { setMainDataSource(null); } + + // Ne pas supprimer, utilisé par ObserveRunner + public void initStorage(ObserveSwingApplicationConfig config, ObserveMainUI mainUI, boolean askToCreate) { + + if (config.isLocalStorageExist()) { + + // une base locale existe, on l'ouvre + + boolean success = false; + // chargement de la base locale + + // création de la source de données sur la base locale + ObserveSwingDataSource dataSource = newLocalDatasource(config); + + try { + + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); + + dataSource.migrateData(dataSourceInformation, config.getModelVersion()); + + // la source sera utilisée dans les ui + prepareMainStorage(dataSource, true); + + if (log.isInfoEnabled()) { + log.info(t("observe.init.local.db.detected", dataSource.getLabel())); + } + + // la base locale existe, on l'ouvre + dataSource.open(); + success = true; + } catch (DatabaseConnexionNotAuthorizedException | DatabaseNotFoundException | BabModelVersionException e) { + JOptionPane.showMessageDialog( + null, + e.getMessage(), + t("observe.title.error.dialog"), + JOptionPane.ERROR_MESSAGE + ); + } + + if (success) { + // on peut retourner sur cette base + mainUI.setMode(ObserveUIMode.DB); + } + + } else { + + // on peut retourner sur cette base + mainUI.setMode(ObserveUIMode.NO_DB); + + if (askToCreate) { + + // demande à l'utilisateur s'il veut créer la base locale + + int reponse = askUser( + t("observe.title.no.local.db.found"), + t("observe.message.no.local.db.found", + config.getLocalDBDirectory()), + JOptionPane.QUESTION_MESSAGE, + new Object[]{ + t("observe.choice.useRemoteStorage"), + t("observe.choice.createLocalStorage"), + t("observe.choice.doNothing") + }, + 1 + ); + if (log.isDebugEnabled()) { + log.debug("response : " + reponse); + } + + Set<DbMode> dbModes = EnumSet.noneOf(DbMode.class); + String title = null; + if (reponse != JOptionPane.CLOSED_OPTION && reponse < 2) { + + if (reponse == 1) { + // creation de la base locale + dbModes.add(DbMode.CREATE_LOCAL); + title = n("observe.title.create.local.db"); + } else { + // connexion à une base distante + dbModes.add(DbMode.USE_REMOTE); + dbModes.add(DbMode.USE_SERVER); + title = n("observe.title.load.remote.db"); + } + } + if (!dbModes.isEmpty()) { + new ChangeStorageAction(mainUI, dbModes, title).run(); + } + + } + } + if (log.isInfoEnabled()) { + log.info(t("observe.init.storage.done")); + } + } + + + /** + * Prepare le storage principal qui servira dans les ui. + * + * @param dataSource la source de données a preparer + */ + public void prepareMainStorage(ObserveSwingDataSource dataSource, boolean setAsMainDataSource) { + + if (setAsMainDataSource) { + + setMainDataSource(dataSource); + + } + + dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() { + + final ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + + @Override + public void onOpening(ObserveSwingDataSourceEvent event) { + ObserveSwingDataSource s = event.getSource(); + displayInfo(t("observe.message.db.loading", s.getLabel())); + } + + @Override + public void onOpened(ObserveSwingDataSourceEvent event) { + + // le service est disponible, on enregistre les listeners + ObserveSwingDataSource source = event.getSource(); + + try { + openOnUI(source); + } catch (Exception e) { + + // la base n'a pas pu être chargée proprement + // ceci peut être due a une base dans une version pas + // assez recente, on doit donc refermer cette base + handlingError("Could not obtain open datas from " + source.getLabel(), e); + + // fermeture de la source + source.close(); + } + + } + + @Override + public void onClosing(ObserveSwingDataSourceEvent event) { + + super.onClosing(event); + + ObserveMainUI mainUI = applicationContext.getMainUI(); + DataContext dataContext = applicationContext.getDataContext(); + dataContext.setEnabled(false); + + // suppresion des opens dans le context de données + applicationContext.getConfig().setTreeOpenNodeIds(dataContext.getOpenIds()); + dataContext.populateOpens(); + + mainUI.getTreeHelper().cleanNavigationUI(mainUI); + + // on met a jour l'état dans la config + applicationContext.getConfig().setMainStorageOpened(false); + + } + + + @Override + public void onClosed(ObserveSwingDataSourceEvent event) { + // le service est indisponible, il faut supprimer toutes les + // references vers le service + ObserveSwingDataSource source = event.getSource(); + + // on ferme la marée, la route ou l'activité ouvertes + applicationContext.getOpenDataManager().close(); + + ObserveMainUI mainUI = applicationContext.getMainUI(); + + // nettoyage de l'ui ( suppression navigation et autres ) + if (mainUI != null) { + + if (log.isDebugEnabled()) { + log.debug("dispose ui from storage " + source.getLabel() + ": " + mainUI.getName()); + } + + mainUI.setMode(ObserveUIMode.NO_DB); + + displayInfo(t("observe.message.db.closed", source.getLabel())); + + } + + source.removeObserveSwingDataSourceListener(this); + + } + + protected void openOnUI(ObserveSwingDataSource source) { + // on rend le service disponible dans le service de validation + //getValidationContext().setMainDataSource(source); + + // toutes les données sont chargées, on peut declarer le service + // comme ouvert dans la configuration + ObserveSwingApplicationConfig config = applicationContext.getConfig(); + config.setMainStorageOpened(true); + config.setMainStorageOpenedLocal(source.isLocal()); + + if (source.isLocal()) { + config.setLocalStorageExist(true); + } + + // remplissage de l'ui + ObserveMainUI mainUI = applicationContext.getMainUI(); + + if (mainUI != null) { + if (log.isDebugEnabled()) { + log.debug("loading ui for storage " + source.getLabel() + ": " + mainUI.getName()); + } + + DataContext dataContext = mainUI.getDataContext(); + dataContext.setEnabled(true); + + ObserveTreeHelper treeHelper = mainUI.getTreeHelper(); + + treeHelper.cleanNavigationUI(mainUI); + + String[] openIds = config.getTreeOpenNodeIds(); + + if (source.canReadData()) { + applicationContext.getOpenDataManager().sanitizeOpenIds(openIds); + } + + dataContext.populateOpens(openIds); + treeHelper.loadNavigationUI(source); + + mainUI.setMode(ObserveUIMode.DB); + + mainUI.getStatus().setStatus(t("observe.message.db.loaded", source.getLabel())); + + } + } + }); + } + } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java index acd3648..653fb56 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java @@ -258,7 +258,7 @@ public class AdminUILauncher extends WizardUILancher<AdminStep, AdminUIModel, Ad model.doCloseSource(source, false); // on attache la source a l'ui - ObserveSwingApplicationContext.get().prepareMainStorage(source, false); + ObserveSwingApplicationContext.get().getDataSourcesManager().prepareMainStorage(source, false); source.open(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java index 1069317..50bc695 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java @@ -362,7 +362,7 @@ public class StorageUIHandler { boolean localDbIsSane = true; if (destroyLocalBase || model.isDoBackup()) { if (localDataSource == null) { - ObserveDataSourceConfigurationTopiaH2 localConfiguration = dataSourcesManager.getDataSourceConfigurationH2(config, t("observe.storage.label.local")); + ObserveDataSourceConfigurationTopiaH2 localConfiguration = dataSourcesManager.newH2DataSourceConfiguration(config, t("observe.storage.label.local")); // la base ne doit pas etre mise a jour dans ce cas localConfiguration.setCanMigrate(false); @@ -488,7 +488,7 @@ public class StorageUIHandler { } dataSourcesManager.setMainDataSource(currentDataSource); - observeContext.prepareMainStorage(currentDataSource, true); + observeContext.getDataSourcesManager().prepareMainStorage(currentDataSource, true); if (model.getDbMode() == DbMode.CREATE_LOCAL) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIModel.java index ea40922..a290cc1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIModel.java @@ -384,9 +384,9 @@ public class StorageUIModel extends WizardModel<StorageStep> { ObserveSwingApplicationDataSourcesManager dataSourcesManager = ObserveSwingApplicationContext.get().getDataSourcesManager(); - h2Config = dataSourcesManager.getDataSourceConfigurationH2(config, t("observe.storage.label.local")); - pgConfig = dataSourcesManager.getDataSourceConfigurationPG(config, t("observe.storage.label.remote")); - restConfig = dataSourcesManager.getDataSourceConfigurationRest(config, t("observe.storage.label.server")); + h2Config = dataSourcesManager.newH2DataSourceConfiguration(config, t("observe.storage.label.local")); + pgConfig = dataSourcesManager.newPGDataSourceConfiguration(config, t("observe.storage.label.remote")); + restConfig = dataSourcesManager.newRestDataSourceConfiguration(config, t("observe.storage.label.server")); if (source != null) { @@ -495,9 +495,9 @@ public class StorageUIModel extends WizardModel<StorageStep> { ObserveSwingApplicationDataSourcesManager dataSourcesManager = ObserveSwingApplicationContext.get().getDataSourcesManager(); // on initialise les configuration avec les valeurs par défaut - h2Config = dataSourcesManager.getDataSourceConfigurationH2(config, t("observe.storage.label.local")); - pgConfig = dataSourcesManager.getDataSourceConfigurationPG(config, t("observe.storage.label.remote")); - restConfig = dataSourcesManager.getDataSourceConfigurationRest(config, t("observe.storage.label.server")); + h2Config = dataSourcesManager.newH2DataSourceConfiguration(config, t("observe.storage.label.local")); + pgConfig = dataSourcesManager.newPGDataSourceConfiguration(config, t("observe.storage.label.remote")); + restConfig = dataSourcesManager.newRestDataSourceConfiguration(config, t("observe.storage.label.server")); if (previousConfig instanceof ObserveDataSourceConfigurationTopiaH2) { @@ -573,9 +573,9 @@ public class StorageUIModel extends WizardModel<StorageStep> { ObserveSwingApplicationDataSourcesManager dataSourcesManager = ObserveSwingApplicationContext.get().getDataSourcesManager(); - h2Config = dataSourcesManager.getDataSourceConfigurationH2(config, t("observe.storage.label.local")); - pgConfig = dataSourcesManager.getDataSourceConfigurationPG(config, t("observe.storage.label.remote")); - restConfig = dataSourcesManager.getDataSourceConfigurationRest(config, t("observe.storage.label.server")); + h2Config = dataSourcesManager.newH2DataSourceConfiguration(config, t("observe.storage.label.local")); + pgConfig = dataSourcesManager.newPGDataSourceConfiguration(config, t("observe.storage.label.remote")); + restConfig = dataSourcesManager.newRestDataSourceConfiguration(config, t("observe.storage.label.server")); DbMode newDbMode = config.getDefaultDbMode(); if (getAdminAction() != null) { @@ -1882,7 +1882,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { } - try (ObserveSwingDataSource importDataSource = context.createTemporaryH2Storage(dbLabel)) { + try (ObserveSwingDataSource importDataSource = context.getDataSourcesManager().newTemporaryH2Datasource(dbLabel)) { try { importDataSource.create(createConfigurationDto); @@ -1982,7 +1982,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { } - try (ObserveSwingDataSource importDataSource2 = context.createTemporaryH2Storage(dbLabel)) { + try (ObserveSwingDataSource importDataSource2 = context.getDataSourcesManager().newTemporaryH2Datasource(dbLabel)) { importDataSource = importDataSource2; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 609b7af455360d8a560f3a194c66e7b97a54b49e Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:58:43 2016 +0200 Ajout méthode pour faire une backup de base H2 --- .../controller/v1/DataSourceServiceController.java | 6 ++++ .../services/service/DataSourceService.java | 2 ++ .../topia/service/DataSourceServiceTopia.java | 40 ++++++++++++++-------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index 9db5b26..8154088 100644 --- a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -44,6 +44,7 @@ import fr.ird.observe.services.service.DatabaseNotFoundException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.File; import java.util.Optional; import java.util.Set; @@ -115,6 +116,11 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport } @Override + public void backup(File backupFile) { + + } + + @Override public Set<ObserveDbUserDto> getUsers(ObserveDataSourceConfiguration dataSourceConfiguration) { ObserveDataSourceConfiguration dataSourceConfigurationTopia = getTopiaDataSourceConfiguration(dataSourceConfiguration); return getAnonymousService(dataSourceConfigurationTopia).getUsers(dataSourceConfigurationTopia); diff --git a/services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index a2ba65d..0a3a94d 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -34,6 +34,7 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.spi.NoDataAccess; import java.io.Closeable; +import java.io.File; import java.util.Set; /** @@ -70,4 +71,5 @@ public interface DataSourceService extends ObserveService, Closeable { void destroy() throws DatabaseDestroyNotAuthorizedException; + void backup(File backupFile); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java index 8335c55..1f2dfd0 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java @@ -25,7 +25,6 @@ package fr.ird.observe.services.topia.service; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.ObserveTopiaApplicationContext; @@ -33,18 +32,6 @@ import fr.ird.observe.ObserveTopiaConfiguration; import fr.ird.observe.ObserveTopiaConfigurationFactory; import fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; -import fr.ird.observe.services.service.AddSqlScriptProducerRequest; -import fr.ird.observe.services.service.BabModelVersionException; -import fr.ird.observe.services.service.DataSourceService; -import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; -import fr.ird.observe.services.service.DatabaseDestroyNotAuthorizedException; -import fr.ird.observe.services.service.DatabaseNotFoundException; -import fr.ird.observe.services.service.SqlScriptProducerService; -import fr.ird.observe.services.topia.ObserveJdbcHelper; -import fr.ird.observe.services.topia.ObserveSecurityHelper; -import fr.ird.observe.services.topia.ObserveServiceTopia; -import fr.ird.observe.services.topia.ObserveTopiaApplicationContextFactory; -import fr.ird.observe.services.topia.binder.BinderEngine; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; @@ -58,6 +45,18 @@ import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationExce import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.dto.ObserveDbUserDtos; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.AddSqlScriptProducerRequest; +import fr.ird.observe.services.service.BabModelVersionException; +import fr.ird.observe.services.service.DataSourceService; +import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; +import fr.ird.observe.services.service.DatabaseDestroyNotAuthorizedException; +import fr.ird.observe.services.service.DatabaseNotFoundException; +import fr.ird.observe.services.service.SqlScriptProducerService; +import fr.ird.observe.services.topia.ObserveJdbcHelper; +import fr.ird.observe.services.topia.ObserveSecurityHelper; +import fr.ird.observe.services.topia.ObserveServiceTopia; +import fr.ird.observe.services.topia.ObserveTopiaApplicationContextFactory; +import fr.ird.observe.services.topia.binder.BinderEngine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.jdbc.JdbcHelper; @@ -72,6 +71,7 @@ import java.nio.file.Files; import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.l; @@ -467,6 +467,18 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } @Override + public void backup(File backupFile) { + + if (!serviceContext.getTopiaApplicationContext().getConfiguration().isH2Configuration()) { + + throw new IllegalStateException("Cant backup a none H2 database."); + } + + getTopiaPersistenceContext().getSqlSupport().executeSql("SCRIPT NOPASSWORDS NOSETTINGS BLOCKSIZE 2048 TO '" + backupFile.getAbsolutePath() + "' COMPRESSION GZIP CHARSET 'UTF-8';"); + + } + + @Override public Set<ObserveDbUserDto> getUsers(ObserveDataSourceConfiguration dataSourceConfiguration) { if (log.isTraceEnabled()) { log.trace("getUsers(" + dataSourceConfiguration + ")"); @@ -497,7 +509,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS @Override public void applySecurity(ObserveDataSourceConfiguration dataSourceConfiguration, Set<ObserveDbUserDto> users) { if (log.isTraceEnabled()) { - log.trace("applySecurity(" + dataSourceConfiguration + ", [" + Joiner.on(", ").join(Iterables.transform(users, ObserveDbUserDtos.NAME_FUNCTION::apply)) + "])"); + log.trace("applySecurity(" + dataSourceConfiguration + ", [" + Joiner.on(", ").join(users.stream().map(ObserveDbUserDtos.NAME_FUNCTION).collect(Collectors.toList())) + "])"); } // pas de securité pour les bases autres que postgresql -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit fe94fbc370e7860275183cd0a760bdf9d7955e20 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 2 23:59:51 2016 +0200 Construire une base intermédiaire avec toutes les données si besoin, puis utiliser un instruction sql H2 pour sauver la base --- .../swing/ui/storage/StorageBackupUILauncher.java | 83 +++++++++++++++++----- 1 file changed, 64 insertions(+), 19 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java index d0d7057..fdd5dc3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageBackupUILauncher.java @@ -22,17 +22,25 @@ package fr.ird.observe.application.swing.ui.storage; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.configuration.constants.DbMode; -import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.storage.tabs.DataSelectionModel; +import fr.ird.observe.services.dto.DataReference; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.trip.ExportTripRequest; +import fr.ird.observe.services.service.trip.ExportTripResult; +import fr.ird.observe.services.service.trip.ImportTripRequest; +import fr.ird.observe.services.service.trip.TripManagementService; import jaxx.runtime.JAXXContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.awt.Window; import java.io.File; -import java.util.Set; +import java.util.List; +import java.util.Map; +import java.util.Objects; /** * Un wizard pour effectuer des backup de storages. @@ -76,10 +84,7 @@ public class StorageBackupUILauncher extends StorageUILauncher { model.setDbMode(DbMode.USE_SERVER); } - model.setSteps(StorageStep.BACKUP, - StorageStep.SELECT_DATA, - StorageStep.CONFIRM - ); + model.setSteps(StorageStep.BACKUP, StorageStep.SELECT_DATA, StorageStep.CONFIRM); ui.setTitle(title); try { @@ -98,22 +103,62 @@ public class StorageBackupUILauncher extends StorageUILauncher { @Override protected void doAction(StorageUI ui) { super.doAction(ui); - StorageUIHandler handler = getStorageUIHandler(); - - ObserveSwingDataSource source = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); StorageUIModel storageModel = ui.getModel(); File backupFile = storageModel.getBackupFile(); - DataSelectionModel dataModel = storageModel.getSelectDataModel(); - Set<DataReference> trips = null; - if (dataModel != null && !dataModel.isDataFull()) { - // on renseigne les marees a exporter uniquement si - // on en a selectionner, de plus si on a selectionne - // toutes les marees, on le les passe pas : car c un dump - // complet de la base. - trips = dataModel.getSelectedData(); + Objects.requireNonNull(backupFile, "file where to backup can not be null"); + + ObserveSwingDataSource localSource = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); + ObserveSwingDataSource sourceToBackup = localSource; + + try { + DataSelectionModel dataModel = storageModel.getSelectDataModel(); + Map<ReferentialReference<ProgramDto>, List<DataReference>> tripsByProgram; + if (dataModel != null && !dataModel.isDataFull()) { +// // on renseigne les marees a exporter uniquement si +// // on en a selectionner, de plus si on a selectionne +// // toutes les marees, on le les passe pas : car c un dump +// // complet de la base. + + tripsByProgram = dataModel.getSelectedDataByProgram(); + + // on doit creer une nouvelle base avec tout ce qui va bien + + TripManagementService managementService = localSource.newTripManagementService(); + + sourceToBackup = ObserveSwingApplicationContext.get().getDataSourcesManager().newTemporaryH2Datasource("Backup-" + backupFile.getName()); + + TripManagementService tmpManagementService = sourceToBackup.newTripManagementService(); + + for (Map.Entry<ReferentialReference<ProgramDto>, List<DataReference>> entry : tripsByProgram.entrySet()) { + + for (DataReference trip : entry.getValue()) { + + ExportTripRequest exportRequest = new ExportTripRequest(false, entry.getKey().getId(), trip.getId()); + ExportTripResult exportTripResult = managementService.exportTrip(exportRequest); + + ImportTripRequest importTripRequest = new ImportTripRequest(exportTripResult); + tmpManagementService.importTrip(importTripRequest); + + } + + } + + } + + if (log.isInfoEnabled()) { + log.info("Exporting to " + backupFile); + } + + sourceToBackup.newDataSourceService().backup(backupFile); + + } finally { + + if (sourceToBackup != localSource) { + sourceToBackup.close(); + } + } - handler.backupLocalDatabase(source, backupFile, trips); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm