Author: tchemit Date: 2013-08-22 20:08:02 +0200 (Thu, 22 Aug 2013) New Revision: 1164 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1164 Log: - add license headers - refs #2889: [TECH] - Prise en compte de nouvelles cat?\195?\169gories dans l'applicatif (integration adagio 3.4.0) - migration des bases de tests Added: trunk/src/site/rst/dbversions.rst trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java 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 Removed: trunk/src/site/resources/ trunk/tutti-persistence/src/test/resources/tutti-test-write-dbEmpty.properties trunk/tutti-persistence/src/test/resources/tutti-test-write.properties trunk/tutti-service/src/test/resources/tutti-test-write-dbCGFS.properties trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties Modified: trunk/README.txt trunk/pom.xml trunk/src/site/site_fr.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/SampleCategoryModelConverter.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategory.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocol1.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocolBean1.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocol1.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocolBean1.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties trunk/tutti-persistence/src/main/resources/tutti-db-conf.properties trunk/tutti-persistence/src/test/ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceReadTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelperTest.java trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceCopyTest.java trunk/tutti-persistence/src/test/resources/tutti-test-read-dbEmpty.properties trunk/tutti-persistence/src/test/resources/tutti-test-read.properties trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java trunk/tutti-service/src/test/ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportServiceTest.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportServiceTest.java trunk/tutti-service/src/test/resources/tutti-test-read-dbCGFS.properties trunk/tutti-service/src/test/resources/tutti-test-read-dbExport.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.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/category/EditSampleCategoryModelTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.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/OpenDbAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.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/attachment/SaveAttachmentAction.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/README.txt =================================================================== --- trunk/README.txt 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/README.txt 2013-08-22 18:08:02 UTC (rev 1164) @@ -3,10 +3,21 @@ Fournir la version de la base à utiliser, renseigner la propriété *dbVersion* -mvn release:prepare -Darguments="-DdbVersion=2013.06.04" -mvn release:perform -Darguments="-DdbVersion=2013.06.04" +mvn release:prepare -Darguments="-DdbVersion=2013.08.22" +mvn release:perform -Darguments="-DdbVersion=2013.08.22" Pour préparer une release complête, lancer la commande : - mvn release:prepare -Darguments="-DperformFullRelease -DdbVersion=2013.06.04" - mvn release:perform -Darguments="-DperformFullRelease -DdbVersion=2013.06.04" \ No newline at end of file +mvn release:prepare -Darguments="-DperformFullRelease -DdbVersion=2013.08.22" +mvn release:perform -Darguments="-DperformFullRelease -DdbVersion=2013.08.22" + +Historique des versions de base +------------------------------- + ++---------------------+------------+---------------------------+ +| Application version | Db version | Allegro db schema version | ++=====================+============+===========================+ ++ 2.3 + 2013.06.04 + 3.2.1.01 + ++---------------------+------------+---------------------------+ ++ 2.4 + 2013.08.22 + 3.2.3 + ++---------------------+------------+---------------------------+ Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/pom.xml 2013-08-22 18:08:02 UTC (rev 1164) @@ -121,6 +121,11 @@ <!-- libraries version --> <nuitonI18nVersion>2.5.2</nuitonI18nVersion> + <nuitonConfigVersion>3.0-alpha-1</nuitonConfigVersion> + <nuitonCsvVersion>3.0-alpha-1</nuitonCsvVersion> + <nuitonDecoratorVersion>3.0-alpha-1</nuitonDecoratorVersion> + <nuitonUpdaterVersion>3.0-alpha-1</nuitonUpdaterVersion> + <nuitonUtilsVersion>2.7.1-SNAPSHOT</nuitonUtilsVersion> <nuitonValidatorVersion>3.0-alpha-1</nuitonValidatorVersion> <eugenePluginVersion>2.7</eugenePluginVersion> @@ -132,7 +137,7 @@ <slf4jVersion>1.7.5</slf4jVersion> - <adagioVersion>3.3.7</adagioVersion> + <adagioVersion>3.4-SNAPSHOT</adagioVersion> <i18n.bundles>fr_FR,en_GB</i18n.bundles> <i18n.silent>true</i18n.silent> @@ -159,7 +164,7 @@ <jreVersion>1.7.25</jreVersion> <!-- Last tutti db version --> - <!--<dbVersion>2013.04.22</dbVersion>--> + <!--<dbVersion>2013.08.22</dbVersion>--> </properties> @@ -200,31 +205,31 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-utils</artifactId> - <version>3.0-SNAPSHOT</version> + <version>${nuitonUtilsVersion}</version> </dependency> <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-decorator</artifactId> - <version>3.0-alpha-1</version> + <version>${nuitonDecoratorVersion}</version> </dependency> <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-config</artifactId> - <version>3.0-alpha-1</version> + <version>${nuitonConfigVersion}</version> </dependency> <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-updater</artifactId> - <version>3.0-alpha-1</version> + <version>${nuitonUpdaterVersion}</version> </dependency> <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-csv</artifactId> - <version>3.0-alpha-1</version> + <version>${nuitonCsvVersion}</version> </dependency> <dependency> Added: trunk/src/site/rst/dbversions.rst =================================================================== --- trunk/src/site/rst/dbversions.rst (rev 0) +++ trunk/src/site/rst/dbversions.rst 2013-08-22 18:08:02 UTC (rev 1164) @@ -0,0 +1,58 @@ +.. - +.. * #%L +.. * Tutti +.. * $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% +.. - + +========================================================== +Relation entre les versions de l'applicative et de la base +========================================================== + +Présentation +------------ + +Depuis la version **2.4**, on est capable de faire des migrations de schémas, i.e +que lors de l'ouverture (ou import) d'une base, on vérifie la version du schéma +requit par l'applicatif (fait par adagio). (voir http://forge.codelutin.com/issues/2890). + +Si la version du schéma de la base est inférieure à celle de l'applicatif, on +propose alors une migration de schéma. + +Historique des versions de base +------------------------------- + +Le tableau suivant résume les différents liens entre les versions : + ++---------------------+------------+---------------------------+ +| Application version | Db version | Allegro db schema version | ++=====================+============+===========================+ ++ 2.3 + 2013.06.04 + 3.2.1.01 + ++---------------------+------------+---------------------------+ ++ 2.4 + 2013.08.22 + 3.2.3 + ++---------------------+------------+---------------------------+ + +Légende : + +- *Application version* : Version de l'applicatif +- *Db version* : Version de la dernière base disponible sur le réseau en + téléchargement ou pour mise à jour. +- *Allegro db schema version* : Version du schéma compatible avec l'applicatif + (fourni par adagio). Property changes on: trunk/src/site/rst/dbversions.rst ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/src/site/site_fr.xml =================================================================== --- trunk/src/site/site_fr.xml 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/src/site/site_fr.xml 2013-08-22 18:08:02 UTC (rev 1164) @@ -109,6 +109,7 @@ <item name="Référentiel" href="./referential.html"/> <item name="Mise à jour des versions" href="./update.html"/> <item name="Correspondance Ecrans/BDD" href="./mapping.html"/> + <item name="Versions de base" href="./dbversions.html"/> </menu> <menu ref="reports"/> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -49,6 +49,7 @@ import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; +import org.nuiton.util.Version; import org.springframework.transaction.annotation.Transactional; import java.io.File; @@ -77,6 +78,10 @@ */ void clearAllCaches(); + /** + * @return the enumeration file (where all constant mapping are defined). + * @since 2.4 + */ TuttiEnumerationFile getEnumerationFile(); /** @@ -88,11 +93,17 @@ * @param call call to invoke * @param <V> return type * @return the return of the call - * @since 2.5 + * @since 2.4 */ @Transactional(readOnly = false) <V> V invoke(Callable<V> call); + Version getDbVersion(); + + Version getApplicationVersion(); + + void updateSchema(); + //------------------------------------------------------------------------// //-- Referential methods --// //------------------------------------------------------------------------// @@ -237,7 +248,7 @@ /** * @return all caracteristics of the system useable for {@link SampleCategoryModel}. - * @since 2.5 + * @since 2.4 */ List<Caracteristic> getAllCaracteristicForSampleCategory(); @@ -536,7 +547,7 @@ * @param sampleCategoryModel [optional] sample category model to check * @return the list of root {@link SpeciesBatch} * @throws InvalidBatchModelException if batch does not respect the sample category model - * @since 2.5 + * @since 2.4 */ BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; @@ -594,7 +605,7 @@ * @param sampleCategoryModel [optional] sample category model to check * @return the list of root {@link BenthosBatch} * @throws InvalidBatchModelException if batch does not respect the sample category model - * @since 2.5 + * @since 2.4 */ BatchContainer<BenthosBatch> getRootBenthosBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -26,6 +26,9 @@ import com.google.common.base.Predicate; import com.google.common.collect.Maps; +import fr.ifremer.adagio.core.dao.technical.DatabaseSchemaDao; +import fr.ifremer.adagio.core.dao.technical.DatabaseSchemaUpdateException; +import fr.ifremer.adagio.core.dao.technical.VersionNotFoundException; import fr.ifremer.adagio.core.service.technical.CacheService; import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -71,6 +74,8 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.Version; +import org.nuiton.util.VersionUtil; import org.springframework.beans.factory.annotation.Autowired; import java.io.File; @@ -128,6 +133,9 @@ @Autowired protected CacheService cacheService; + @Autowired + protected DatabaseSchemaDao databaseSchemaDao; + protected Predicate<SpeciesBatch> speciesBatchVracPredicate; protected Predicate<BenthosBatch> benthosBatchVracPredicate; @@ -163,6 +171,40 @@ } @Override + public Version getDbVersion() { + Version version = getDbVersion0(); + return version; + } + + private Version getDbVersion0() { + fr.ifremer.adagio.core.dao.technical.Version version; + try { + version = databaseSchemaDao.getSchemaVersion(); + } catch (VersionNotFoundException e) { + if (log.isErrorEnabled()) { + log.error("Could not find db version", e); + } + version = null; + } + return version == null ? null : VersionUtil.valueOf(version.toString()); + } + + @Override + public Version getApplicationVersion() { + fr.ifremer.adagio.core.dao.technical.Version version = databaseSchemaDao.getSchemaVersionIfUpdate(); + return VersionUtil.valueOf(version.toString()); + } + + @Override + public void updateSchema() { + try { + databaseSchemaDao.updateSchema(); + } catch (DatabaseSchemaUpdateException e) { + throw new TuttiTechnicalException(e.getCause()); + } + } + + @Override public void init() { if (log.isInfoEnabled()) { log.info("Open persistence driver " + getImplementationName()); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -49,6 +49,7 @@ import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; +import org.nuiton.util.Version; import java.io.File; import java.io.IOException; @@ -79,6 +80,21 @@ } @Override + public Version getDbVersion() { + throw notImplemented(); + } + + @Override + public Version getApplicationVersion() { + throw notImplemented(); + } + + @Override + public void updateSchema() { + throw notImplemented(); + } + + @Override public boolean isVracSpeciesBatch(SpeciesBatch speciesBatch) { throw notImplemented(); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/SampleCategoryModelConverter.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/SampleCategoryModelConverter.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/SampleCategoryModelConverter.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -42,7 +42,7 @@ * Each entry is a couple (categoryId,label). * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class SampleCategoryModelConverter implements Converter { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfig.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -83,8 +83,9 @@ TuttiIOUtil.forceMkdir(directory, _("tutti.persistence.mkDir.error", directory)); directory = getProtocolDirectory(); TuttiIOUtil.forceMkdir(directory, _("tutti.persistence.mkDir.error", directory)); + directory = getDbBackupDirectory(); + TuttiIOUtil.forceMkdir(directory, _("tutti.persistence.mkDir.error", directory)); - // add a predicate to search the configuration file from his directory instead of the class-path resourceLoader.addSearchInDirectoriesPredicate(new Predicate<String>() { @@ -130,6 +131,10 @@ return config.getOptionAsFile(TuttiPersistenceConfigOption.DB_CACHE_DIRECTORY.getKey()); } + public File getDbBackupDirectory() { + return config.getOptionAsFile(TuttiPersistenceConfigOption.DB_BACKUP_DIRECTORY.getKey()); + } + public File getProtocolDirectory() { return config.getOptionAsFile(TuttiPersistenceConfigOption.DB_PROTOCOL_DIRECTORY.getKey()); } @@ -177,18 +182,18 @@ } public boolean isHibernateShowSql() { - Boolean result = config.getOptionAsBoolean(TuttiPersistenceConfigOption.HIBERNATE_SHOW_SQL.getKey()); - return result != null && result; + boolean result = config.getOptionAsBoolean(TuttiPersistenceConfigOption.HIBERNATE_SHOW_SQL.getKey()); + return result; } public boolean isHibernateUseSqlComment() { - Boolean result = config.getOptionAsBoolean(TuttiPersistenceConfigOption.HIBERNATE_USE_SQL_COMMENT.getKey()); - return result != null && result; + boolean result = config.getOptionAsBoolean(TuttiPersistenceConfigOption.HIBERNATE_USE_SQL_COMMENT.getKey()); + return result; } public boolean isHibernateFormatSql() { - Boolean result = config.getOptionAsBoolean(TuttiPersistenceConfigOption.HIBERNATE_FORMAT_SQL.getKey()); - return result != null && result; + boolean result = config.getOptionAsBoolean(TuttiPersistenceConfigOption.HIBERNATE_FORMAT_SQL.getKey()); + return result; } public ApplicationConfig getConfig() { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -46,6 +46,7 @@ n_("tutti.config.option.persistence.db.directory.description"), "${tutti.data.directory}/db", File.class), + DB_ATTACHMENT_DIRECTORY( "tutti.persistence.db.attachment.directory", n_("tutti.config.option.persistence.db.attachment.directory.description"), @@ -64,6 +65,12 @@ "${tutti.data.directory}/protocol", File.class), + DB_BACKUP_DIRECTORY( + "tutti.persistence.db.backup.directory", + n_("tutti.config.option.persistence.db.backup.directory.description"), + "${tutti.data.directory}/dbbackup", + File.class), + DB_CONFIGURATION_PATH( "tutti.persistence.db.configurationPath", n_("tutti.config.option.persistence.db.configurationPath.description"), Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategory.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategory.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategory.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -43,7 +43,7 @@ /** * Sample category definition. * - * @since 2.5 + * @since 2.4 */ protected SampleCategoryModelEntry categoryDef; Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -38,7 +38,7 @@ * Define the complete sample category model. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class SampleCategoryModel implements Serializable { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -38,7 +38,7 @@ * It just wrap the underligned category, his order and his label. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class SampleCategoryModelEntry implements Comparable<SampleCategoryModelEntry>, Serializable { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocol1.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocol1.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocol1.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -34,7 +34,7 @@ * To migrate old species protocol to last version. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ @Generated(value = "org.nuiton.eugene.java.SimpleJavaBeanTransformer", date = "Wed Jul 24 16:30:03 CEST 2013") public interface SpeciesProtocol1 extends TuttiEntity { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocolBean1.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocolBean1.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/SpeciesProtocolBean1.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -32,7 +32,7 @@ * To migrate old species protocol to last version. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ @Generated(value = "org.nuiton.eugene.java.SimpleJavaBeanTransformer", date = "Wed Jul 24 16:08:49 CEST 2013") public class SpeciesProtocolBean1 extends TuttiEntityBean implements SpeciesProtocol1 { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocol1.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocol1.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocol1.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -35,7 +35,7 @@ * To migrate old protocol to last version. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ @Generated(value = "org.nuiton.eugene.java.SimpleJavaBeanTransformer", date = "Wed Jul 24 16:08:49 CEST 2013") public interface TuttiProtocol1 extends CommentAware, TuttiEntity { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocolBean1.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocolBean1.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/v1/TuttiProtocolBean1.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -34,7 +34,7 @@ * To migrate old protocol to last version. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ @Generated(value = "org.nuiton.eugene.java.SimpleJavaBeanTransformer", date = "Wed Jul 24 16:08:49 CEST 2013") public class TuttiProtocolBean1 extends TuttiEntityBean implements TuttiProtocol1 { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -206,7 +206,7 @@ /** * @return all caracteristics of the system useable for {@link SampleCategoryModel}. - * @since 2.5 + * @since 2.4 */ List<Caracteristic> getAllCaracteristicForSampleCategory(); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceService.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -58,7 +58,7 @@ * @param sampleCategoryModel [optional] sample category model to check * @return the list of root {@link SpeciesBatch} * @throws InvalidBatchModelException if batch does not respect the sample category model - * @since 2.5 + * @since 2.4 */ BatchContainer<SpeciesBatch> getRootSpeciesBatch(String fishingOperationId, SampleCategoryModel sampleCategoryModel) throws InvalidBatchModelException; Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/TuttiCatchBatchValidator.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -37,7 +37,7 @@ * Override adagio validator to add a validate within a {@link SampleCategoryModel}. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public interface TuttiCatchBatchValidator extends CatchBatchValidator { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -47,6 +47,8 @@ import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; import org.junit.Assert; +import org.nuiton.util.Version; +import org.nuiton.util.VersionUtil; import java.io.Serializable; import java.util.Calendar; @@ -62,6 +64,10 @@ */ public class DatabaseFixtures { + public Version lastAdagioSchemaVersion() {return VersionUtil.valueOf("3.2.3"); } + + public Version currentAdagioSchemaVersion() {return VersionUtil.valueOf("3.2.1.01"); } + public String programCode() { // campaign CGFS return "CAM-CGFS"; @@ -173,7 +179,7 @@ } public String refSpeciesRefTaxCode() { - return "SEPIOFF "; + return "SEPIOFF"; } public String refSpeciesVernacularCode() { Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -31,6 +31,7 @@ import com.google.common.collect.Sets; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.RessourceClassLoader; +import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfigOption; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -73,9 +74,6 @@ /** Logger. */ private static final Log log = LogFactory.getLog(DatabaseResource.class); - public static final String TUTTI_PERSISTENCE_JDBC_CREATE_SCRIPT = - "tutti.persistence.jdbc.createScript"; - public static long BUILD_TIMESTAMP = System.nanoTime(); private static ClassLoader oldClassLoader; @@ -96,6 +94,8 @@ private String dbName; + private boolean destroyResources; + public static DatabaseResource readDb() { return new DatabaseResource(""); } @@ -152,6 +152,13 @@ return new File(resourceDirectory, name); } + public void setDestroyResources(boolean destroyResources) { + this.destroyResources = destroyResources; + } + + public void updateSchema(TuttiPersistence persistenceService) { + + } @Override public Statement apply(final Statement base, final Description description) { @@ -234,9 +241,18 @@ } configFilename += ".properties"; InputStream resourceAsStream = getClass().getResourceAsStream("/" + configFilename); - Preconditions.checkNotNull(resourceAsStream, "Could not find " + configFilename + " in test class-path"); - ApplicationConfig applicationConfig = new ApplicationConfig(configFilename); + ApplicationConfig applicationConfig; + + if (resourceAsStream == null) { + if (log.isWarnEnabled()) { + log.warn("No configuration file found in classpath at " + configFilename); + } + applicationConfig = new ApplicationConfig(); + } else { + applicationConfig = new ApplicationConfig(configFilename); + } + prepareConfig(applicationConfig, resourceDirectory); applicationConfig.parse(); @@ -249,7 +265,7 @@ // check db exist in src/test/dbName - db = new File("src/test/" + dbName); + db = FileUtil.getFileFromPaths(new File("src"), "test", dbName); } else { // check config.dbDirectory exist @@ -267,7 +283,7 @@ } if (writeDb) { - copyDb(config.getDbDirectory(), !writeDb, null); + copyDb(config.getDbDirectory(), false, null); } toDetroy.add(config.getDbAttachmentDirectory()); @@ -327,7 +343,7 @@ } public void copyDb(File target, boolean readonly, Properties p) throws IOException { - File db = new File("src/test/" + dbName); + File db = FileUtil.getFileFromPaths(new File("src"), "test", dbName); if (!db.exists()) { if (log.isWarnEnabled()) { @@ -371,7 +387,7 @@ Set<Failure> failures = TuttiRunListener.getFailuresForClass( description.getClassName()); - if (failures.isEmpty()) { + if (destroyResources && failures.isEmpty()) { // can destroy directories for (File file : toDetroy) { @@ -389,8 +405,14 @@ } } } else { - if (log.isWarnEnabled()) { - log.warn("Won't destroy directories cause of failures in test."); + if (!destroyResources) { + if (log.isWarnEnabled()) { + log.warn("Won't destroy directories (destroyResources flag was false)."); + } + } else { + if (log.isWarnEnabled()) { + log.warn("Won't destroy directories cause of failures in test."); + } } } @@ -414,25 +436,10 @@ } public Connection createEmptyDb(String dbDirectory, - String dbName) throws IOException, SQLException { - return createEmptyDb(dbDirectory, dbName, null); - } - - public Connection createEmptyDb(String dbDirectory, - String dbName, Properties p) throws IOException, SQLException { - File externalDbFile = getResourceDirectory(dbDirectory); - return createEmptyDb(externalDbFile, dbName, p); - } - - public Connection createEmptyDb(File directory, - String dbName) throws SQLException, IOException { - - return createEmptyDb(directory, dbName, null); - } - - public Connection createEmptyDb(File directory, - String dbName, Properties p) throws SQLException, IOException { - + String scriptDbname, + String dbName, + Properties p) throws IOException, SQLException { + File directory = getResourceDirectory(dbDirectory); if (log.isInfoEnabled()) { log.info("Create new db at " + directory); } @@ -444,9 +451,10 @@ if (p != null) { TuttiEntities.fillConnectionProperties(p, jdbcUrl, user, password); } - File scriptFile = config.getConfig().getOptionAsFile(TUTTI_PERSISTENCE_JDBC_CREATE_SCRIPT); - Preconditions.checkNotNull("Could not find db script in configuration with key " + TUTTI_PERSISTENCE_JDBC_CREATE_SCRIPT); + File scriptFile = FileUtil.getFileFromPaths(new File("src"), "test", scriptDbname, "allegro.script"); + + Preconditions.checkNotNull("Could not find db script in configuration at " + scriptFile); Preconditions.checkState(scriptFile.exists(), "Could not find db script at " + scriptFile); if (log.isInfoEnabled()) { Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -3,6 +3,7 @@ tutti.common.protocol.categories.not.compatible= tutti.config.option.persistence.SampleCategoryModel.description= tutti.config.option.persistence.db.attachment.directory.description= +tutti.config.option.persistence.db.backup.directory.description= tutti.config.option.persistence.db.cache.directory.description= tutti.config.option.persistence.db.configurationPath.description= tutti.config.option.persistence.db.directory.description= Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -3,6 +3,7 @@ tutti.common.protocol.categories.not.compatible=Le protocole utilise des catégories non connues par la configuration des catégorisations \: <ul>%s</ul> tutti.config.option.persistence.SampleCategoryModel.description=Configuration des catégories d'échantillonnage tutti.config.option.persistence.db.attachment.directory.description=Répertoire où sont stockées les pièces-jointes +tutti.config.option.persistence.db.backup.directory.description=Répertoire où sont enregistrées les sauvegardes de la base tutti.config.option.persistence.db.cache.directory.description=Répertoire où sont stockées les caches de persistance tutti.config.option.persistence.db.configurationPath.description=Chemin du fichier de configuration d'Adagio tutti.config.option.persistence.db.directory.description=Répertoire où est la base de données Modified: trunk/tutti-persistence/src/main/resources/tutti-db-conf.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/tutti-db-conf.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/main/resources/tutti-db-conf.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -47,4 +47,7 @@ hibernate.query.substitutions=true 1, false 0 hibernate.hbm2ddl.auto=none hibernate.default_batch_fetch_size=1 -adagio.cache.use_tree_cache=true \ No newline at end of file +adagio.cache.use_tree_cache=true + +# migration configuration +liquibase.should.run=false \ No newline at end of file Property changes on: trunk/tutti-persistence/src/test ___________________________________________________________________ Modified: svn:ignore - db dbEmpty + db* Added: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java (rev 0) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -0,0 +1,70 @@ +package fr.ifremer.tutti.persistence; + +/* + * #%L + * Tutti :: Persistence + * $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.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; + +/** + * @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); + } +} Property changes on: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/TuttiPersistenceWriteTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -42,7 +42,7 @@ /** * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class TuttiPersistenceConfigTest { Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceReadTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceReadTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/ProgramPersistenceServiceReadTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -24,8 +24,8 @@ * #L% */ -import fr.ifremer.tutti.persistence.test.DatabaseResource; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.test.DatabaseResource; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; @@ -66,15 +66,14 @@ @Test public void getProgram(/*String id*/) { String programCode = dbResource.getFixtures().programCode(); + String zoneId = dbResource.getFixtures().zoneId(); Program actual = service.getProgram(programCode); Assert.assertNotNull(actual); Assert.assertNotNull(actual.getId()); Assert.assertNotNull(actual.getName()); Assert.assertNotNull(actual.getDescription()); - //FIXME-TC Change to NotNull when CGFS data will be ok - //FIXME-TC See http://forge.codelutin.com/issues/2221 -// Assert.assertNotNull(actual.getZone()); - Assert.assertNull(actual.getZone()); + Assert.assertNotNull(actual.getZone()); + Assert.assertEquals(zoneId, actual.getZone().getId()); Assert.assertEquals(programCode, actual.getId()); } Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelperTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelperTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeHelperTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -922,6 +922,7 @@ protected void createExternalDb() throws IOException, SQLException { externalConnection = dbResource.createEmptyDb( n.getMethodName(), + "db", "newDb", externalConnectionProperties = new Properties()); Assert.assertNotNull(externalConnection); Modified: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceCopyTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceCopyTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/synchro/ReferentialSynchronizeServiceCopyTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -24,11 +24,10 @@ * #L% */ -import fr.ifremer.tutti.persistence.test.DatabaseResource; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.service.TuttiPersistenceServiceLocator; -import org.hibernate.dialect.Dialect; +import fr.ifremer.tutti.persistence.test.DatabaseResource; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -77,7 +76,7 @@ protected Connection localConnection; - private Dialect dialect; +// private Dialect dialect; protected ReferentialSynchronizeHelper helper; @@ -92,7 +91,7 @@ // create grab local stuff localConnectionProperties = service.getLocalConnectionProperties(); - dialect = service.getLocalDialect(); +// dialect = service.getLocalDialect(); // create read-only remote db remoteConnectionProperties = new Properties(); @@ -116,10 +115,9 @@ } service = null; remoteConnectionProperties = null; - dialect = null; +// dialect = null; helper = null; JdbcUtils.closeConnection(localConnection); - JdbcUtils.closeConnection(remoteConnection); } Modified: trunk/tutti-persistence/src/test/resources/tutti-test-read-dbEmpty.properties =================================================================== --- trunk/tutti-persistence/src/test/resources/tutti-test-read-dbEmpty.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/resources/tutti-test-read-dbEmpty.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -24,4 +24,4 @@ tutti.persistence.db.directory=src/test/dbEmpty tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/dbEmpty/allegro #tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro -tutti.persistence.jdbc.createScript=src/test/dbEmpty/allegro.script +#tutti.persistence.jdbc.createScript=src/test/dbEmpty/allegro.script Modified: trunk/tutti-persistence/src/test/resources/tutti-test-read.properties =================================================================== --- trunk/tutti-persistence/src/test/resources/tutti-test-read.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/resources/tutti-test-read.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -24,4 +24,4 @@ tutti.persistence.db.directory=src/test/db tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/db/allegro #tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro -tutti.persistence.jdbc.createScript=src/test/db/allegro.script +#tutti.persistence.jdbc.createScript=src/test/db/allegro.script Deleted: trunk/tutti-persistence/src/test/resources/tutti-test-write-dbEmpty.properties =================================================================== --- trunk/tutti-persistence/src/test/resources/tutti-test-write-dbEmpty.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/resources/tutti-test-write-dbEmpty.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -1,24 +0,0 @@ -### -# #%L -# Tutti :: Persistence API -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2012 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% -### -tutti.persistence.jdbc.createScript=src/test/dbEmpty/allegro.script Deleted: trunk/tutti-persistence/src/test/resources/tutti-test-write.properties =================================================================== --- trunk/tutti-persistence/src/test/resources/tutti-test-write.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-persistence/src/test/resources/tutti-test-write.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -1,24 +0,0 @@ -### -# #%L -# Tutti :: Persistence API -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2012 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% -### -tutti.persistence.jdbc.createScript=src/test/db/allegro.script 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-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -64,6 +64,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.commons.vfs2.AllFileSelector; import org.apache.commons.vfs2.FileObject; +import org.nuiton.util.Version; import java.io.File; import java.io.IOException; @@ -118,6 +119,21 @@ return driver.invoke(call); } + @Override + public Version getDbVersion() { + return driver.getDbVersion(); + } + + @Override + public Version getApplicationVersion() { + return driver.getApplicationVersion(); + } + + @Override + public void updateSchema() { + driver.updateSchema(); + } + public static final DateFormat EXPORT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); public static final String EXPORT_DIRECTORY_FORMAT = "tutti-%s-%s"; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -114,7 +114,7 @@ /** * Model of sampling as defined in configuration. * - * @since 2.5 + * @since 2.4 */ protected SampleCategoryModel sampleCategoryModel; Property changes on: trunk/tutti-service/src/test ___________________________________________________________________ Modified: svn:ignore - dbCGFS dbExport + db* Added: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java (rev 0) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -0,0 +1,73 @@ +package fr.ifremer.tutti.service; + +/* + * #%L + * Tutti :: Service + * $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.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.Ignore; +import org.junit.Test; +import org.nuiton.util.Version; + +/** + * Pour mettre à jour le schéma d'une base de test. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.4 + */ +@Ignore +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); + } +} Property changes on: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/UpdateSchemaTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportServiceTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportServiceTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -37,7 +37,7 @@ /** * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 * //FIXME Add more data in db */ public class TuttiMultiPostExportServiceTest { Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportServiceTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -41,7 +41,7 @@ /** * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class TuttiPupitriImportExportServiceTest { Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportServiceTest.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/sumatra/TuttiCatchesSumatraExportServiceTest.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -34,7 +34,7 @@ /** * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class TuttiCatchesSumatraExportServiceTest { Modified: trunk/tutti-service/src/test/resources/tutti-test-read-dbCGFS.properties =================================================================== --- trunk/tutti-service/src/test/resources/tutti-test-read-dbCGFS.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/resources/tutti-test-read-dbCGFS.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -23,5 +23,4 @@ ### tutti.persistence.db.directory=src/test/dbCGFS tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/dbCGFS/allegro -#tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro -#tutti.persistence.jdbc.createScript=src/test/dbEmpty/allegro.script \ No newline at end of file +#tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro \ No newline at end of file Modified: trunk/tutti-service/src/test/resources/tutti-test-read-dbExport.properties =================================================================== --- trunk/tutti-service/src/test/resources/tutti-test-read-dbExport.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/resources/tutti-test-read-dbExport.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -23,5 +23,4 @@ ### tutti.persistence.db.directory=src/test/dbExport tutti.persistence.jdbc.url=jdbc:hsqldb:file:src/test/dbExport/allegro -#tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro -#tutti.persistence.jdbc.createScript=src/test/dbEmpty/allegro.script \ No newline at end of file +#tutti.persistence.jdbc.url=jdbc:hsqldb:hsql://localhost/allegro \ No newline at end of file Deleted: trunk/tutti-service/src/test/resources/tutti-test-write-dbCGFS.properties =================================================================== --- trunk/tutti-service/src/test/resources/tutti-test-write-dbCGFS.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/resources/tutti-test-write-dbCGFS.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -1,24 +0,0 @@ -### -# #%L -# Tutti :: Service -# $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% -### -tutti.persistence.jdbc.createScript=src/test/dbCGFS/allegro.script \ No newline at end of file Deleted: trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties =================================================================== --- trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-service/src/test/resources/tutti-test-write-dbExport.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -1,24 +0,0 @@ -### -# #%L -# Tutti :: Service -# $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% -### -tutti.persistence.jdbc.createScript=src/test/dbExport/allegro.script Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -43,7 +43,7 @@ /** * To edit {@link SampleCategoryModel}. * - * @since 2.5 + * @since 2.4 */ EDIT_SAMPLE_CATEGORY_MODEL, /** Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -32,7 +32,7 @@ * To show {@link TuttiScreen#EDIT_SAMPLE_CATEGORY_MODEL} config screen. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class EditSampleCategoryModelAction extends AbstractChangeScreenAction { 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-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -39,7 +39,8 @@ 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.OpenDbAction; +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.home.SelectCruiseUI; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.program.EditProgramUI; @@ -212,10 +213,19 @@ if (context.isDbExist()) { // open tutti db (using a fake button to have simple api) - TuttiUIAction<OpenDbAction> uiAction = TuttiActionHelper.createUIAction(this, OpenDbAction.class); - OpenDbAction logicAction = uiAction.getLogicAction(); - logicAction.setSkipCheckCurrentScreen(true); - uiAction.actionPerformed(null); +// TuttiUIAction<LoadDbAction> uiAction = TuttiActionHelper.createUIAction(this, LoadDbAction.class); +// LoadDbAction logicAction = uiAction.getLogicAction(); +// logicAction.setSkipCheckCurrentScreen(true); + TuttiActionHelper.runActionAndWait(this, LoadDbAction.class); +// 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/category/EditSampleCategoryModelTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -36,7 +36,7 @@ * Model of table of {@link SampleCategoryModelEntry}. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class EditSampleCategoryModelTableModel extends AbstractTuttiTableModel<EditSampleCategoryModelRowModel> { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -55,7 +55,7 @@ * Handler of ui {@link EditSampleCategoryModelUI}. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandler<EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel, EditSampleCategoryModelUI> implements Cancelable, CloseableUI { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -40,7 +40,7 @@ * TODO * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<SampleCategoryModel, EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel> { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/SaveSampleCategoryModelAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -33,7 +33,7 @@ * To save the sample category model. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class SaveSampleCategoryModelAction extends AbstractTuttiAction<EditSampleCategoryModelUIModel, EditSampleCategoryModelUI, EditSampleCategoryModelUIHandler> { 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-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/ExportDbAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -57,6 +57,10 @@ super(handler, true); } + public void setFile(File file) { + this.file = file; + } + @Override protected boolean prepareAction() throws Exception { file = null; @@ -65,8 +69,6 @@ if (doAction) { // ask user file where to export db - - // choose file to import file = saveFile( "tutti-db-" + df.format(new Date()), "zip", @@ -76,6 +78,13 @@ ); doAction = file != null; } + + if (doAction) { + + ProgressionModel progressionModel = new ProgressionModel(); + setProgressionModel(progressionModel); + progressionModel.setTotal(3); + } return doAction; } @@ -86,9 +95,7 @@ log.info("Will export db to " + file); } - ProgressionModel progressionModel = new ProgressionModel(); - setProgressionModel(progressionModel); - progressionModel.setTotal(3); + ProgressionModel progressionModel = getProgressionModel(); // close db Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/LoadDbAction.java (from rev 1154, 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/LoadDbAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/LoadDbAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -0,0 +1,91 @@ +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 Added: 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 (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/MigrateDbSchemaAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -0,0 +1,169 @@ +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 Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/MigrateDbSchemaAction.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/OpenDbAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/db/OpenDbAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -63,7 +63,7 @@ } catch (Exception e) { if (log.isErrorEnabled()) { - log.error("Could not open db",e); + log.error("Could not open db", e); } // no more db getContext().setDbLoaded(false); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -116,14 +116,14 @@ /** * To keep catch validation error while loading batches. * - * @since 2.5 + * @since 2.4 */ protected List<String> errorMessages = Lists.newArrayList(); /** * Flag to know if this action is part of another action. * - * @since 2.5 + * @since 2.4 */ protected boolean internalAction; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -126,7 +126,7 @@ * <strong>Note:</strong> When value is {@code false}, then * {@link #catchEnabled} is always to {@code false} too. * - * @since 2.5 + * @since 2.4 */ protected boolean sampleCatchModelValid = true; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryAble.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -27,10 +27,10 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategory; /** - * TODO + * Contract for model using {@link SampleCategory}. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public interface SampleCategoryAble<E extends SampleCategoryAble> { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -102,7 +102,7 @@ /** * All categories(can not be null). * - * @since 2.5 + * @since 2.4 */ protected final SampleCategory<?>[] categories; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/create/CreateBenthosBatchUIModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -72,7 +72,7 @@ /** * First sample category. * - * @since 2.5 + * @since 2.4 */ protected CaracteristicQualitativeValue sampleCategory; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -92,7 +92,7 @@ /** * All categories(can not be null). * - * @since 2.5 + * @since 2.4 */ protected final SampleCategory<?>[] categories; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/create/CreateSpeciesBatchUIModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -71,7 +71,7 @@ /** * First sample category. * - * @since 2.5 + * @since 2.4 */ protected CaracteristicQualitativeValue sampleCategory; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -86,7 +86,7 @@ /** * Flag when a incoming protocol is cleaned. * - * @since 2.5 + * @since 2.4 */ protected boolean cleaned; 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-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -116,7 +116,7 @@ this.actionDescription = actionDescription; } - protected void setProgressionModel(ProgressionModel progressionModel) { + public void setProgressionModel(ProgressionModel progressionModel) { getContext().getActionUI().getModel().setProgressionModel(progressionModel); } @@ -196,7 +196,7 @@ * @param filters les filtres + descriptions sur le sélecteur de * fichiers * @return le fichier choisi ou le fichier incoming si l'opération a été - * annulée + * annulée */ protected File chooseFile(String title, String buttonLabel, @@ -224,7 +224,7 @@ * @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. + * pas voulu écrasé un fichier existant. */ protected File saveFile(String filename, String extension, @@ -304,5 +304,12 @@ return result; } + protected void displayMessage(String title, String message) { + JOptionPane.showMessageDialog( + getHandler().getTopestUI(), + message, + title, + JOptionPane.QUESTION_MESSAGE); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java 2013-08-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/SaveAttachmentAction.java 2013-08-22 18:08:02 UTC (rev 1164) @@ -37,7 +37,7 @@ * To persist a attachment. * * @author tchemit <chemit@codelutin.com> - * @since 2.5 + * @since 2.4 */ public class SaveAttachmentAction extends AbstractTuttiAction<TuttiUIContext, AttachmentEditorUI, AttachmentEditorUIHandler> { 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-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -262,6 +262,8 @@ tutti.dbManager.action.upgradeDb.mnemonic= 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.tip= tutti.dbManager.action.upgradeDb.upToDate= tutti.dbManager.info.db.loaded= @@ -269,6 +271,7 @@ tutti.dbManager.info.no.db.loaded= tutti.dbManager.title.choose.dbExportFile= tutti.dbManager.title.choose.dbImportFile= +tutti.dbManager.title.schema.toupdate= tutti.editAccidentalBatch.action.createBatch= tutti.editAccidentalBatch.action.createBatch.mnemonic= tutti.editAccidentalBatch.action.createBatch.tip= @@ -988,6 +991,8 @@ tutti.flash.info.db.exported.and.clean= tutti.flash.info.db.imported= tutti.flash.info.db.opened= +tutti.flash.info.db.schema.updated= +tutti.flash.info.db.schema.updating= tutti.flash.info.programCreated= tutti.flash.info.programSaved= tutti.flash.info.protocolCreated= 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-09 10:08:54 UTC (rev 1163) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-08-22 18:08:02 UTC (rev 1164) @@ -248,18 +248,22 @@ tutti.dbManager.action.installDb.tip=Télécharger puis installer la base de données 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.tip=Ouvrir 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.opening=Ouverture de la base de données tutti.dbManager.action.upgradeDb.reloading=Rechargement de la base de données -tutti.dbManager.action.upgradeDb.tip=Mettre à jour les référentiels si nécessaire +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.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.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 tutti.editAccidentalBatch.action.createBatch=Créer une capture accidentelle tutti.editAccidentalBatch.action.createBatch.mnemonic=C tutti.editAccidentalBatch.action.createBatch.tip=Créer une capture accidentelle @@ -976,6 +980,8 @@ 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.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éé.