r1167 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-service/src/main/java/fr/ifremer/tutti/service tutti-ui-swing/src/main/filtered-resources tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action tutti-ui-swing/src/main/resources/i18n
Author: tchemit Date: 2013-08-23 17:51:18 +0200 (Fri, 23 Aug 2013) New Revision: 1167 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1167 Log: fixes #3104: Am?\195?\169lioration de la barre de progression des actions refs #3106: [TECH] Faciliter l'import d'une nouvelle base refs #2890: [TECH] - V?\195?\169rification de la version utilis?\195?\169e par rapport ?\195?\160 la BDD Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/LoadDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/MigrateDbSchemaAction.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/ProgressionModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/ProgressionModel.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/ProgressionModel.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/ProgressionModel.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -53,7 +53,7 @@ protected String message; - public long getTotal() { + public int getTotal() { return total; } @@ -64,6 +64,16 @@ setCurrent(0); } + public void adaptTotal(int total) { + long current = getCurrent(); + setTotal(total); + increments((int) current); + Object oldValue = getTotal(); + this.total = total; + firePropertyChange(PROPERTY_TOTAL, oldValue, total); + setCurrent(current); + } + public long getCurrent() { return current; } @@ -93,6 +103,11 @@ return message; } + public void increments(String message) { + increments(1); + setMessage(message); + } + public void setMessage(String message) { Object oldValue = getMessage(); this.message = message; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -242,7 +242,7 @@ */ public void importDb(File file) { - // can not do this operation on a opnened bd + // can not do this operation on a opened db Preconditions.checkState(!isDbLoaded()); // need a file to export Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-08-23 15:51:18 UTC (rev 1167) @@ -22,7 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sat Jul 27 15:12:29 CEST 2013 +#Fri Aug 23 16:40:22 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.save.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -69,6 +69,7 @@ tutti.dbManager.action.importDb.help=dbManager.html\#actions tutti.dbManager.action.installDb.help=dbManager.html\#actions tutti.dbManager.action.openDb.help=dbManager.html\#actions +tutti.dbManager.action.reinstallDb.help= tutti.dbManager.action.upgradeDb.help=dbManager.html\#actions tutti.dbManager.help=dbManager.html tutti.editAccidentalBatch.action.createBatch.help=editFishingOperation.html\#captureCapturesAccidentellesActions Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-08-23 15:51:18 UTC (rev 1167) @@ -22,7 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sat Jul 27 15:12:29 CEST 2013 +#Fri Aug 23 16:40:22 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.save.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -69,6 +69,7 @@ tutti.dbManager.action.importDb.help=dbManager.html\#actions tutti.dbManager.action.installDb.help=dbManager.html\#actions tutti.dbManager.action.openDb.help=dbManager.html\#actions +tutti.dbManager.action.reinstallDb.help= tutti.dbManager.action.upgradeDb.help=dbManager.html\#actions tutti.dbManager.help=dbManager.html tutti.editAccidentalBatch.action.createBatch.help=editFishingOperation.html\#captureCapturesAccidentellesActions Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -642,7 +642,7 @@ public void clearDbContext() { dataContext.clearContext(); - saveContextToConfig(); +// saveContextToConfig(); } public void checkDbContext() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/AbstractChangeScreenAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -54,7 +54,7 @@ * * @since 1.0 */ - protected final TuttiScreen screen; + protected TuttiScreen screen; /** * Flag to skip the check of current screen. @@ -74,6 +74,10 @@ this.skipCheckCurrentScreen = skipCheckCurrentScreen; } + protected void setScreen(TuttiScreen screen) { + this.screen = screen; + } + @Override protected boolean prepareAction() throws Exception { boolean result = super.prepareAction(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -39,8 +39,7 @@ import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUIHandler; import fr.ifremer.tutti.ui.swing.content.cruise.ValidateCruiseUI; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUI; -import fr.ifremer.tutti.ui.swing.content.db.LoadDbAction; -import fr.ifremer.tutti.ui.swing.content.db.MigrateDbSchemaAction; +import fr.ifremer.tutti.ui.swing.content.db.OpenDbAction; import fr.ifremer.tutti.ui.swing.content.home.SelectCruiseUI; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.program.EditProgramUI; @@ -213,19 +212,11 @@ if (context.isDbExist()) { // open tutti db (using a fake button to have simple api) -// TuttiUIAction<LoadDbAction> uiAction = TuttiActionHelper.createUIAction(this, LoadDbAction.class); -// LoadDbAction logicAction = uiAction.getLogicAction(); -// logicAction.setSkipCheckCurrentScreen(true); - TuttiActionHelper.runActionAndWait(this, LoadDbAction.class); -// uiAction.actionPerformed(null); + TuttiUIAction<OpenDbAction> uiAction = TuttiActionHelper.createUIAction(this, OpenDbAction.class); + OpenDbAction logicAction = uiAction.getLogicAction(); + logicAction.setSkipCheckCurrentScreen(true); + uiAction.actionPerformed(null); - // try to update schema - - TuttiUIAction<MigrateDbSchemaAction> uiAction2 = TuttiActionHelper.createUIAction(this, MigrateDbSchemaAction.class); - MigrateDbSchemaAction logicAction2 = uiAction2.getLogicAction(); - logicAction2.setSkipCheckCurrentScreen(true); - uiAction2.actionPerformed(null); - } else { // clean db context Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/UpdateDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -60,21 +60,25 @@ @Override protected boolean prepareAction() throws Exception { - TuttiUIContext context = getContext(); - TuttiApplicationConfig config = context.getConfig(); - String url = config.getUpdateUrl(); + boolean doAction = super.prepareAction(); - try { - TuttiUIUtil.tryToConnectToUpdateUrl( - url, - n_("tutti.error.update.could.not.reach.url") - ); - } catch (TuttiBusinessException e) { - TuttiUIContext.getErrorHelper().showWarningDialog(e.getMessage()); - return false; + if (doAction) { + TuttiUIContext context = getContext(); + TuttiApplicationConfig config = context.getConfig(); + String url = config.getUpdateUrl(); + + try { + TuttiUIUtil.tryToConnectToUpdateUrl( + url, + n_("tutti.error.update.could.not.reach.url") + ); + } catch (TuttiBusinessException e) { + TuttiUIContext.getErrorHelper().showWarningDialog(e.getMessage()); + return false; + } } - return super.prepareAction(); + return doAction; } @Override Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -0,0 +1,92 @@ +package fr.ifremer.tutti.ui.swing.content.db; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; +import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import static org.nuiton.i18n.I18n._; + +/** + * To close a db. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.4 + */ +public class CloseDbAction extends AbstractMainUITuttiAction { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(CloseDbAction.class); + + protected String jdbcUrl; + + public CloseDbAction(MainUIHandler handler) { + super(handler, true); + } + + @Override + protected boolean prepareAction() throws Exception { + + boolean canContinue = super.prepareAction(); + if (canContinue) { + jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); + } + return canContinue; + } + + @Override + protected void doAction() { + + // close db + getContext().getPersistenceService().clearAllCaches(); + + // set to not reload a real db + getContext().setDbLoaded(false); + + // close services + repon a fake persistence service + getHandler().reloadPersistenceService(); + + // clean db context + getContext().clearDbContext(); + + // Close the application, will exit and restart application + //RunTutti.closeTutti(getHandler(), RunTutti.DELETE_DB_EXIT_CODE); + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + sendMessage(_("tutti.flash.info.db.closed", jdbcUrl)); + + // make sure title is reloaded + getUI().getHandler().changeTitle(); + } + +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/CloseDbAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.css 2013-08-23 15:51:18 UTC (rev 1167) @@ -28,20 +28,23 @@ #informationLabel { actionIcon: information; - text: {handler.updateMessage(model.isDbExist(), model.isDbLoaded())}; horizontalAlignment: {JLabel.CENTER}; } -#noDbActions { - visible: {!model.isDbExist()}; +#informationArea { + editable: false; + focusable:false; + contentType: "text/html"; + border: {new EmptyBorder(5, 5, 5, 5)}; + text: {handler.updateMessage(model.isDbExist(), model.isDbLoaded())}; } #installDbButton { actionIcon: install-db; - text: "tutti.dbManager.action.installDb"; - toolTipText: "tutti.dbManager.action.installDb.tip"; - i18nMnemonic: "tutti.dbManager.action.installDb.mnemonic"; - _tuttiAction: {UpdateDbAction.class}; + text: {handler.getInstallButtonText(model.isDbExist())}; + toolTipText: {handler.getInstallButtonTip(model.isDbExist())}; + i18nMnemonic: {handler.getInstallButtonMnemonic(model.isDbExist())}; + _tuttiAction: {InstallDbAction.class}; _help: {"tutti.dbManager.action.installDb.help"}; } @@ -54,15 +57,31 @@ _help: {"tutti.dbManager.action.importDb.help"}; } -#withDbActions { - visible: {model.isDbExist()}; +#openDbButton { + actionIcon: open-db; + text: "tutti.dbManager.action.openDb"; + i18nMnemonic: "tutti.dbManager.action.openDb.mnemonic"; + visible: {model.isDbExist() && !model.isDbLoaded()}; + _tuttiAction: {OpenDbAction.class}; + toolTipText: "tutti.dbManager.action.openDb.tip"; + _help: {"tutti.dbManager.action.openDb.help"}; } +#closeDbButton { + actionIcon: close-db; + text: "tutti.dbManager.action.closeDb"; + i18nMnemonic: "tutti.dbManager.action.closeDb.mnemonic"; + visible: {model.isDbLoaded()}; + _tuttiAction: {CloseDbAction.class}; + toolTipText: "tutti.dbManager.action.closeDb.tip"; + _help: {"tutti.dbManager.action.closeDb.help"}; +} + #upgradeDbButton { actionIcon: update-referential; text: "tutti.dbManager.action.upgradeDb"; i18nMnemonic: "tutti.dbManager.action.upgradeDb.mnemonic"; - enabled: {model.isDbLoaded()}; + visible: {model.isDbLoaded()}; _tuttiAction: {UpdateDbAction.class}; toolTipText: "tutti.dbManager.action.upgradeDb.tip"; _help: {"tutti.dbManager.action.upgradeDb.help"}; @@ -72,18 +91,8 @@ actionIcon: export-db; text: "tutti.dbManager.action.exportDb"; i18nMnemonic: "tutti.dbManager.action.exportDb.mnemonic"; - enabled: {model.isDbLoaded()}; + visible: {model.isDbLoaded()}; _tuttiAction: {ExportDbAction.class}; toolTipText: "tutti.dbManager.action.exportDb.tip"; _help: {"tutti.dbManager.action.exportDb.help"}; -} - -#exportAndCleanDbButton { - actionIcon: export-db; - text: "tutti.dbManager.action.exportAndCleanDb"; - i18nMnemonic: "tutti.dbManager.action.exportAndCleanDb.mnemonic"; - enabled: {model.isDbLoaded()}; - _tuttiAction: {ExportAndCleanDbAction.class}; - toolTipText: "tutti.dbManager.action.exportAndCleanDb.tip"; - _help: {"tutti.dbManager.action.exportAndCleanDb.help"}; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUI.jaxx 2013-08-23 15:51:18 UTC (rev 1167) @@ -30,6 +30,8 @@ fr.ifremer.tutti.ui.swing.content.UpdateDbAction fr.ifremer.tutti.ui.swing.util.TuttiUI + javax.swing.border.EmptyBorder + static org.nuiton.i18n.I18n._ </import> @@ -55,19 +57,19 @@ <TuttiHelpBroker id='broker' constructorParams='"tutti.dbManager.help"'/> - <JLabel id='informationLabel' constraints='BorderLayout.CENTER'/> - <JPanel id='centerPanel' layout='{new BorderLayout()}' + <JPanel id='infoPanel' layout='{new BorderLayout()}' + constraints='BorderLayout.CENTER'> + <!--<JLabel id='informationLabel' constraints='BorderLayout.WEST'/>--> + <JTextPane id='informationArea' constraints='BorderLayout.CENTER'/> + </JPanel> + + <JPanel id='actions' layout='{new GridLayout(0, 1)}' constraints='BorderLayout.SOUTH'> - <JPanel id='noDbActions' constraints='BorderLayout.CENTER' - layout='{new GridLayout(0, 1)}'> - <JButton id='installDbButton'/> - <JButton id='importDbButton'/> - </JPanel> - <JPanel id='withDbActions' constraints='BorderLayout.SOUTH' - layout='{new GridLayout(0, 1)}'> - <JButton id='upgradeDbButton'/> - <JButton id='exportDbButton'/> - <JButton id='exportAndCleanDbButton'/> - </JPanel> + <JButton id='closeDbButton'/> + <JButton id='openDbButton'/> + <JButton id='installDbButton'/> + <JButton id='importDbButton'/> + <JButton id='upgradeDbButton'/> + <JButton id='exportDbButton'/> </JPanel> -</JPanel> \ No newline at end of file +</JPanel> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -27,6 +27,7 @@ import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.validator.swing.SwingValidator; +import org.nuiton.util.Version; import javax.swing.JComponent; import javax.swing.SwingUtilities; @@ -56,8 +57,10 @@ if (dbLoaded) { + Version dbVersion = getContext().getPersistenceService().getDbVersion(); + // db loaded - message = _("tutti.dbManager.info.db.loaded", jdbcUrl); + message = _("tutti.dbManager.info.db.loaded", jdbcUrl, dbVersion); } else { @@ -78,10 +81,6 @@ initUI(ui); - ui.applyDataBinding(DbManagerUI.BINDING_UPGRADE_DB_BUTTON_ENABLED); - ui.applyDataBinding(DbManagerUI.BINDING_EXPORT_DB_BUTTON_ENABLED); - ui.applyDataBinding(DbManagerUI.BINDING_EXPORT_AND_CLEAN_DB_BUTTON_ENABLED); - SwingUtilities.invokeLater( new Runnable() { @Override @@ -106,4 +105,33 @@ return null; } + public String getInstallButtonText(boolean dbExist) { + String result; + if (dbExist) { + result = _("tutti.dbManager.action.reinstallDb"); + } else { + result = _("tutti.dbManager.action.installDb"); + } + return result; + } + + public String getInstallButtonTip(boolean dbExist) { + String result; + if (dbExist) { + result = _("tutti.dbManager.action.reinstallDb.tip"); + } else { + result = _("tutti.dbManager.action.installDb.tip"); + } + return result; + } + + public String getInstallButtonMnemonic(boolean dbExist) { + String result; + if (dbExist) { + result = _("tutti.dbManager.action.reinstallDb.mnemonic"); + } else { + result = _("tutti.dbManager.action.installDb.mnemonic"); + } + return result; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -49,6 +49,8 @@ /** Logger. */ private static final Log log = LogFactory.getLog(ExportDbAction.class); + public static final int TOTAL_STEP = 3; + protected File file; public static final DateFormat df = new SimpleDateFormat("yyy-MM-dd"); @@ -83,7 +85,7 @@ ProgressionModel progressionModel = new ProgressionModel(); setProgressionModel(progressionModel); - progressionModel.setTotal(3); + progressionModel.setTotal(TOTAL_STEP); } return doAction; } @@ -99,22 +101,20 @@ // close db - progressionModel.setMessage(_("tutti.exportDb.closeDb")); + progressionModel.setMessage(_("tutti.exportDb.step.closeDb")); getContext().setDbLoaded(false); getHandler().reloadPersistenceService(); // export - progressionModel.increments(1); - progressionModel.setMessage(_("tutti.exportDb.createArchive", file)); + progressionModel.increments(_("tutti.exportDb.step.createArchive", file)); getContext().getPersistenceService().exportDb(file); // reopen db - progressionModel.increments(1); - progressionModel.setMessage(_("tutti.exportDb.openDb")); + progressionModel.increments(_("tutti.exportDb.step.openDb")); getContext().setDbLoaded(true); getHandler().reloadPersistenceService(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ImportDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -25,15 +25,21 @@ */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.Version; +import javax.swing.JOptionPane; import java.io.File; +import java.util.Date; import static org.nuiton.i18n.I18n._; @@ -48,8 +54,22 @@ /** Logger. */ private static final Log log = LogFactory.getLog(ImportDbAction.class); - protected File file; + protected File backupFile; + protected File importFile; + + protected String jdbcUrl; + + protected boolean doBackup; + + protected boolean updateSchema; + + protected boolean closeDb; + + protected Version dbVersion; + + protected Version applicationVersion; + public ImportDbAction(MainUIHandler handler) { super(handler, true); } @@ -57,64 +77,282 @@ @Override protected boolean prepareAction() throws Exception { + jdbcUrl = null; + dbVersion = applicationVersion = null; + backupFile = importFile = null; + doBackup = closeDb = updateSchema = false; + boolean doAction = super.prepareAction(); if (doAction) { - // choose file to import - file = chooseFile( - _("tutti.dbManager.title.choose.dbImportFile"), - _("tutti.dbManager.action.chooseDbFile"), - "^.*\\.zip", _("tutti.common.file.zip") - ); + jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); - doAction = file != null; + if (getModel().isDbExist()) { + displayInfoMessage( + _("tutti.dbManager.title.backup.db"), + _("tutti.dbManager.action.importDb.backup.db") + ); + + // do backup + + backupFile = saveFile( + getConfig().getServiceConfig().getPersistenceConfig().getDbBackupDirectory(), + "tutti-db-" + ExportDbAction.df.format(new Date()), + "zip", + _("tutti.dbManager.title.choose.dbExportFile"), + _("tutti.dbManager.action.chooseDbExportFile"), + "^.*\\.zip", _("tutti.common.file.zip") + ); + + if (backupFile == null) { + + displayWarningMessage( + _("tutti.dbManager.title.backup.db"), + _("tutti.dbManager.action.importdb.no.backup.db.choosen") + ); + + doAction = false; + } + } + if (doAction) { - getContext().getPersistenceService().checkImportStructure(file); + // choose file to import + importFile = chooseFile( + _("tutti.dbManager.title.choose.dbImportFile"), + _("tutti.dbManager.action.chooseDbFile"), + "^.*\\.zip", _("tutti.common.file.zip") + ); + + if (importFile == null) { + + displayWarningMessage( + _("tutti.dbManager.title.choose.dbImportFile"), + _("tutti.dbManager.action.importdb.no.import.file.choosen") + ); + + doAction = false; + } } + + doBackup = backupFile != null; + + if (doAction) { + + ProgressionModel progressionModel = new ProgressionModel(); + progressionModel.setTotal(3 + (doBackup ? 2 : 0)); + setProgressionModel(progressionModel); + + getContext().getPersistenceService().checkImportStructure(importFile); + } } return doAction; } @Override protected void releaseAction() { - file = null; + importFile = backupFile = null; super.releaseAction(); } @Override protected void doAction() throws Exception { - Preconditions.checkNotNull(file); + Preconditions.checkNotNull(importFile); if (log.isInfoEnabled()) { - log.info("Will import db: " + file); + log.info("Will import db: " + importFile); } - ProgressionModel progressionModel = new ProgressionModel(); - progressionModel.setTotal(3); - setProgressionModel(progressionModel); + ProgressionModel progressionModel = getProgressionModel(); + if (doBackup) { - // import db + // ------------------------------------------------------------------ // + // --- backup current db // + // ------------------------------------------------------------------ // - progressionModel.setMessage(_("tutti.importDb.unzipArchive")); + progressionModel.increments(_("tutti.importDb.step.backupDb", backupFile)); + getContext().getPersistenceService().exportDb(backupFile); - getContext().getPersistenceService().importDb(file); - getContext().setDbExist(true); + // close current db + getContext().setDbLoaded(false); + getHandler().reloadPersistenceService(); + } - // open db + // ------------------------------------------------------------------ // + // --- import db // + // ------------------------------------------------------------------ // - progressionModel.increments(1); - progressionModel.setMessage(_("tutti.importDb.openDb")); - TuttiActionHelper.runInternalAction(getHandler(), OpenDbAction.class); + progressionModel.increments(_("tutti.importDb.step.unzipArchive")); + + getContext().getPersistenceService().importDb(importFile); + + // ------------------------------------------------------------------ // + // --- open db // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.importDb.step.openDb", jdbcUrl)); + try { + getContext().setDbLoaded(true); + getHandler().reloadPersistenceService(); + } catch (Exception e) { + + if (log.isErrorEnabled()) { + log.error("Could not open db", e); + } + // no more db + getContext().setDbLoaded(false); + getHandler().reloadPersistenceService(); + + // could not load db + throw new TuttiBusinessException(_("tutti.dbManager.action.importdb.couldNotOpen"), e); + } + + // ------------------------------------------------------------------ // + // --- check schema version // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.importDb.step.checkSchemaVersion")); + + TuttiPersistence persistenceService = + getHandler().getPersistenceService(); + + dbVersion = persistenceService.getDbVersion(); + + if (log.isInfoEnabled()) { + log.info("Detected database version: " + dbVersion); + } + applicationVersion = persistenceService.getApplicationVersion(); + + if (log.isInfoEnabled()) { + log.info("Detected schema application version:" + applicationVersion); + } + + if (dbVersion == null) { + + // no database version filled (can not migrate schema) + String message = _("tutti.dbManager.action.upgradeDb.schema.version.not.found"); + displayWarningMessage(_("tutti.dbManager.title.schema.toupdate"), message); + + closeDb = true; + } else if (dbVersion.equals(applicationVersion)) { + + // database schema is up to date + if (log.isInfoEnabled()) { + log.info("Database schema is up-to-date at version: " + dbVersion); + } + } else if (dbVersion.compareTo(applicationVersion) < 0) { + + // database schema need to migrate + // ask user to migrate or not (if not will close db) + + String message = _("tutti.dbManager.action.upgradeDb.schema.to.update.message", dbVersion, applicationVersion); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.dbManager.action.upgradeDb.schema.to.update.message.help")); + int i = JOptionPane.showConfirmDialog( + getHandler().getTopestUI(), + htmlMessage, + _("tutti.dbManager.title.schema.toupdate"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + boolean continueAction = i == JOptionPane.OK_OPTION; + + if (continueAction) { + + // will migrate + updateSchema = true; + } else { + + //close db + closeDb = true; + } + + + } else { + + // database schema version is higher than application one + String message = _("tutti.dbManager.action.upgradeDb.schema.too.high", dbVersion, applicationVersion); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.dbManager.action.upgradeDb.schema.too.high.help")); + int i = JOptionPane.showConfirmDialog( + getHandler().getTopestUI(), + htmlMessage, + _("tutti.dbManager.title.schema.toupdate"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + boolean continueAction = i == JOptionPane.OK_OPTION; + + if (!continueAction) { + + //close db + closeDb = true; + } + } + + if (closeDb) { + + // ------------------------------------------------------------------ // + // --- close db // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.importDb.step.closeDb")); + TuttiActionHelper.runInternalAction(getHandler(), CloseDbAction.class); + + return; + } + + if (updateSchema) { + + // need to migrate schema + progressionModel.adaptTotal(progressionModel.getTotal() + 1); + + // ------------------------------------------------------------------ // + // --- update schema // + // ------------------------------------------------------------------ // + + String message = _("tutti.importDb.step.will.migrateSchema", + dbVersion, applicationVersion); + + progressionModel.increments(message); + sendMessage(message); + getHandler().getPersistenceService().updateSchema(); + + sendMessage(_("tutti.flash.info.db.schema.updated", dbVersion, applicationVersion)); + } + + // ------------------------------------------------------------------ // + // --- check db context // + // ------------------------------------------------------------------ // + + String message = _("tutti.importDb.step.check.dbContext", + dbVersion, applicationVersion); + + getProgressionModel().increments(message); + + if (log.isDebugEnabled()) { + log.debug("Check db context"); + } + getContext().checkDbContext(); } @Override public void postSuccessAction() { super.postSuccessAction(); - String jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); - sendMessage(_("tutti.flash.info.db.imported", jdbcUrl)); + if (closeDb) { + sendMessage(_("tutti.flash.info.db.imported.but.closed", jdbcUrl)); + } else { + sendMessage(_("tutti.flash.info.db.imported", jdbcUrl)); + } + + // make sure title is reloaded + getUI().getHandler().changeTitle(); } } \ No newline at end of file Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -0,0 +1,196 @@ +package fr.ifremer.tutti.ui.swing.content.db; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.TuttiBusinessException; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; +import fr.ifremer.tutti.ui.swing.TuttiApplicationUpdaterCallBack; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; +import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.updater.ApplicationUpdater; + +import java.io.File; +import java.util.Date; + +import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.n_; + +/** + * To install (or reinstall) a db from last network one. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.4 + */ +public class InstallDbAction extends AbstractMainUITuttiAction { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(InstallDbAction.class); + + protected File backupFile; + + protected boolean doBackup; + + protected String jdbcUrl; + + public InstallDbAction(MainUIHandler handler) { + super(handler, true); + setActionDescription(_("tutti.dbManager.action.installDb.tip")); + } + + @Override + protected boolean prepareAction() throws Exception { + boolean doAction = super.prepareAction(); + + if (doAction) { + + jdbcUrl = null; + backupFile = null; + doBackup = false; + + jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); + + if (getModel().isDbExist()) { + + displayInfoMessage( + _("tutti.dbManager.title.backup.db"), + _("tutti.dbManager.action.installDb.backup.db") + ); + + // do backup + + backupFile = saveFile( + getConfig().getServiceConfig().getPersistenceConfig().getDbBackupDirectory(), + "tutti-db-" + ExportDbAction.df.format(new Date()), + "zip", + _("tutti.dbManager.title.choose.dbExportFile"), + _("tutti.dbManager.action.chooseDbExportFile"), + "^.*\\.zip", _("tutti.common.file.zip") + ); + + if (backupFile == null) { + + displayWarningMessage( + _("tutti.dbManager.title.backup.db"), + _("tutti.dbManager.action.installDb.no.backup.db.choosen") + ); + + doAction = false; + } else { + doBackup = true; + } + } + } + + if (doAction) { + TuttiUIContext context = getContext(); + TuttiApplicationConfig config = context.getConfig(); + String url = config.getUpdateUrl(); + + try { + TuttiUIUtil.tryToConnectToUpdateUrl( + url, + n_("tutti.error.update.could.not.reach.url") + ); + } catch (TuttiBusinessException e) { + TuttiUIContext.getErrorHelper().showWarningDialog(e.getMessage()); + doAction = false; + } + } + + if (doAction) { + + ProgressionModel progressionModel = new ProgressionModel(); + progressionModel.setTotal(1 + (doBackup ? 2 : 0)); + setProgressionModel(progressionModel); + } + return doAction; + } + + @Override + protected void doAction() { + + ProgressionModel progressionModel = getProgressionModel(); + if (doBackup) { + + // ------------------------------------------------------------------ // + // --- backup current db // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.installDb.step.backupDb", backupFile)); + getContext().getPersistenceService().exportDb(backupFile); + + // close current db + getContext().setDbLoaded(false); + getHandler().reloadPersistenceService(); + } + + // ------------------------------------------------------------------ // + // --- install db // + // ------------------------------------------------------------------ // + + TuttiUIContext context = getContext(); + TuttiApplicationConfig config = context.getConfig(); + + File current = config.getDataDirectory(); + String url = config.getUpdateUrl(); + + if (log.isInfoEnabled()) { + log.info(String.format("Try to install / update db (current data location: %s), using update url: %s", current, url)); + } + + File dest = new File(config.getTuttiBasedir(), "NEW"); + + progressionModel.increments(_("tutti.dbManager.action.upgradeDb.check")); + TuttiApplicationUpdaterCallBack callback = + new TuttiApplicationUpdaterCallBack(this, progressionModel); + callback.setTypes(TuttiApplicationUpdaterCallBack.UpdateType.DB); + ApplicationUpdater up = new ApplicationUpdater(); + up.update(url, + current, + dest, + false, + callback, + progressionModel); + + Preconditions.checkState(callback.isDbInstalled()); + + progressionModel.increments(_("tutti.dbManager.action.upgradeDb.opening")); + + getContext().setDbExist(true); + + // open db + TuttiActionHelper.runInternalAction(getHandler(), OpenDbAction.class); + + } +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/InstallDbAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/LoadDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/LoadDbAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/LoadDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -1,91 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.db; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.TuttiBusinessException; -import fr.ifremer.tutti.ui.swing.content.AbstractMainUITuttiAction; -import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import static org.nuiton.i18n.I18n._; - -/** - * To load an existing db but do nothing in UI. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ -public class LoadDbAction extends AbstractMainUITuttiAction { - - /** Logger. */ - private static final Log log = LogFactory.getLog(LoadDbAction.class); - - public LoadDbAction(MainUIHandler handler) { - super(handler, true); - setActionDescription(_("tutti.dbManager.action.openDb.tip")); - } - - @Override - public void doAction() throws Exception { - - if (log.isDebugEnabled()) { - log.debug("Will open db..."); - } - - try { - getContext().setDbLoaded(true); - getHandler().reloadPersistenceService(); - } catch (Exception e) { - - if (log.isErrorEnabled()) { - log.error("Could not open db", e); - } - // no more db - getContext().setDbLoaded(false); - getHandler().reloadPersistenceService(); - - // could not load db - throw new TuttiBusinessException(_("tutti.dbManager.action.openDb.couldNotOpen")); - } - - if (log.isDebugEnabled()) { - log.debug("Check db context"); - } - getContext().checkDbContext(); - -// super.doAction(); - } - -// @Override -// public void postSuccessAction() { -// -// String jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); -// sendMessage(_("tutti.flash.info.db.opened", jdbcUrl)); -// -// // make sure title is reloaded -// getUI().getHandler().changeTitle(); -// } -} \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/MigrateDbSchemaAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/MigrateDbSchemaAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/MigrateDbSchemaAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -1,169 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.db; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.ProgressionModel; -import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.TuttiScreen; -import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; -import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; -import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.util.Version; - -import java.io.File; -import java.util.Date; - -import static org.nuiton.i18n.I18n._; - -/** - * To migrate the schema of an existing database. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.4 - */ -public class MigrateDbSchemaAction extends AbstractChangeScreenAction { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(MigrateDbSchemaAction.class); - - protected Version dbVersion; - - protected Version applicationVersion; - - protected File file; - - protected boolean updateSchema; - - public MigrateDbSchemaAction(MainUIHandler handler) { - super(handler, true, TuttiScreen.SELECT_CRUISE); - } - - @Override - protected boolean prepareAction() throws Exception { - dbVersion = applicationVersion = null; - updateSchema = false; - boolean doAction = super.prepareAction(); - - if (doAction) { - - PersistenceService persistenceService = - getHandler().getPersistenceService(); - - dbVersion = persistenceService.getDbVersion(); - - applicationVersion = persistenceService.getApplicationVersion(); - - if (dbVersion.equals(applicationVersion)) { - - // database schema is up to date - if (log.isInfoEnabled()) { - log.info("Database schema is up-to-date at version: " + dbVersion); - } - } else if (dbVersion.compareTo(applicationVersion) < 0) { - - // database schema need to migrate - // ask user where to backup db - - String message = _("tutti.dbManager.action.upgradeDb.schema.to.update.message", dbVersion, applicationVersion); - displayMessage(_("tutti.dbManager.title.schema.toupdate"), message); - - // ask user file where to export db - while (file == null) { - file = saveFile( - "tutti-db-" + ExportDbAction.df.format(new Date()), - "zip", - _("tutti.dbManager.title.choose.dbExportFile"), - _("tutti.dbManager.action.chooseDbExportFile"), - "^.*\\.zip", _("tutti.common.file.zip") - ); - } - updateSchema = true; - - } else { - - // database schema version is higher than application one - String message = _("tutti.dbManager.action.upgradeDb.schema.not.update.message", dbVersion, applicationVersion); - displayMessage(_("tutti.dbManager.title.schema.toupdate"), message); - } - } - - if (doAction) { - - ProgressionModel progressionModel = new ProgressionModel(); - setProgressionModel(progressionModel); - progressionModel.setTotal(4); - } - - return doAction; - } - - @Override - protected void doAction() throws Exception { - - if (updateSchema) { - - // do the backup - - TuttiUIAction<ExportDbAction> backupAction = - TuttiActionHelper.createUIAction(getHandler(), ExportDbAction.class); - backupAction.getLogicAction().setProgressionModel(getProgressionModel()); - backupAction.getLogicAction().setFile(file); - TuttiActionHelper.runInternalAction(backupAction.getLogicAction()); - - // update schema - String message = _("tutti.flash.info.db.schema.updating", - dbVersion, applicationVersion); - - getProgressionModel().increments(1); - getProgressionModel().setMessage(message); - sendMessage(message); - getHandler().getPersistenceService().updateSchema(); - } - - super.doAction(); - } - - @Override - public void postSuccessAction() { - super.postSuccessAction(); - - if (updateSchema) { - sendMessage(_("tutti.flash.info.db.schema.updated", dbVersion, applicationVersion)); - } - - String jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); - sendMessage(_("tutti.flash.info.db.opened", jdbcUrl)); - - // make sure title is reloaded - getUI().getHandler().changeTitle(); - - } - -} \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -25,13 +25,23 @@ */ import fr.ifremer.tutti.TuttiBusinessException; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; +import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.Version; +import javax.swing.JOptionPane; +import java.io.File; +import java.util.Date; + import static org.nuiton.i18n.I18n._; /** @@ -45,18 +55,53 @@ /** Logger. */ private static final Log log = LogFactory.getLog(OpenDbAction.class); + protected Version dbVersion; + + protected Version applicationVersion; + + protected File file; + + protected boolean updateSchema; + + protected boolean closeDb; + + protected String jdbcUrl; + public OpenDbAction(MainUIHandler handler) { super(handler, true, TuttiScreen.SELECT_CRUISE); setActionDescription(_("tutti.dbManager.action.openDb.tip")); } @Override + protected boolean prepareAction() throws Exception { + + boolean canContinue = super.prepareAction(); + if (canContinue) { + jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); + dbVersion = applicationVersion = null; + file = null; + closeDb = updateSchema = false; + } + return canContinue; + } + + @Override public void doAction() throws Exception { if (log.isDebugEnabled()) { log.debug("Will open db..."); } + // at the beginning 3 steps (open db + check version + check db context) + ProgressionModel progressionModel = new ProgressionModel(); + setProgressionModel(progressionModel); + progressionModel.setTotal(3); + + // ------------------------------------------------------------------ // + // --- open db // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.openDb.step.open", jdbcUrl)); try { getContext().setDbLoaded(true); getHandler().reloadPersistenceService(); @@ -73,6 +118,144 @@ throw new TuttiBusinessException(_("tutti.dbManager.action.openDb.couldNotOpen")); } + // ------------------------------------------------------------------ // + // --- check schema version // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.openDb.step.checkSchemaVersion")); + + TuttiPersistence persistenceService = + getHandler().getPersistenceService(); + + dbVersion = persistenceService.getDbVersion(); + + if (log.isInfoEnabled()) { + log.info("Detected database version: " + dbVersion); + } + applicationVersion = persistenceService.getApplicationVersion(); + + if (log.isInfoEnabled()) { + log.info("Detected schema application version:" + applicationVersion); + } + + if (dbVersion.equals(applicationVersion)) { + + // database schema is up to date + if (log.isInfoEnabled()) { + log.info("Database schema is up-to-date at version: " + dbVersion); + } + } else if (dbVersion.compareTo(applicationVersion) < 0) { + + // database schema need to migrate + // ask user to migrate or not (if not will close db) + + // ask user where to backup db + + String message = _("tutti.dbManager.action.upgradeDb.schema.to.update.message", dbVersion, applicationVersion); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + _("tutti.dbManager.action.upgradeDb.schema.to.update.message.help")); + int i = JOptionPane.showConfirmDialog( + getHandler().getTopestUI(), + htmlMessage, + _("tutti.dbManager.title.schema.toupdate"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + boolean continueAction = i == JOptionPane.OK_OPTION; + + if (continueAction) { + + // ask user file where to backup db + + file = saveFile( + getConfig().getServiceConfig().getPersistenceConfig().getDbBackupDirectory(), + "tutti-db-" + ExportDbAction.df.format(new Date()), + "zip", + _("tutti.dbManager.title.choose.dbBackupFile"), + _("tutti.dbManager.action.chooseDbBackupFile"), + "^.*\\.zip", _("tutti.common.file.zip") + ); + + if (file == null) { + + // won't migrate db + closeDb = true; + + displayWarningMessage( + _("tutti.dbManager.title.choose.dbBackupFile"), + _("tutti.dbManager.action.upgradeDb.no.backup.db.choosen") + ); + } else { + + updateSchema = true; + } + } else { + + //close db + closeDb = true; + } + + } else { + + // database schema version is higher than application one + displayWarningMessage( + _("tutti.dbManager.title.schema.toupdate"), + _("tutti.dbManager.action.upgradeDb.schema.not.update.message", dbVersion, applicationVersion) + ); + } + + if (closeDb) { + + // ------------------------------------------------------------------ // + // --- backup current db // + // ------------------------------------------------------------------ // + + progressionModel.increments(_("tutti.importDb.step.closeDb")); + TuttiActionHelper.runInternalAction(getHandler(), CloseDbAction.class); + + setScreen(TuttiScreen.MANAGE_DB); + super.doAction(); + return; + } + + if (updateSchema) { + + // need to export db + migrate schema) + progressionModel.adaptTotal(progressionModel.getTotal() + ExportDbAction.TOTAL_STEP + 1); + + // ------------------------------------------------------------------ // + // --- backup current db // + // ------------------------------------------------------------------ // + + TuttiUIAction<ExportDbAction> backupAction = + TuttiActionHelper.createUIAction(getHandler(), ExportDbAction.class); + backupAction.getLogicAction().setProgressionModel(getProgressionModel()); + backupAction.getLogicAction().setFile(file); + TuttiActionHelper.runInternalAction(backupAction.getLogicAction()); + + // ------------------------------------------------------------------ // + // --- update schema // + // ------------------------------------------------------------------ // + + String message = _("tutti.openDb.step.will.migrateSchema", + dbVersion, applicationVersion); + + progressionModel.increments(message); + sendMessage(message); + getHandler().getPersistenceService().updateSchema(); + } + + // ------------------------------------------------------------------ // + // --- check db context // + // ------------------------------------------------------------------ // + + String message = _("tutti.openDb.step.check.dbContext", + dbVersion, applicationVersion); + + getProgressionModel().increments(message); + if (log.isDebugEnabled()) { log.debug("Check db context"); } @@ -84,10 +267,19 @@ @Override public void postSuccessAction() { - String jdbcUrl = TuttiPersistenceConfig.getInstance().getJdbcUrl(); - sendMessage(_("tutti.flash.info.db.opened", jdbcUrl)); - // make sure title is reloaded getUI().getHandler().changeTitle(); + + if (closeDb) { + sendMessage(_("tutti.flash.info.db.not.opened", jdbcUrl)); + } else { + + if (updateSchema) { + + sendMessage(_("tutti.flash.info.db.schema.updated", dbVersion, applicationVersion)); + } + + sendMessage(_("tutti.flash.info.db.opened", jdbcUrl)); + } } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -226,6 +226,32 @@ * @return le fichier choisi ou {@code null} si pas de fichier choisi ou * pas voulu écrasé un fichier existant. */ + protected File saveFile(File defaultFile, + String filename, + String extension, + String title, + String buttonLabel, + String... filters) { + + if (defaultFile != null && FileChooserUtil.isCurrentDirectoryDefault()) { + + // set default directory to this one + FileChooserUtil.setCurrentDirectory(defaultFile); + } + File file = saveFile(filename, extension, title, buttonLabel, filters); + return file; + } + + /** + * Sauver un fichier via un sélecteur graphique de fichiers. + * + * @param title le titre du dialogue de sélection + * @param buttonLabel le label du boutton d'acceptation + * @param filters les filtres + descriptions sur le sélecteur de + * fichiers + * @return le fichier choisi ou {@code null} si pas de fichier choisi ou + * pas voulu écrasé un fichier existant. + */ protected File saveFile(String filename, String extension, String title, @@ -304,12 +330,20 @@ return result; } - protected void displayMessage(String title, String message) { + protected void displayInfoMessage(String title, String message) { JOptionPane.showMessageDialog( getHandler().getTopestUI(), message, title, - JOptionPane.QUESTION_MESSAGE); + JOptionPane.INFORMATION_MESSAGE); } + protected void displayWarningMessage(String title, String message) { + JOptionPane.showMessageDialog( + getHandler().getTopestUI(), + message, + title, + JOptionPane.WARNING_MESSAGE); + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUI.jaxx 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUI.jaxx 2013-08-23 15:51:18 UTC (rev 1167) @@ -32,8 +32,6 @@ jaxx.runtime.swing.BlockingLayerUI javax.swing.border.EmptyBorder - - static org.nuiton.i18n.I18n._ </import> <script><![CDATA[ @@ -81,9 +79,4 @@ </JPanel> </JPanel> - <!--JPanel id='informationPanel' constraints='BorderLayout.SOUTH' - layout='{new BorderLayout()}'> - <JLabel id='informationLabel' constraints='BorderLayout.CENTER'/> - <JButton id='okAction' constraints='BorderLayout.SOUTH' onActionPerformed='handler.closeAction()'/> - </JPanel--> </JDialog> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionUIHandler.java 2013-08-23 15:51:18 UTC (rev 1167) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.StatusMessagePanel; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -36,6 +37,9 @@ import javax.swing.JComponent; import java.awt.Container; import java.awt.Cursor; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -77,42 +81,48 @@ } }; - //------------------------------------------------------------------------// - //-- AbstractTuttiUIHandler methods --// - //------------------------------------------------------------------------// + protected ComponentListener listener = new ComponentAdapter() { + boolean moving; - protected void hideAction() { - ui.setVisible(false); - } + boolean resizing; - protected void showAction(AbstractTuttiAction action) { - ui.setTitle(_("tutti.main.title.action", - getConfig().getVersion(), - action.getActionDescription())); - ui.getGlobalActionLabel().setText( - _("tutti.message.action.running", - action.getActionDescription())); - ui.pack(); + @Override + public void componentMoved(ComponentEvent e) { - MainUI mainUI = getContext().getMainUI(); - if (mainUI != null) { - Container component = mainUI.getBody(); - int width = component == null ? 0 : component.getWidth(); - int height = component == null ? 0 : component.getHeight(); - int x; - int y; - if (height == 0) { - x = mainUI.getX() + 5; - y = mainUI.getY() + 20; - } else { - x = mainUI.getX() + (mainUI.getWidth() - width); - y = mainUI.getY() + (mainUI.getHeight() - height); + MainUI mainUI = (MainUI) e.getSource(); + + if (!moving && mainUI.isShowing()) { + + moving = true; + try { + setLocation(mainUI); + } finally { + moving = false; + } } - ui.setLocation(x, y); } - ui.setVisible(true); - } + @Override + public void componentResized(ComponentEvent e) { + + MainUI mainUI = (MainUI) e.getSource(); + + if (!resizing && mainUI.isShowing()) { + + resizing = true; + try { + setSize(mainUI); + } finally { + resizing = false; + } + } + } + }; + + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// + @Override public void beforeInitUI() { TuttiActionUIModel model = new TuttiActionUIModel(); @@ -159,12 +169,10 @@ if (newValue == null) { // remove progression model -// ui.getGlobalProgressBar().setVisible(true); ui.getTaskPanel().setVisible(false); } else { // use progression model -// ui.getGlobalProgressBar().setVisible(false); ui.getTaskPanel().setVisible(true); newValue.addPropertyChangeListener(progressionListener); @@ -199,4 +207,65 @@ return null; } + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected void hideAction() { + ui.setVisible(false); + } + + protected void showAction(AbstractTuttiAction action) { + ui.setTitle(_("tutti.main.title.action", + getConfig().getVersion(), + action.getActionDescription())); + ui.getGlobalActionLabel().setText( + _("tutti.message.action.running", + action.getActionDescription())); + ui.pack(); + + MainUI mainUI = getContext().getMainUI(); + if (mainUI != null) { + mainUI.addComponentListener(listener); + + setLocation(mainUI); + setSize(mainUI); + } + try { + ui.setVisible(true); + } finally { + if (mainUI != null) { + mainUI.removeComponentListener(listener); + } + } + } + + protected void setLocation(MainUI mainUI) { + Container component = mainUI.getBody(); + StatusMessagePanel status = mainUI.getStatus(); + int width = component == null ? 0 : component.getWidth(); + int height = component == null ? 0 : component.getHeight() + status.getHeight(); + + int x; + int y; + if (height == 0) { + x = mainUI.getX() + 5; + y = mainUI.getY() + 15; + } else { + x = mainUI.getX() + (mainUI.getWidth() - width); + y = mainUI.getY() + (mainUI.getHeight() - height); + } + ui.setLocation(x, y); + } + + protected void setSize(MainUI mainUI) { + Container component = mainUI.getBody(); + int width = component == null ? 0 : component.getWidth(); + + ui.pack(); + + if (width != 0 && ui.getWidth() < width) { + ui.setSize(width, ui.getHeight()); + } + } } Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-08-23 15:51:18 UTC (rev 1167) @@ -241,8 +241,12 @@ tutti.createSpeciesMelag.message= tutti.createSpeciesMelag.title= tutti.dbMabager.title= +tutti.dbManager.action.chooseDbBackupFile= tutti.dbManager.action.chooseDbExportFile= tutti.dbManager.action.chooseDbFile= +tutti.dbManager.action.closeDb= +tutti.dbManager.action.closeDb.mnemonic= +tutti.dbManager.action.closeDb.tip= tutti.dbManager.action.exportAndCleanDb= tutti.dbManager.action.exportAndCleanDb.mnemonic= tutti.dbManager.action.exportAndCleanDb.tip= @@ -250,25 +254,44 @@ tutti.dbManager.action.exportDb.mnemonic= tutti.dbManager.action.exportDb.tip= tutti.dbManager.action.importDb= +tutti.dbManager.action.importDb.backup.db= tutti.dbManager.action.importDb.mnemonic= tutti.dbManager.action.importDb.tip= +tutti.dbManager.action.importdb.backup.db= +tutti.dbManager.action.importdb.couldNotOpen= +tutti.dbManager.action.importdb.no.backup.db.choosen= +tutti.dbManager.action.importdb.no.import.file.choosen= tutti.dbManager.action.installDb= +tutti.dbManager.action.installDb.backup.db= tutti.dbManager.action.installDb.mnemonic= +tutti.dbManager.action.installDb.no.backup.db.choosen= tutti.dbManager.action.installDb.tip= +tutti.dbManager.action.openDb= tutti.dbManager.action.openDb.couldNotOpen= +tutti.dbManager.action.openDb.mnemonic= tutti.dbManager.action.openDb.tip= +tutti.dbManager.action.reinstallDb= +tutti.dbManager.action.reinstallDb.mnemonic= +tutti.dbManager.action.reinstallDb.tip= tutti.dbManager.action.upgradeDb= tutti.dbManager.action.upgradeDb.check= tutti.dbManager.action.upgradeDb.mnemonic= +tutti.dbManager.action.upgradeDb.no.backup.db.choosen= tutti.dbManager.action.upgradeDb.opening= tutti.dbManager.action.upgradeDb.reloading= tutti.dbManager.action.upgradeDb.schema.not.update.message= tutti.dbManager.action.upgradeDb.schema.to.update.message= +tutti.dbManager.action.upgradeDb.schema.to.update.message.help= +tutti.dbManager.action.upgradeDb.schema.too.high= +tutti.dbManager.action.upgradeDb.schema.too.high.help= +tutti.dbManager.action.upgradeDb.schema.version.not.found= tutti.dbManager.action.upgradeDb.tip= tutti.dbManager.action.upgradeDb.upToDate= tutti.dbManager.info.db.loaded= tutti.dbManager.info.no.db.exist= tutti.dbManager.info.no.db.loaded= +tutti.dbManager.title.backup.db= +tutti.dbManager.title.choose.dbBackupFile= tutti.dbManager.title.choose.dbExportFile= tutti.dbManager.title.choose.dbImportFile= tutti.dbManager.title.schema.toupdate= @@ -964,6 +987,9 @@ tutti.exportDb.createArchive= tutti.exportDb.openDb= tutti.exportDb.reloadApplication= +tutti.exportDb.step.closeDb= +tutti.exportDb.step.createArchive= +tutti.exportDb.step.openDb= tutti.exportProgram.action.success= tutti.exportProtocol.action.success= tutti.fishingOperations.action.deleteFishingOperation.mnemonic= @@ -987,9 +1013,12 @@ tutti.flash.info.caractristic.exported.from.protocol= tutti.flash.info.cruiseCreated= tutti.flash.info.cruiseSaved= +tutti.flash.info.db.closed= tutti.flash.info.db.exported= tutti.flash.info.db.exported.and.clean= tutti.flash.info.db.imported= +tutti.flash.info.db.imported.but.closed= +tutti.flash.info.db.not.opened= tutti.flash.info.db.opened= tutti.flash.info.db.schema.updated= tutti.flash.info.db.schema.updating= @@ -1016,6 +1045,13 @@ tutti.i18n.deleteCache.error= tutti.i18n.mkDir.error= tutti.importDb.openDb= +tutti.importDb.step.backupDb= +tutti.importDb.step.check.dbContext= +tutti.importDb.step.checkSchemaVersion= +tutti.importDb.step.closeDb= +tutti.importDb.step.openDb= +tutti.importDb.step.unzipArchive= +tutti.importDb.step.will.migrateSchema= tutti.importDb.unzipArchive= tutti.importProtocol.action.success= tutti.importPupitri.carrouselFile.extension= @@ -1027,6 +1063,7 @@ tutti.importPupitri.title= tutti.importPupitri.trunkFile.extension= tutti.importPupitri.trunkFile.extension.description= +tutti.installDb.step.backupDb= tutti.label.tab.accidental= tutti.label.tab.benthos= tutti.label.tab.catches= @@ -1177,6 +1214,10 @@ tutti.multiPostImportLog.title= tutti.multiPostImportLog.totalSortedWeight= tutti.multiPostImportLog.totalWeight= +tutti.openDb.step.check.dbContext= +tutti.openDb.step.checkSchemaVersion= +tutti.openDb.step.open= +tutti.openDb.step.will.migrateSchema= tutti.option.cancel= tutti.option.cleanAndClone= tutti.option.cleanAndEdit= @@ -1359,3 +1400,4 @@ tutti.vesselUseFeatureTable.table.header.key= tutti.vesselUseFeatureTable.table.header.value= tutti.vesselUseFeatureTable.title= +{handler.getInstallButtonMnemonic(model.isDbExist())}= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-08-23 14:18:23 UTC (rev 1166) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-08-23 15:51:18 UTC (rev 1167) @@ -232,35 +232,57 @@ tutti.createSpeciesMelag.message=Combien pesait le MELAG (mélange) (kg) ? tutti.createSpeciesMelag.title=Poids du MELAG (mélange) (kg) tutti.dbMabager.title=Gérer les bases de données +tutti.dbManager.action.chooseDbBackupFile=Sauvegarder la base de données tutti.dbManager.action.chooseDbExportFile=Exporter la base de données tutti.dbManager.action.chooseDbFile=Choisir la base à importer -tutti.dbManager.action.exportAndCleanDb=Exporter et supprimer +tutti.dbManager.action.closeDb=Fermer la base +tutti.dbManager.action.closeDb.mnemonic=F +tutti.dbManager.action.closeDb.tip=Fermer la base en cours d'utilisation tutti.dbManager.action.exportAndCleanDb.mnemonic=s tutti.dbManager.action.exportAndCleanDb.tip=Exporter la base de données au format zip puis supprimer les fichiers de l'application tutti.dbManager.action.exportDb=Exporter tutti.dbManager.action.exportDb.mnemonic=x tutti.dbManager.action.exportDb.tip=Exporter la base de données au format zip tutti.dbManager.action.importDb=Importer une base +tutti.dbManager.action.importDb.backup.db= tutti.dbManager.action.importDb.mnemonic=i tutti.dbManager.action.importDb.tip=Importer la base de données au format zip +tutti.dbManager.action.importdb.backup.db=Avant de pouvoir importer une nouvelle base, vous devez sauvegarder la base courante. +tutti.dbManager.action.importdb.couldNotOpen= +tutti.dbManager.action.importdb.no.backup.db.choosen=Import annulé (vous n'avez pas choisi de fichier de sauvegarde). +tutti.dbManager.action.importdb.no.import.file.choosen=Import annulé (vous n'avez pas choisi de fichier d'import). tutti.dbManager.action.installDb=Installer +tutti.dbManager.action.installDb.backup.db=Avant de pouvoir réinstaller une nouvelle base, vous devez sauvegarder la base courante. tutti.dbManager.action.installDb.mnemonic=n +tutti.dbManager.action.installDb.no.backup.db.choosen=Réinstallation annulée (vous n'avez pas choisi de fichier de sauvegarde). tutti.dbManager.action.installDb.tip=Télécharger puis installer la base de données +tutti.dbManager.action.openDb=Ouvrir la base tutti.dbManager.action.openDb.couldNotOpen=Impossible d'ouvrir la base, elle est peut-être déjà utilisée par une autre application (ou une autre instance de l'application) +tutti.dbManager.action.openDb.mnemonic=O tutti.dbManager.action.openDb.tip=Ouvrir la base de données +tutti.dbManager.action.reinstallDb=Réinstaller +tutti.dbManager.action.reinstallDb.mnemonic=n +tutti.dbManager.action.reinstallDb.tip=Télécharger puis ré-installer la base de données tutti.dbManager.action.removeBatch.confirm.message= tutti.dbManager.action.upgradeDb=Mettre à jour les référentiels tutti.dbManager.action.upgradeDb.check=Recherche des mises à jour de la base tutti.dbManager.action.upgradeDb.mnemonic=V +tutti.dbManager.action.upgradeDb.no.backup.db.choosen=La base ne sera pas migrée (vous avez annulé la sauvegarde avant migration). tutti.dbManager.action.upgradeDb.opening=Ouverture de la base de données tutti.dbManager.action.upgradeDb.reloading=Rechargement de la base de données tutti.dbManager.action.upgradeDb.schema.not.update.message=<html><body>Votre base de données est en version %s et le bon fonctionnement de l'application est garanti sur une version plus ancienne (%s).<br/>Il se peut que l'application ne fonctionne pas correctement avec cette version de la base.<hr/>Nous vous recommandons \:<ul><li>De vérifier si une nouvelle version de l'application n'est pas disponible</li><li>De vous renseigner auprès des administrateurs de l'application</li></ul></body></html> -tutti.dbManager.action.upgradeDb.schema.to.update.message=<html><body>Votre base de données est en version %s, et le bon fonctionnement de l'application est garanti sur une version plus récente (%s).<hr/>Une sauvegarde de la base va être effectuée avant la migration.</body></html> -tutti.dbManager.action.upgradeDb.tip= +tutti.dbManager.action.upgradeDb.schema.to.update.message=Votre base de données est en version %s, et le bon fonctionnement de l'application est garanti sur une version plus récente (%s). +tutti.dbManager.action.upgradeDb.schema.to.update.message.help=Que voulez-vous faire ?<ul><li><strong>Oui</strong> pour migrer la base</li><li><strong>Annuler</strong> pour ne pas migrer et ne pas charger la base (la base ne sera alors pas utilisable dans cette version du logiciel).</li></ul> +tutti.dbManager.action.upgradeDb.schema.too.high=Votre base de données est en version %s et le bon fonctionnement de l'application est garanti sur une version plus ancienne (%s).<br/>Il se peut que l'application ne fonctionne pas correctement avec cette version de la base.<br/>Nous vous recommandons \:<ul><li>De vérifier si une nouvelle version de l'application n'est pas disponible</li><li>De vous renseigner auprès des administrateurs de l'application</li></ul> +tutti.dbManager.action.upgradeDb.schema.too.high.help=Souhaitez-vous poursuivre l'import de la base de données ?<ul><li><strong>Oui</strong> pour charger la base en version plus récente</li><li><strong>Annuler</strong> pour ne pas charger la base</li></ul> +tutti.dbManager.action.upgradeDb.schema.version.not.found=L'application n'a pas pu déterminer la version de la base de données à importer. L'import ne peut pas être réalisé, veuillez contacter les administrateurs de l'application. +tutti.dbManager.action.upgradeDb.tip=Mettre à jour les référentiels tutti.dbManager.action.upgradeDb.upToDate=Aucune mise à jour de base détectée -tutti.dbManager.info.db.loaded=Tutti est connecté à une base de données<hr/>Url de connexion \: <strong>%s</strong> -tutti.dbManager.info.no.db.exist=Aucune base détectée, vous pouvez installer la dernière disponible sur le réseau ou bien en importer une -tutti.dbManager.info.no.db.loaded=L'application possède une base (<strong>%s</strong>).<br/>Elle n'a pas pu être ouverte, elle doit être probablement utilisée par une autre application.<hr/>Quitter les applications l'utilisant puis redémarrer +tutti.dbManager.info.db.loaded=Tutti est connecté à une base de données<hr/>Caractéristiques de cette base \:<ul><li>Url de connexion \: <strong>%s</strong></li><li>Version\: <strong>%s</strong></li></ul> +tutti.dbManager.info.no.db.exist=Aucune base détectée.<hr/>Vous pouvez installer la dernière disponible sur le réseau via l'action <strong>installer</strong>; ou bien en importer une via l'action <strong>importer</strong>. +tutti.dbManager.info.no.db.loaded=Une base a été détectée (<strong>%s</strong>).<hr/>La base n'est pas ouverte, vous pouvez l'ouvrir via l'action <strong>Ouvrir</strong>.<br/>Si l'ouverture ne fonctionne pas; veuillez bien prendre soin de quitter les applications qui pourraient utiliser cette base. +tutti.dbManager.title.backup.db=Sauvegarde de la base +tutti.dbManager.title.choose.dbBackupFile=Sauvegarder la base de données tutti.dbManager.title.choose.dbExportFile=Exporter la base de données tutti.dbManager.title.choose.dbImportFile=Importer la base de données tutti.dbManager.title.schema.toupdate=Mise à jour de la base détéctée @@ -949,10 +971,12 @@ tutti.exportCruiseForSumatra.action.success=Les captures ont correctement été exporté dans le fichier %s tutti.exportCruiseForSumatra.choose.exportFile.default=sumatra_%s_%s tutti.exportCruiseForSumatra.title.choose.exportFile=Exporter les captures de la campagne -tutti.exportDb.closeDb=Fermeture de la base courante -tutti.exportDb.createArchive=Création de l'archive %s -tutti.exportDb.openDb=Réouverture de la base courante +tutti.exportDb.closeDb= +tutti.exportDb.createArchive= tutti.exportDb.reloadApplication=Redémarrage de l'application +tutti.exportDb.step.closeDb=Fermeture de la base courante +tutti.exportDb.step.createArchive=Création de l'archive %s +tutti.exportDb.step.openDb=Réouverture de la base courante tutti.exportProgram.action.success=La série de campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>. tutti.exportProtocol.action.success=Protocole [%1s] exporté dans le fichier <strong>%2s</strong>. tutti.fishingOperations.action.deleteFishingOperation.mnemonic=S @@ -976,12 +1000,14 @@ tutti.flash.info.caractristic.exported.from.protocol=Caractéristiques du protocole exportées dans le fichier <strong>%s</strong>. tutti.flash.info.cruiseCreated=La campagne <strong>%s</strong> a été créée. tutti.flash.info.cruiseSaved=La campagne <strong>%s</strong> a été enregistrée. +tutti.flash.info.db.closed=La base <strong>%s</strong> est fermée. tutti.flash.info.db.exported=Base exportée dans l'archive <strong>%s</strong>. tutti.flash.info.db.exported.and.clean=Base exportée dans l'archive <strong>%s</strong>. tutti.flash.info.db.imported=La base de données <strong>%s</strong> est importée. +tutti.flash.info.db.imported.but.closed=La base de données <strong>%s</strong> est importée mais n'a pas été ouverte. +tutti.flash.info.db.not.opened=La base <strong>%s</strong> n'a pas été ouverte. tutti.flash.info.db.opened=La base de données <strong>%s</strong> est ouverte. tutti.flash.info.db.schema.updated=Le schéma de la base (version %s) a été mise à jour vers la version %s -tutti.flash.info.db.schema.updating=Démarrage de la mise à jour du schéma de la base depuis la version %s vers la version %s tutti.flash.info.programCreated=La série de campagne <strong>%s</strong> a été créée. tutti.flash.info.programSaved=La série de campagne <strong>%s</strong> a été enregistrée. tutti.flash.info.protocolCreated=Le protocole <strong>%s</strong> a été créé. @@ -1004,8 +1030,13 @@ tutti.help.mkDir.error=Erreur à la création du dossier d'aide tutti.i18n.deleteCache.error=Erreur à la suppression du cache de l'internationalisation tutti.i18n.mkDir.error=Erreur à la création du dossier d'internationalisation -tutti.importDb.openDb=Ouverture de la base de données -tutti.importDb.unzipArchive=Décompression de l'archive +tutti.importDb.step.backupDb=Sauvegarde de la base dans l'archive %s +tutti.importDb.step.check.dbContext=Vérification du context de saisie +tutti.importDb.step.checkSchemaVersion=Vérification de la version de la base +tutti.importDb.step.closeDb=Fermeture de la base +tutti.importDb.step.openDb=Ouverture de la base de données %s +tutti.importDb.step.unzipArchive=Décompression de l'archive +tutti.importDb.step.will.migrateSchema=Démarrage de la mise à jour du schéma de la base depuis la version %s vers la version %s tutti.importProtocol.action.success=Protocole [%s] lu depuis le fichier. tutti.importPupitri.carrouselFile.extension=car tutti.importPupitri.carrouselFile.extension.description=Fichier du carrousel (.car) @@ -1016,6 +1047,7 @@ tutti.importPupitri.title=Import Pupitri tutti.importPupitri.trunkFile.extension=tnk tutti.importPupitri.trunkFile.extension.description=Fichier du trémie (.tnk) +tutti.installDb.step.backupDb=Sauvegarde de la base dans l'archive %s tutti.label.tab.accidental=Captures accidentelles tutti.label.tab.benthos=Benthos tutti.label.tab.catches=Captures @@ -1156,7 +1188,7 @@ tutti.manageTemporaryReferential.title.choose.importTemporaryPersonFile=Importer un référentiel Personne tutti.manageTemporaryReferential.title.choose.importTemporarySpeciesFile=Importer un référentiel Espèce tutti.manageTemporaryReferential.title.choose.importTemporaryVesselFile=Importer un référentiel Navire -tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'exécution...<hr/></html> +tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'exécution...</html> tutti.multiPostImportLog.close=Fermer tutti.multiPostImportLog.close.mnemonic=F tutti.multiPostImportLog.close.tip=Fermer la popup @@ -1166,6 +1198,10 @@ tutti.multiPostImportLog.title=Lots non importés tutti.multiPostImportLog.totalSortedWeight=Poids total trié \: %s kg tutti.multiPostImportLog.totalWeight=Poids total \: %s kg +tutti.openDb.step.check.dbContext=Vérification du context de saisie +tutti.openDb.step.checkSchemaVersion=Vérification de la compatibilité de la base +tutti.openDb.step.open=Ouverture de la base %s +tutti.openDb.step.will.migrateSchema=Démarrage de la mise à jour du schéma de la base depuis la version %s vers la version %s tutti.option.cancel=Annuler tutti.option.cleanAndClone=Nettoyer et Cloner tutti.option.cleanAndEdit=Nettoyer et Éditer @@ -1341,3 +1377,4 @@ tutti.vesselUseFeatureTable.table.header.key=Caractéristique tutti.vesselUseFeatureTable.table.header.value=Valeur tutti.vesselUseFeatureTable.title=Autres paramètres +{handler.getInstallButtonMnemonic(model.isDbExist())}=
participants (1)
-
tchemit@users.forge.codelutin.com