Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 621d20eb by Tony Chemit at 2020-06-30T13:41:44+02:00 Bascule entre langues - Closes #1553 - - - - - 5 changed files: - client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java - client-core/src/main/java/fr/ird/observe/client/main/actions/CloseApplicationAction.java - client-core/src/main/java/fr/ird/observe/client/main/actions/ReloadApplicationAction.java - client-core/src/main/java/fr/ird/observe/client/main/callback/ReloadApplicationCallback.java - client-runner/src/main/java/fr/ird/observe/client/RunObserve.java Changes: ===================================== client-core/src/main/java/fr/ird/observe/client/ObserveSwingApplicationContext.java ===================================== @@ -22,7 +22,7 @@ package fr.ird.observe.client; import fr.ird.observe.client.configuration.ClientConfig; -import fr.ird.observe.client.configuration.ClientConfigApplicationComponent; +import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.ObserveServiceMainFactoryApplicationComponent; import fr.ird.observe.spi.DtoModelHelper; @@ -30,6 +30,8 @@ import io.ultreia.java4all.application.context.ApplicationContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.Optional; + import static io.ultreia.java4all.i18n.I18n.n; /** @@ -43,6 +45,7 @@ import static io.ultreia.java4all.i18n.I18n.n; public class ObserveSwingApplicationContext extends ApplicationContext { private static final Logger log = LogManager.getLogger(ObserveSwingApplicationContext.class); + private static ObserveSwingDataSource dataSourceToReload; public static ObserveSwingApplicationContext init(ClientConfig config) { ClientConfigFinderInstance.config = config; @@ -90,4 +93,12 @@ public class ObserveSwingApplicationContext extends ApplicationContext { n("observe.runner.initStorage.title.no.local.db.found"); } + + public static void setDataSourceToReload(ObserveSwingDataSource dataSourceToReload) { + ObserveSwingApplicationContext.dataSourceToReload = dataSourceToReload; + } + + public static Optional<ObserveSwingDataSource> getDataSourceToReload() { + return Optional.ofNullable(dataSourceToReload); + } } ===================================== client-core/src/main/java/fr/ird/observe/client/main/actions/CloseApplicationAction.java ===================================== @@ -28,6 +28,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.swing.application.ApplicationRunner; +import javax.swing.KeyStroke; import java.awt.event.ActionEvent; import static io.ultreia.java4all.i18n.I18n.t; @@ -46,6 +47,22 @@ public class CloseApplicationAction extends MainUIActionSupport implements Runna super(t("observe.action.exit"), t("observe.action.exit.tip"), "exit", 'Q'); } + public CloseApplicationAction(String label, String shortDescription, String actionIcon, KeyStroke acceleratorKey) { + super(label, shortDescription, actionIcon, acceleratorKey); + } + + public CloseApplicationAction(String actionCommandKey, String label, String shortDescription, String actionIcon, KeyStroke acceleratorKey) { + super(actionCommandKey, label, shortDescription, actionIcon, acceleratorKey); + } + + public CloseApplicationAction(String label, String shortDescription, String actionIcon, char acceleratorKey) { + super(label, shortDescription, actionIcon, acceleratorKey); + } + + public CloseApplicationAction(String actionCommandKey, String label, String shortDescription, String actionIcon, char acceleratorKey) { + super(actionCommandKey, label, shortDescription, actionIcon, acceleratorKey); + } + @Override public void run() { ===================================== client-core/src/main/java/fr/ird/observe/client/main/actions/ReloadApplicationAction.java ===================================== @@ -22,12 +22,13 @@ package fr.ird.observe.client.main.actions; * #L% */ -import fr.ird.observe.client.main.ObserveMainUI; +import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; import fr.ird.observe.client.main.body.NoBodyContentComponent; +import fr.ird.observe.client.util.UIHelper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; - -import java.awt.event.ActionEvent; +import org.nuiton.jaxx.runtime.swing.application.ApplicationRunner; import static io.ultreia.java4all.i18n.I18n.t; @@ -37,7 +38,7 @@ import static io.ultreia.java4all.i18n.I18n.t; * @author Tony Chemit - dev@tchemit.fr * @since 8.0 */ -public class ReloadApplicationAction extends MainUIActionSupport { +public class ReloadApplicationAction extends CloseApplicationAction { private static final Logger log = LogManager.getLogger(ReloadApplicationAction.class); @@ -46,14 +47,28 @@ public class ReloadApplicationAction extends MainUIActionSupport { } @Override - protected void doActionPerformed(ActionEvent event, ObserveMainUI ui) { - + public void run() { log.info("ObServe reloading..."); + boolean canContinue = ui.changeBodyContent(NoBodyContentComponent.class); -// boolean canContinue = ContentUIManagerApplicationComponent.value().closeSelectedContentUI(); - if (canContinue) { - getClientUIContext().getUiCallbackManager().run("application"); + if (!canContinue) { + return; + } + + ObserveSwingDataSource mainDataSource = getObserveDataSourcesManager().getMainDataSource(); + if (mainDataSource != null) { + if (mainDataSource.isOpen()) { + try { + mainDataSource.close(); + } catch (Exception e) { + UIHelper.handlingError("Can't close data source", e); + mainDataSource = null; + } + } + ObserveSwingApplicationContext.setDataSourceToReload(mainDataSource); } + ApplicationRunner.getRunner().setReload(true); + super.run(); } } ===================================== client-core/src/main/java/fr/ird/observe/client/main/callback/ReloadApplicationCallback.java ===================================== @@ -25,9 +25,8 @@ package fr.ird.observe.client.main.callback; import com.google.auto.service.AutoService; import fr.ird.observe.client.ClientUIContext; import fr.ird.observe.client.main.ObserveMainUI; -import fr.ird.observe.client.main.actions.CloseApplicationAction; +import fr.ird.observe.client.main.actions.ReloadApplicationAction; import org.nuiton.jaxx.runtime.swing.SwingUtil; -import org.nuiton.jaxx.runtime.swing.application.ApplicationRunner; import javax.swing.Icon; @@ -64,8 +63,7 @@ public class ReloadApplicationCallback implements ObserveUICallback { @Override public void run() { - ApplicationRunner.getRunner().setReload(true); - CloseApplicationAction action = new CloseApplicationAction(); + ReloadApplicationAction action = new ReloadApplicationAction(); action.setUi(mainUI); action.run(); } ===================================== client-runner/src/main/java/fr/ird/observe/client/RunObserve.java ===================================== @@ -75,6 +75,7 @@ import java.util.Arrays; import java.util.Date; import java.util.EnumSet; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.logging.Level; @@ -271,7 +272,9 @@ public class RunObserve extends ApplicationRunner implements WithBackupsManager, // // return; // } - if (!config.isLoadLocalStorage()) { + Optional<ObserveSwingDataSource> dataSourceToReload = ObserveSwingApplicationContext.getDataSourceToReload(); + ObserveSwingApplicationContext.setDataSourceToReload(null); + if (!config.isLoadLocalStorage() && !dataSourceToReload.isPresent()) { // on ne charge rien au démarrage log.info(t("observe.runner.loaded", config.getVersion())); @@ -280,7 +283,8 @@ public class RunObserve extends ApplicationRunner implements WithBackupsManager, // 4 - init storage - Runnable initStorage = () -> initStorage(config, ui); + + Runnable initStorage = () -> initStorage(config, ui, dataSourceToReload.orElse(null)); getObserveActionExecutor().addAction(t("observe.runner.load.database"), initStorage); } @@ -364,57 +368,65 @@ public class RunObserve extends ApplicationRunner implements WithBackupsManager, //FIXME Need to have a unified API and only one //FIXME first try to open specified ds (here local ds) //FIXME if can not load local ds, then feedback it and propose to load automatic backup, or to create a new local ds - private void initStorage(ClientConfig config, JFrame ui) { + private void initStorage(ClientConfig config, JFrame ui, ObserveSwingDataSource previousDataSource) { ObserveMainUI mainUI = (ObserveMainUI) ui; ObserveDataSourcesManager dataSourcesManager = getObserveDataSourcesManager(); BackupsManager backupsManager = getBackupsManager(); - BackupStorage lastAutomaticBackup = backupsManager.getAutomaticBackups().stream().findFirst().orElse(null); - - boolean askToCreate = true; - if (config.isLocalStorageExist()) { + if (previousDataSource != null) { - // une base locale existe, on l'ouvre + // reuse previous data source + previousDataSource.setProgressModel(new ProgressModel()); + mainUI.getMainUIBodyContentManager().getBodyTyped(DataSourceEditor.class, DataSourceEditorBodyContent.class).loadStorage(mainUI, previousDataSource, true); - ObserveSwingDataSource dataSource = dataSourcesManager.newLocalDataSource(); - dataSource.setProgressModel(new ProgressModel()); + } else if (config.isLoadLocalStorage()){ - try { + boolean askToCreate = true; + BackupStorage lastAutomaticBackup = backupsManager.getAutomaticBackups().stream().findFirst().orElse(null); - ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(false); - dataSource.setOwner(dataSourceInformation.isOwner()); - dataSource.setSuperUser(dataSourceInformation.isSuperUser()); - dataSource.migrateDataIfPossible(dataSourceInformation, config.getModelVersion()); + if (config.isLocalStorageExist()) { - // la source sera utilisée dans les ui - mainUI.getMainUIBodyContentManager().getBodyTyped(DataSourceEditor.class, DataSourceEditorBodyContent.class).loadStorage(mainUI, dataSource, true); + // une base locale existe, on l'ouvre - askToCreate = false; - } catch (Exception e) { + ObserveSwingDataSource dataSource = dataSourcesManager.newLocalDataSource(); + dataSource.setProgressModel(new ProgressModel()); - if (lastAutomaticBackup != null) { + try { - log.error("Could not load local database", e); + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(false); + dataSource.setOwner(dataSourceInformation.isOwner()); + dataSource.setSuperUser(dataSourceInformation.isSuperUser()); + dataSource.migrateDataIfPossible(dataSourceInformation, config.getModelVersion()); - InitStorageModel initStorageModel = new InitStorageModel(config.getLocalDBDirectory(), lastAutomaticBackup); + // la source sera utilisée dans les ui + mainUI.getMainUIBodyContentManager().getBodyTyped(DataSourceEditor.class, DataSourceEditorBodyContent.class).loadStorage(mainUI, dataSource, true); - JOptionPane.showMessageDialog( - mainUI, - t("observe.runner.initStorage.local.db.error", initStorageModel.getBackupDate()), - t("observe.runner.title.error.dialog"), - JOptionPane.WARNING_MESSAGE - ); - loadBackup(dataSourcesManager, mainUI, lastAutomaticBackup); askToCreate = false; + } catch (Exception e) { + + if (lastAutomaticBackup != null) { + + log.error("Could not load local database", e); + + InitStorageModel initStorageModel = new InitStorageModel(config.getLocalDBDirectory(), lastAutomaticBackup); + + JOptionPane.showMessageDialog( + mainUI, + t("observe.runner.initStorage.local.db.error", initStorageModel.getBackupDate()), + t("observe.runner.title.error.dialog"), + JOptionPane.WARNING_MESSAGE + ); + loadBackup(dataSourcesManager, mainUI, lastAutomaticBackup); + askToCreate = false; + } } - } - } - if (askToCreate) { - askToCreateLocalDatabase(mainUI, config, dataSourcesManager, lastAutomaticBackup); + if (askToCreate) { + askToCreateLocalDatabase(mainUI, config, dataSourcesManager, lastAutomaticBackup); + } + } } - log.info(t("observe.runner.initStorage.done")); } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/621d20eb4303b6d0fb9854bd51... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/621d20eb4303b6d0fb9854bd51... You're receiving this email because of your account on gitlab.com.