branch feature/6417 updated (4d531da -> cedb299)
This is an automated email from the git hooks/post-receive script. New change to branch feature/6417 in repository tutti. See http://git.codelutin.com/tutti.git from 4d531da passage en lazy loading des services de persistences new 980ce07 suppression de test d'adagio dans tutti new cedb299 introduction d'un context de preparation à la mise à jour du schema + renommage de getter dans TechnicalPersistenceService The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit cedb29990dda8fc9a371a902fafb8788c840624b Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jan 12 22:10:54 2015 +0100 introduction d'un context de preparation à la mise à jour du schema + renommage de getter dans TechnicalPersistenceService commit 980ce0739e0ff547d6b66d6b58b7df7b16db71cd Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jan 12 21:55:23 2015 +0100 suppression de test d'adagio dans tutti Summary of changes: .../tutti/persistence/TuttiPersistenceImpl.java | 14 +- .../persistence/TuttiPersistenceNoDbImpl.java | 10 +- .../service/TechnicalPersistenceService.java | 16 +- .../service/TechnicalPersistenceServiceImpl.java | 14 +- .../service/UpdateSchemaContextSupport.java | 87 +++++++++ .../tutti/persistence/test/DatabaseFixtures.java | 10 - .../persistence/TuttiPersistenceWriteTest.java | 68 ------- .../ifremer/tutti/service/PersistenceService.java | 14 +- .../fr/ifremer/tutti/service/UpdateSchemaTest.java | 69 ------- .../tutti/ui/swing/action/ImportDbAction.java | 184 +++++++++--------- .../tutti/ui/swing/action/OpenDbAction.java | 206 +++++++++++---------- .../ui/swing/content/db/DbManagerUIHandler.java | 2 +- 12 files changed, 344 insertions(+), 350 deletions(-) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/UpdateSchemaContextSupport.java delete mode 100644 tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java delete mode 100644 tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/6417 in repository tutti. See http://git.codelutin.com/tutti.git commit 980ce0739e0ff547d6b66d6b58b7df7b16db71cd Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jan 12 21:55:23 2015 +0100 suppression de test d'adagio dans tutti --- .../persistence/TuttiPersistenceWriteTest.java | 68 --------------------- .../fr/ifremer/tutti/service/UpdateSchemaTest.java | 69 ---------------------- 2 files changed, 137 deletions(-) diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java deleted file mode 100644 index 9997537..0000000 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package fr.ifremer.tutti.persistence; - -/* - * #%L - * Tutti :: Persistence - * %% - * Copyright (C) 2012 - 2014 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.service.TuttiPersistenceServiceLocator; -import fr.ifremer.tutti.persistence.test.DatabaseResource; -import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Ignore; -import org.junit.Test; -import org.nuiton.util.version.Version; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 2.4 - */ -@Ignore -public class TuttiPersistenceWriteTest { - - @ClassRule - public static final DatabaseResource dbResource = - DatabaseResource.writeDb("db_3.2.1.01"); - - protected TuttiPersistence persistence; - - @Before - public void setUp() throws Exception { - persistence = TuttiPersistenceServiceLocator.getPersistenceService(); - } - - @Test - public void updateSchema() { - - dbResource.setDestroyResources(false); - - Version dbVersion = persistence.getDbVersion(); - Assert.assertEquals(dbResource.getFixtures().currentAdagioSchemaVersion(), dbVersion); - - Version applicationVersion = persistence.getApplicationVersion(); - Assert.assertEquals(dbResource.getFixtures().lastAdagioSchemaVersion(), applicationVersion); - - persistence.updateSchema(); - - Version newDbVersion = persistence.getDbVersion(); - Assert.assertEquals(applicationVersion, newDbVersion); - } -} diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java deleted file mode 100644 index 4bdc464..0000000 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package fr.ifremer.tutti.service; - -/* - * #%L - * Tutti :: Service - * %% - * Copyright (C) 2012 - 2014 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.TuttiPersistence; -import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; -import fr.ifremer.tutti.persistence.test.DatabaseResource; -import org.junit.Assert; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; -import org.nuiton.util.version.Version; - -/** - * Pour mettre à jour le schéma d'une base de test. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.4 - */ -public class UpdateSchemaTest { - - @ClassRule - public static final DatabaseResource dbResource = - DatabaseResource.writeDb("dbCGFS_old"); - - protected TuttiPersistence persistence; - - @Before - public void setUp() throws Exception { - persistence = TuttiPersistenceServiceLocator.getPersistenceService(); - } - - @Test - public void updateSchema() { - - dbResource.setDestroyResources(false); - - Version dbVersion = persistence.getDbVersion(); - Assert.assertEquals(dbResource.getFixtures().currentAdagioSchemaVersion(), dbVersion); - - Version applicationVersion = persistence.getApplicationVersion(); - Assert.assertEquals(dbResource.getFixtures().lastAdagioSchemaVersion(), applicationVersion); - - persistence.updateSchema(); - - Version newDbVersion = persistence.getDbVersion(); - Assert.assertEquals(applicationVersion, newDbVersion); - } -} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/6417 in repository tutti. See http://git.codelutin.com/tutti.git commit cedb29990dda8fc9a371a902fafb8788c840624b Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jan 12 22:10:54 2015 +0100 introduction d'un context de preparation à la mise à jour du schema + renommage de getter dans TechnicalPersistenceService --- .../tutti/persistence/TuttiPersistenceImpl.java | 14 +- .../persistence/TuttiPersistenceNoDbImpl.java | 10 +- .../service/TechnicalPersistenceService.java | 16 +- .../service/TechnicalPersistenceServiceImpl.java | 14 +- .../service/UpdateSchemaContextSupport.java | 87 +++++++++ .../tutti/persistence/test/DatabaseFixtures.java | 10 - .../ifremer/tutti/service/PersistenceService.java | 14 +- .../tutti/ui/swing/action/ImportDbAction.java | 184 +++++++++--------- .../tutti/ui/swing/action/OpenDbAction.java | 206 +++++++++++---------- .../ui/swing/content/db/DbManagerUIHandler.java | 2 +- 10 files changed, 344 insertions(+), 213 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index 471f592..3195d44 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -66,6 +66,7 @@ import fr.ifremer.tutti.persistence.service.ProtocolPersistenceService; import fr.ifremer.tutti.persistence.service.SpeciesBatchPersistenceService; import fr.ifremer.tutti.persistence.service.TechnicalPersistenceService; import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; +import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import fr.ifremer.tutti.persistence.service.referential.CaracteristicPersistenceService; import fr.ifremer.tutti.persistence.service.referential.GearPersistenceService; import fr.ifremer.tutti.persistence.service.referential.LocationPersistenceService; @@ -175,13 +176,18 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override - public Version getDbVersion() { - return getTechnicalPersistenceService().getDbVersion(); + public <U extends UpdateSchemaContextSupport> void prepareUpdateSchemaContext(U context) { + getTechnicalPersistenceService().prepareUpdateSchemaContext(context); } @Override - public Version getApplicationVersion() { - return getTechnicalPersistenceService().getApplicationVersion(); + public Version getSchemaVersion() { + return getTechnicalPersistenceService().getSchemaVersion(); + } + + @Override + public Version getSchemaVersionIfUpdate() { + return getTechnicalPersistenceService().getSchemaVersionIfUpdate(); } @Override diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index 775b3a4..0e21672 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -49,6 +49,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import org.nuiton.util.version.Version; import java.io.File; @@ -81,12 +82,17 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public Version getDbVersion() { + public <U extends UpdateSchemaContextSupport> void prepareUpdateSchemaContext(U context) { throw notImplemented(); } @Override - public Version getApplicationVersion() { + public Version getSchemaVersion() { + throw notImplemented(); + } + + @Override + public Version getSchemaVersionIfUpdate() { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceService.java index 4202a42..341db16 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceService.java @@ -63,9 +63,21 @@ public interface TechnicalPersistenceService extends TuttiPersistenceServiceImpl @Transactional(readOnly = false) <V> V invoke(Callable<V> call); - Version getDbVersion(); + Version getSchemaVersion(); - Version getApplicationVersion(); + Version getSchemaVersionIfUpdate(); + + /** + * To init the update schema context. + * + * We are initialized it with current schema version, next schema version and use the call back if needed to + * interact with user. + * + * @param <U> type of context + * @param context context to fill. + * @since 3.12 + */ + <U extends UpdateSchemaContextSupport> void prepareUpdateSchemaContext(U context); @Transactional(readOnly = false) void updateSchema(); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceServiceImpl.java index c817a91..d0989ee 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/TechnicalPersistenceServiceImpl.java @@ -76,12 +76,7 @@ public class TechnicalPersistenceServiceImpl extends AbstractPersistenceService } @Override - public Version getDbVersion() { - Version version = getDbVersion0(); - return version; - } - - private Version getDbVersion0() { + public Version getSchemaVersion() { Version version; try { version = databaseSchemaDao.getSchemaVersion(); @@ -95,12 +90,17 @@ public class TechnicalPersistenceServiceImpl extends AbstractPersistenceService } @Override - public Version getApplicationVersion() { + public Version getSchemaVersionIfUpdate() { Version version = databaseSchemaDao.getSchemaVersionIfUpdate(); return Versions.valueOf(version.toString()); } @Override + public <U extends UpdateSchemaContextSupport> void prepareUpdateSchemaContext(U context) { + context.init(getSchemaVersion(), getSchemaVersionIfUpdate()); + } + + @Override public void updateSchema() { try { databaseSchemaDao.updateSchema(); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/UpdateSchemaContextSupport.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/UpdateSchemaContextSupport.java new file mode 100644 index 0000000..93f486b --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/UpdateSchemaContextSupport.java @@ -0,0 +1,87 @@ +package fr.ifremer.tutti.persistence.service; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.version.Version; + +/** + * Created on 1/12/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.12 + */ +public abstract class UpdateSchemaContextSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(UpdateSchemaContextSupport.class); + + private Version schemaVersion; + + private Version schemaVersionIfUpdate; + + private boolean willUpdate; + + public Version getSchemaVersion() { + return schemaVersion; + } + + public Version getSchemaVersionIfUpdate() { + return schemaVersionIfUpdate; + } + + public boolean isNeedUpdate() { + return schemaVersion.compareTo(schemaVersionIfUpdate) < 0; + } + + public boolean isSchemaVersionTooHigh() { + return schemaVersion.compareTo(schemaVersionIfUpdate) > 0; + } + + public boolean isWillUpdate() { + return willUpdate; + } + + protected abstract boolean askUserToMigrate(Version schemaVersion, Version schemaVersionIfUpdate); + + public void init(Version schemaVersion, Version schemaVersionIfUpdate) { + + this.schemaVersion = schemaVersion; + + if (log.isInfoEnabled()) { + log.info(String.format("Detected schema version: %s", schemaVersion)); + } + + this.schemaVersionIfUpdate = schemaVersionIfUpdate; + + if (log.isInfoEnabled()) { + log.info(String.format("Detected schema version if update: %s", schemaVersionIfUpdate)); + } + + if (isSchemaVersionTooHigh()) { + + if (log.isInfoEnabled()) { + log.info(String.format("Schema version %s is higher than incoming schema version %s, can't update!", schemaVersion, schemaVersionIfUpdate)); + } + + } else if (isNeedUpdate()) { + + if (log.isInfoEnabled()) { + log.info(String.format("Schema version %s is smaller than incoming schema version %s, ask to update", schemaVersion, schemaVersionIfUpdate)); + } + willUpdate = askUserToMigrate(schemaVersion, schemaVersionIfUpdate); + + if (log.isInfoEnabled()) { + log.info("Should we update? " + willUpdate); + } + + } else { + + if (log.isInfoEnabled()) { + log.info(String.format("Schema version %s is up-to-date, no need to update.", schemaVersion)); + } + + } + + } + +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java index 954515d..94fde6c 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java @@ -57,8 +57,6 @@ import fr.ifremer.tutti.persistence.service.referential.LocationPersistenceServi import fr.ifremer.tutti.persistence.service.referential.PersonPersistenceService; import fr.ifremer.tutti.persistence.service.referential.SpeciesPersistenceService; import org.junit.Assert; -import org.nuiton.util.version.Version; -import org.nuiton.util.version.Versions; import java.io.Serializable; import java.util.Calendar; @@ -74,14 +72,6 @@ import java.util.List; */ public class DatabaseFixtures { - public Version lastAdagioSchemaVersion() { - return Versions.valueOf("3.5.0"); - } - - public Version currentAdagioSchemaVersion() { - return Versions.valueOf("3.2.1.01"); - } - public String programCode() { // campaign CGFS return "CAM-CGFS"; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index a44144f..a7ce38b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -66,6 +66,7 @@ import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.entities.referential.Vessels; import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; +import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -247,13 +248,18 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override - public Version getDbVersion() { - return driver.getDbVersion(); + public <U extends UpdateSchemaContextSupport> void prepareUpdateSchemaContext(U context) { + driver.prepareUpdateSchemaContext(context); } @Override - public Version getApplicationVersion() { - return driver.getApplicationVersion(); + public Version getSchemaVersion() { + return driver.getSchemaVersion(); + } + + @Override + public Version getSchemaVersionIfUpdate() { + return driver.getSchemaVersionIfUpdate(); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportDbAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportDbAction.java index 83d61ef..83dd241 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportDbAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportDbAction.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.action; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; @@ -53,16 +54,10 @@ public class ImportDbAction extends AbstractMainUITuttiAction { protected String jdbcUrl; - protected boolean updateSchema; - - protected boolean closeDb; - - protected Version dbVersion; - - protected Version applicationVersion; - protected PersistenceService.ImportStructureType importStructureType; + private UpdateSchemaContext updateSchemaContext; + public ImportDbAction(MainUIHandler handler) { super(handler, true); setActionDescription(t("tutti.dbManager.action.importDb.tip")); @@ -72,13 +67,88 @@ public class ImportDbAction extends AbstractMainUITuttiAction { this.importFile = importFile; } + + public class UpdateSchemaContext extends UpdateSchemaContextSupport { + + private boolean closeDb; + + @Override + public void init(Version schemaVersion, Version schemaVersionIfUpdate) { + + super.init(schemaVersion, schemaVersionIfUpdate); + + if (isSchemaVersionTooHigh()) { + + // database schema version is higher than application one + String message = t("tutti.dbManager.action.upgradeDb.schema.too.high", schemaVersion, schemaVersionIfUpdate); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + t("tutti.dbManager.action.upgradeDb.schema.too.high.help")); + int i = JOptionPane.showConfirmDialog( + handler.getTopestUI(), + htmlMessage, + t("tutti.dbManager.title.schema.toupdate"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + boolean continueAction = i == JOptionPane.OK_OPTION; + + if (!continueAction) { + + //close db + closeDb = true; + } + } + } + + @Override + protected boolean askUserToMigrate(Version schemaVersion, Version schemaVersionIfUpdate) { + + // database schema need to migrate + // ask user to migrate or not (if not will close db) + + String message = t("tutti.dbManager.action.upgradeDb.schema.to.update.message", schemaVersion, schemaVersionIfUpdate); + + String htmlMessage = String.format( + AbstractTuttiUIHandler.CONFIRMATION_FORMAT, + message, + t("tutti.dbManager.action.upgradeDb.schema.to.update.message.help")); + int i = JOptionPane.showConfirmDialog( + handler.getTopestUI(), + htmlMessage, + t("tutti.dbManager.title.schema.toupdate"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + boolean continueAction = i == JOptionPane.OK_OPTION; + + if (continueAction) { + + // will migrate + continueAction = true; + } else { + + //close db + closeDb = true; + } + + + return continueAction; + + } + + public boolean isCloseDb() { + return closeDb; + } + + } + @Override public boolean prepareAction() throws Exception { importStructureType = null; jdbcUrl = null; - dbVersion = applicationVersion = null; - closeDb = updateSchema = false; + updateSchemaContext = null; boolean doAction = super.prepareAction(); @@ -171,88 +241,24 @@ public class ImportDbAction extends AbstractMainUITuttiAction { progressionModel.increments(t("tutti.importDb.step.checkSchemaVersion")); - TuttiPersistence persistenceService = - getContext().getPersistenceService(); + TuttiPersistence persistenceService = getContext().getPersistenceService(); - dbVersion = persistenceService.getDbVersion(); + updateSchemaContext = new UpdateSchemaContext(); + persistenceService.prepareUpdateSchemaContext(updateSchemaContext); + + Version schemaVersion = updateSchemaContext.getSchemaVersion(); if (log.isInfoEnabled()) { - log.info("Detected database version: " + dbVersion); + log.info("Detected database version: " + schemaVersion); } - applicationVersion = persistenceService.getApplicationVersion(); + Version schemaVersionIfUpdate = updateSchemaContext.getSchemaVersionIfUpdate(); if (log.isInfoEnabled()) { - log.info("Detected schema application version:" + applicationVersion); + log.info("Detected schema application version:" + schemaVersionIfUpdate); } - if (dbVersion == null) { - - // no database version filled (can not migrate schema) - String message = t("tutti.dbManager.action.upgradeDb.schema.version.not.found"); - displayWarningMessage(t("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 = t("tutti.dbManager.action.upgradeDb.schema.to.update.message", dbVersion, applicationVersion); - - String htmlMessage = String.format( - AbstractTuttiUIHandler.CONFIRMATION_FORMAT, - message, - t("tutti.dbManager.action.upgradeDb.schema.to.update.message.help")); - int i = JOptionPane.showConfirmDialog( - handler.getTopestUI(), - htmlMessage, - t("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 = t("tutti.dbManager.action.upgradeDb.schema.too.high", dbVersion, applicationVersion); - - String htmlMessage = String.format( - AbstractTuttiUIHandler.CONFIRMATION_FORMAT, - message, - t("tutti.dbManager.action.upgradeDb.schema.too.high.help")); - int i = JOptionPane.showConfirmDialog( - handler.getTopestUI(), - htmlMessage, - t("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) { + if (updateSchemaContext.isCloseDb()) { // ------------------------------------------------------------------ // // --- close db // @@ -264,7 +270,7 @@ public class ImportDbAction extends AbstractMainUITuttiAction { return; } - if (updateSchema) { + if (updateSchemaContext.isWillUpdate()) { // need to migrate schema progressionModel.adaptTotal(progressionModel.getTotal() + 2); @@ -273,22 +279,20 @@ public class ImportDbAction extends AbstractMainUITuttiAction { // --- update schema // // ------------------------------------------------------------------ // - String message = t("tutti.importDb.step.will.migrateSchema", - dbVersion, applicationVersion); + String message = t("tutti.importDb.step.will.migrateSchema", schemaVersion, schemaVersionIfUpdate); progressionModel.increments(message); sendMessage(message); getContext().getPersistenceService().updateSchema(); - sendMessage(t("tutti.flash.info.db.schema.updated", dbVersion, applicationVersion)); + sendMessage(t("tutti.flash.info.db.schema.updated", schemaVersion, schemaVersionIfUpdate)); } // ------------------------------------------------------------------ // // --- check db context // // ------------------------------------------------------------------ // - String message = t("tutti.importDb.step.check.dbContext", - dbVersion, applicationVersion); + String message = t("tutti.importDb.step.check.dbContext", schemaVersion, schemaVersionIfUpdate); progressionModel.increments(message); @@ -310,7 +314,7 @@ public class ImportDbAction extends AbstractMainUITuttiAction { super.postSuccessAction(); - if (closeDb) { + if (updateSchemaContext.isCloseDb()) { sendMessage(t("tutti.flash.info.db.imported.but.closed", jdbcUrl)); } else { sendMessage(t("tutti.flash.info.db.imported", jdbcUrl)); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenDbAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenDbAction.java index fed3dea..e5f003f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenDbAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenDbAction.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.action; import fr.ifremer.tutti.TuttiConfiguration; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.service.UpdateSchemaContextSupport; import fr.ifremer.tutti.ui.swing.TuttiDbUpdaterCallBack; import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; @@ -55,18 +56,10 @@ public class OpenDbAction extends AbstractChangeScreenAction { /** Logger. */ private static final Log log = LogFactory.getLog(OpenDbAction.class); - protected Version dbVersion; - - protected Version applicationVersion; - - protected File file; - - protected boolean updateSchema; + protected UpdateSchemaContext updateSchemaContext; protected boolean updateReferentiel; - protected boolean closeDb; - protected String jdbcUrl; protected ApplicationInfo updateDbVersion; @@ -85,10 +78,9 @@ public class OpenDbAction extends AbstractChangeScreenAction { boolean canContinue = super.prepareAction(); if (canContinue) { + jdbcUrl = null; - dbVersion = applicationVersion = null; - file = null; - closeDb = updateSchema = false; + updateSchemaContext = null; updateDbVersion = null; updateReferentiel &= getContext().checkUpdateDataReachable(false); @@ -102,8 +94,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { Map<String, ApplicationInfo> dbVersions = up.getVersions(getConfig().getUpdateDataUrl(), getConfig().getDataDirectory()); - updateDbVersion = - dbVersions.get(TuttiDbUpdaterCallBack.DB_UPDATE_NAME); + updateDbVersion = dbVersions.get(TuttiDbUpdaterCallBack.DB_UPDATE_NAME); if (updateDbVersion != null && updateDbVersion.newVersion != null) { @@ -127,87 +118,40 @@ public class OpenDbAction extends AbstractChangeScreenAction { return canContinue; } - @Override - public void doAction() throws Exception { - - if (log.isDebugEnabled()) { - log.debug("Will open db..."); - } - - jdbcUrl = getConfig().getJdbcUrl(); - - // at the beginning 3 steps (open db + check version + check db context) - ProgressionModel progressionModel = new ProgressionModel(); - setProgressionModel(progressionModel); - progressionModel.setTotal(3 + (updateReferentiel ? 1 : 0)); - - // ------------------------------------------------------------------ // - // --- open db // - // ------------------------------------------------------------------ // - - progressionModel.increments(t("tutti.openDb.step.open", jdbcUrl)); - try { - getContext().setDbLoaded(true); - getContext().reloadPersistenceService(); - } catch (Exception e) { - - if (log.isErrorEnabled()) { - log.error("Could not open db", e); - } - // no more db - getContext().setDbLoaded(false); - getContext().reloadPersistenceService(); - - // could not load db - throw new ApplicationBusinessException(t("tutti.dbManager.action.openDb.couldNotOpen")); - } - - // ------------------------------------------------------------------ // - // --- check schema version // - // ------------------------------------------------------------------ // - - progressionModel.increments(t("tutti.openDb.step.checkSchemaVersion")); + public class UpdateSchemaContext extends UpdateSchemaContextSupport { - TuttiPersistence persistenceService = - getContext().getPersistenceService(); + private boolean closeDb; - dbVersion = persistenceService.getDbVersion(); + private File file; - if (log.isInfoEnabled()) { - log.info("Detected database version: " + dbVersion); - } - applicationVersion = persistenceService.getApplicationVersion(); + private final File dbBackupDirectory; - if (log.isInfoEnabled()) { - log.info("Detected schema application version:" + applicationVersion); + public UpdateSchemaContext(File dbBackupDirectory) { + this.dbBackupDirectory = dbBackupDirectory; } - TuttiConfiguration config = getConfig(); - 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) { + @Override + protected boolean askUserToMigrate(Version schemaVersion, Version schemaVersionIfUpdate) { // database schema need to migrate // ask user to migrate or not (if not will close db) // ask user where to backup db - String message = t("tutti.dbManager.action.upgradeDb.schema.to.update.message", dbVersion, applicationVersion); + String message = t("tutti.dbManager.action.upgradeDb.schema.to.update.message", schemaVersion, schemaVersionIfUpdate); String htmlMessage = String.format( AbstractTuttiUIHandler.CONFIRMATION_FORMAT, message, t("tutti.dbManager.action.upgradeDb.schema.to.update.message.help")); + int i = JOptionPane.showConfirmDialog( getHandler().getTopestUI(), htmlMessage, t("tutti.dbManager.title.schema.toupdate"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + boolean continueAction = i == JOptionPane.OK_OPTION; if (continueAction) { @@ -215,7 +159,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { // ask user file where to backup db file = saveFile( - config.getDbBackupDirectory(), + dbBackupDirectory, "tutti-db-" + ExportDbAction.df.format(new Date()), "zip", t("tutti.dbManager.title.choose.dbBackupFile"), @@ -227,6 +171,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { // won't migrate db closeDb = true; + continueAction = false; displayWarningMessage( t("tutti.dbManager.title.choose.dbBackupFile"), @@ -234,7 +179,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { ); } else { - updateSchema = true; + continueAction = true; } } else { @@ -242,16 +187,99 @@ public class OpenDbAction extends AbstractChangeScreenAction { closeDb = true; } - } else { + return continueAction; - // database schema version is higher than application one - displayWarningMessage( - t("tutti.dbManager.title.schema.toupdate"), - t("tutti.dbManager.action.upgradeDb.schema.not.update.message", dbVersion, applicationVersion) - ); } - if (closeDb) { + @Override + public void init(Version schemaVersion, Version schemaVersionIfUpdate) { + + super.init(schemaVersion, schemaVersionIfUpdate); + + + if (isSchemaVersionTooHigh()) { + + // database schema version is higher than application one + displayWarningMessage( + t("tutti.dbManager.title.schema.toupdate"), + t("tutti.dbManager.action.upgradeDb.schema.not.update.message", schemaVersion, schemaVersionIfUpdate) + ); + + } + + } + + public boolean isCloseDb() { + return closeDb; + } + + public File getFile() { + return file; + } + } + + @Override + public void doAction() throws Exception { + + if (log.isDebugEnabled()) { + log.debug("Will open db..."); + } + + jdbcUrl = getConfig().getJdbcUrl(); + + // at the beginning 3 steps (open db + check version + check db context) + ProgressionModel progressionModel = new ProgressionModel(); + setProgressionModel(progressionModel); + progressionModel.setTotal(3 + (updateReferentiel ? 1 : 0)); + + // ------------------------------------------------------------------ // + // --- open db // + // ------------------------------------------------------------------ // + + progressionModel.increments(t("tutti.openDb.step.open", jdbcUrl)); + try { + getContext().setDbLoaded(true); + getContext().reloadPersistenceService(); + } catch (Exception e) { + + if (log.isErrorEnabled()) { + log.error("Could not open db", e); + } + // no more db + getContext().setDbLoaded(false); + getContext().reloadPersistenceService(); + + // could not load db + throw new ApplicationBusinessException(t("tutti.dbManager.action.openDb.couldNotOpen")); + } + + // ------------------------------------------------------------------ // + // --- check schema version // + // ------------------------------------------------------------------ // + + progressionModel.increments(t("tutti.openDb.step.checkSchemaVersion")); + + TuttiPersistence persistenceService = getContext().getPersistenceService(); + + TuttiConfiguration config = getConfig(); + + updateSchemaContext = new UpdateSchemaContext(config.getDbBackupDirectory()); + persistenceService.prepareUpdateSchemaContext(updateSchemaContext); + + Version schemaVersion = updateSchemaContext.getSchemaVersion(); + + if (log.isInfoEnabled()) { + log.info("Detected database version: " + schemaVersion); + } + Version schemaVersionIfUpdate = updateSchemaContext.getSchemaVersionIfUpdate(); + + if (log.isInfoEnabled()) { + log.info("Detected schema application version:" + schemaVersionIfUpdate); + } + + boolean updateSchema = updateSchemaContext.isWillUpdate(); + + if (updateSchemaContext.isCloseDb()) { // ------------------------------------------------------------------ // // --- close current db // @@ -277,7 +305,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { ApplicationUIAction<ExportDbAction> backupAction = getActionFactory().createUIAction(getHandler(), ExportDbAction.class); backupAction.getLogicAction().setProgressionModel(getProgressionModel()); - backupAction.getLogicAction().setFile(file); + backupAction.getLogicAction().setFile(updateSchemaContext.getFile()); backupAction.getLogicAction().setNoUI(true); getActionEngine().runInternalAction(backupAction.getLogicAction()); @@ -285,8 +313,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { // --- update schema // // ------------------------------------------------------------------ // - String message = t("tutti.openDb.step.will.migrateSchema", - dbVersion, applicationVersion); + String message = t("tutti.openDb.step.will.migrateSchema", schemaVersion, schemaVersionIfUpdate); progressionModel.increments(message); sendMessage(message); @@ -330,8 +357,7 @@ public class OpenDbAction extends AbstractChangeScreenAction { // --- check db context // // ------------------------------------------------------------------ // - String message = t("tutti.openDb.step.check.dbContext", - dbVersion, applicationVersion); + String message = t("tutti.openDb.step.check.dbContext", schemaVersion, schemaVersionIfUpdate); progressionModel.increments(message); @@ -351,15 +377,9 @@ public class OpenDbAction extends AbstractChangeScreenAction { // make sure title is reloaded handler.changeTitle(); - if (closeDb) { + if (updateSchemaContext.isCloseDb()) { sendMessage(t("tutti.flash.info.db.not.opened", jdbcUrl)); } else { - - if (updateSchema) { - - sendMessage(t("tutti.flash.info.db.schema.updated", dbVersion, applicationVersion)); - } - sendMessage(t("tutti.flash.info.db.opened", jdbcUrl)); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java index 689ba0c..5ab3367 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/DbManagerUIHandler.java @@ -80,7 +80,7 @@ public class DbManagerUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, D if (dbLoaded) { - Version dbVersion = getContext().getPersistenceService().getDbVersion(); + Version dbVersion = getContext().getPersistenceService().getSchemaVersion(); // db loaded title = n("tutti.dbManager.info.db.loaded"); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm