branch feature/7549 updated (5083a88 -> 7791a1f)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7549 in repository observe. See http://git.codelutin.com/observe.git from 5083a88 migration des tâches administratives, mise ren place de la Sécurité (refs #7549) new 7791a1f miragtion des base de données (refs #7549) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 7791a1feb33067995d838a6d617ffc3a24b55416 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Sep 30 16:07:44 2015 +0200 miragtion des base de données (refs #7549) Summary of changes: .../fr/ird/observe/db/ObserveSwingDataSource.java | 17 +++++- .../ird/observe/ui/storage/ObstunaAdminAction.java | 69 ++++++++++++++++------ .../fr/ird/observe/ui/storage/StorageUIModel.java | 40 ++++++------- .../observe-application-swing_en_GB.properties | 4 ++ .../observe-application-swing_es_ES.properties | 4 ++ .../observe-application-swing_fr_FR.properties | 4 ++ .../controller/v1/DataSourceServiceController.java | 12 +++- .../migration/AbstractDataSourceMigration.java | 57 +++++++----------- .../i18n/observe-entities_en_GB.properties | 4 -- .../i18n/observe-entities_es_ES.properties | 4 -- .../i18n/observe-entities_fr_FR.properties | 4 -- .../services/service/DataSourceService.java | 10 +++- .../ObserveDataSourceInformation.java | 62 +++++++++++++++++++ .../services/service/DataSourceServiceTopia.java | 65 ++++++++++++++++---- 14 files changed, 251 insertions(+), 105 deletions(-) create mode 100644 observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7549 in repository observe. See http://git.codelutin.com/observe.git commit 7791a1feb33067995d838a6d617ffc3a24b55416 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Sep 30 16:07:44 2015 +0200 miragtion des base de données (refs #7549) --- .../fr/ird/observe/db/ObserveSwingDataSource.java | 17 +++++- .../ird/observe/ui/storage/ObstunaAdminAction.java | 69 ++++++++++++++++------ .../fr/ird/observe/ui/storage/StorageUIModel.java | 40 ++++++------- .../observe-application-swing_en_GB.properties | 4 ++ .../observe-application-swing_es_ES.properties | 4 ++ .../observe-application-swing_fr_FR.properties | 4 ++ .../controller/v1/DataSourceServiceController.java | 12 +++- .../migration/AbstractDataSourceMigration.java | 57 +++++++----------- .../i18n/observe-entities_en_GB.properties | 4 -- .../i18n/observe-entities_es_ES.properties | 4 -- .../i18n/observe-entities_fr_FR.properties | 4 -- .../services/service/DataSourceService.java | 10 +++- .../ObserveDataSourceInformation.java | 62 +++++++++++++++++++ .../services/service/DataSourceServiceTopia.java | 65 ++++++++++++++++---- 14 files changed, 251 insertions(+), 105 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java index 8547bfd..1ab99ab 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java @@ -14,6 +14,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -188,6 +189,16 @@ public class ObserveSwingDataSource extends AbstractSerializableBean { dataSourceService.applySecurity(users); } + public void migrateData() { + + Preconditions.checkState(isOpen(), "Connection is not open"); + + DataSourceService dataSourceService = newService(DataSourceService.class); + + dataSourceService.migrateData(); + + } + public boolean isOpen() { return connection != null; } @@ -227,13 +238,15 @@ public class ObserveSwingDataSource extends AbstractSerializableBean { } - public void checkCanConnect() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { + public ObserveDataSourceInformation checkCanConnect() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { Preconditions.checkState(connection == null, "Connection is alredy open"); DataSourceService dataSourceService = newService(DataSourceService.class); - dataSourceService.checkCanConnect(configuration); + ObserveDataSourceInformation dataSourceInformation = dataSourceService.checkCanConnect(configuration); + + return dataSourceInformation; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java index 4f68ed6..6783328 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java @@ -29,6 +29,7 @@ import fr.ird.observe.db.constantes.DbMode; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.IdDtos; import fr.ird.observe.services.dto.ObserveDbUserDto; @@ -41,6 +42,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.version.Version; import org.nuiton.util.version.Versions; +import javax.swing.JOptionPane; import java.awt.Window; import java.util.Set; @@ -214,47 +216,73 @@ public enum ObstunaAdminAction { return new RemoteUILauncher(this, context, frame, t(getLabel())) { protected ObserveSwingDataSource dataSource; + protected ObserveDataSourceInformation dataSourceInformation; protected Version targetVersion; protected Set<ObserveDbUserDto> users; @Override protected void initTask(StorageUIModel model) throws Exception { - ObserveDataSourceConfigurationTopiaPG pgConfig = model.getPgConfig(); + if (DbMode.USE_REMOTE.equals(model.getDbMode())) { + ObserveDataSourceConfigurationTopiaPG pgConfig = model.getPgConfig(); + + dataSource = new ObserveSwingDataSource(pgConfig); - // pas autorise a migrer automatiquement - pgConfig.setCanMigrate(false); + } else { - dataSource = new ObserveSwingDataSource(pgConfig); + ObserveDataSourceConfigurationRest restConfig = model.getRestConfig(); + + dataSource = new ObserveSwingDataSource(restConfig); + } targetVersion = model.getConfig().getModelVersion(); users = model.getSecurityModel().getUsers(); + dataSourceInformation = model.getDataSourceInformation(); + } @Override protected void execute() throws Exception { - try { + Version dbVersion = dataSourceInformation.getVersion(); + if (! dataSourceInformation.getMigrations().isEmpty()) { - dataSource.open(); + if (dbVersion.before(dataSourceInformation.getMinnimumVersion())) { - Version dataSourceVersion = dataSource.getVersion(); + JOptionPane.showMessageDialog( + null, + t("observe.storage.migrate.not.possible.before.version.3.0.message", targetVersion, dbVersion), + t("observe.storage.migrate.not.possible.before.version.3.0.title", targetVersion), + JOptionPane.WARNING_MESSAGE); - if (dataSourceVersion.before(targetVersion)) { + } else { - if (log.isInfoEnabled()) { - log.info("Migrate data source " + dataSource.getLabel() + " in " + dataSourceVersion + " to " + targetVersion); - } + int answer = JOptionPane.showConfirmDialog( + null, + t("observe.storage.migrate.askUser.message", dbVersion, targetVersion, dataSourceInformation.getMigrations()), + t("observe.storage.migrate.askUser.title", targetVersion), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); - // todo + if (answer == JOptionPane.YES_OPTION) { - } + try { - } finally { - if (dataSource.isOpen()) { - dataSource.close(); + dataSource.open(); + + if (log.isInfoEnabled()) { + log.info("Migrate data source " + dataSource.getLabel() + " in " + dbVersion + " to " + targetVersion); + } + + dataSource.migrateData(); + } finally { + if (dataSource.isOpen()) { + dataSource.close(); + } + } + } } } } @@ -269,7 +297,14 @@ public enum ObstunaAdminAction { if (log.isInfoEnabled()) { log.info("Apply security..."); } - dataSource.applySecurity(users); + try { + dataSource.open(); + dataSource.applySecurity(users); + } finally { + if (dataSource.isOpen()) { + dataSource.close(); + } + } } }; } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java index ec2e4d6..723c720 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java @@ -32,7 +32,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; -import fr.ird.observe.services.configuration.ObserveDataSourceConnection; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.service.DataSourceDumpProducerService; @@ -196,7 +196,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { protected String serverUrl; /** Les information de connextion a la base**/ - protected ObserveDataSourceConnection connection; + protected ObserveDataSourceInformation dataSourceInformation; /** le fichier d'import des donné */ protected File dumpFile; @@ -280,7 +280,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { @Override public void propertyChange(PropertyChangeEvent evt) { setConnexionStatus(ConnexionStatus.UNTESTED); - connection = null; + dataSourceInformation = null; } }; @@ -916,10 +916,11 @@ public class StorageUIModel extends WizardModel<StorageStep> { if (getAdminAction() != null) { // il faut des droits rw sur la base distante - validate = connection.canReadReferential() && - connection.canWriteReferential() && - connection.canWriteData() && - connection.canReadData(); + validate = dataSourceInformation != null && + dataSourceInformation.canReadReferential() && + dataSourceInformation.canWriteReferential() && + dataSourceInformation.canWriteData() && + dataSourceInformation.canReadData(); } } } @@ -955,7 +956,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { } if (validate) { - validate = centralSourceModel.getConnection().canReadReferential(); + validate = centralSourceModel.getDataSourceInformation().canReadReferential(); } break; } @@ -993,7 +994,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { if (validate) { - validate = centralSourceModel.getConnection().canReadData(); + validate = centralSourceModel.getDataSourceInformation().canReadData(); } @@ -1083,13 +1084,11 @@ public class StorageUIModel extends WizardModel<StorageStep> { switch (dbMode) { case USE_LOCAL: case CREATE_LOCAL: - result = h2Config.isCanMigrate(); + result = true; break; case USE_REMOTE: - result = pgConfig.isCanMigrate(); - break; case USE_SERVER: - result = false; + result = ObstunaAdminAction.UPDATE.equals(adminAction); break; } } @@ -1675,15 +1674,12 @@ public class StorageUIModel extends WizardModel<StorageStep> { } - dataSource.checkCanConnect(); - - dataSource.open(); - - connection = dataSource.getConnection(); + dataSourceInformation = dataSource.checkCanConnect(); - Version versionDataSource = dataSource.getVersion(); + Version versionDataSource = dataSourceInformation.getVersion(); - if (getModelVersion().equals(versionDataSource)) { + // en mise a jour de la base on ne test pas la version + if (getModelVersion().equals(versionDataSource) || isCanMigrate()) { setConnexionStatus(ConnexionStatus.SUCCESS); @@ -1887,7 +1883,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { } - public ObserveDataSourceConnection getConnection() { - return connection; + public ObserveDataSourceInformation getDataSourceInformation() { + return dataSourceInformation; } } diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties index edc8d1e..90a1e49 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties @@ -1832,6 +1832,10 @@ observe.storage.message.destroying= observe.storage.message.opened= observe.storage.message.opening= observe.storage.message.provider.detected= +observe.storage.migrate.askUser.message=Database use version %1$s,\n\nYou need to migrate to version %2$s.\nWould you like to execute migration ?\n\nNote\: Following migrations will be applied\: %3$s. +observe.storage.migrate.askUser.title=Database update to version %1$s is required +observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>The application version requires a database in minimum version <strong>3.0</strong>. You database is actually in version %s<br/>Do first a migration using ObServe 3.0 or 3.1, you will then be able to migrate your database using this version of ObServe</body></html> +observe.storage.migrate.not.possible.before.version.3.0.title=Can not migrate to databse in version %s observe.storage.no.creationMode= observe.storage.no.creationMode.required= observe.storage.no.dbMode= diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties index 5fa9165..9793e78 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties @@ -1834,6 +1834,10 @@ observe.storage.message.destroying= observe.storage.message.opened= observe.storage.message.opening= observe.storage.message.provider.detected= +observe.storage.migrate.askUser.message=La base de datos tiene la versión %1$s,\n\n Es necesario una migración a la versión %2$s.\n¿Quiere migrar la base de datos ?\n\nNota \: Se aplicarán las siguientes actualizaciones \: %3$s. +observe.storage.migrate.askUser.title=Se requiera la actualización de la base de datos a la versión %1$s. +observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>La version %s d'ObServe nécessite une base de version au moins <strong>3.0</strong>. Votre base est en version %s<br/>Veuillez dans un premier temps utiliser ObServe 3.0 ou 3.1 pour effectuer la migration puis réouvrir la base avec cette nouvelle version d'ObServe</body></html> +observe.storage.migrate.not.possible.before.version.3.0.title=Migration de base impossible en version %s observe.storage.no.creationMode=No se ha seleccionado ningún modo de creación observe.storage.no.creationMode.required=No requerido. observe.storage.no.dbMode=Ningún tipo de origen de datos seleccionado diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties index 1ca4299..29407c9 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties @@ -1832,6 +1832,10 @@ observe.storage.message.destroying=Suppression de la source de données [%1$s] observe.storage.message.opened=Le service de persistence [%1$s] est ouvert observe.storage.message.opening=Ouverture de la connexion [%1$s] observe.storage.message.provider.detected= +observe.storage.migrate.askUser.message=La base de données est en version %1$s,\n\nUne migration en version %2$s est nécéssaire.\nVoulez vous migrer la base de données ?\n\nNote \: Les mises à jour suivantes seront appliquées \: %3$s. +observe.storage.migrate.askUser.title=Mise à jour de la base en version %1$s requise +observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>La version %s d'ObServe nécessite une base de version au moins <strong>3.0</strong>. Votre base est en version %s<br/>Veuillez dans un premier temps utiliser ObServe 3.0 ou 3.1 pour effectuer la migration puis réouvrir la base avec cette nouvelle version d'ObServe</body></html> +observe.storage.migrate.not.possible.before.version.3.0.title=Migration de base impossible en version %s observe.storage.no.creationMode=Aucun mode de création sélectionné observe.storage.no.creationMode.required=Non requis. observe.storage.no.dbMode=Aucun type de source de données sélectionné diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index 6225f59..e1cef71 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -31,6 +31,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationAndCo import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceConnectionRest; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -58,11 +59,13 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport } @Override - public void checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { + public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { ObserveDataSourceConfiguration dataSourceConfigurationTopia = getTopiaDataSourceConfiguration(dataSourceConfiguration); - getAnonymousService(dataSourceConfigurationTopia).checkCanConnect(dataSourceConfigurationTopia); + ObserveDataSourceInformation information = getAnonymousService(dataSourceConfigurationTopia).checkCanConnect(dataSourceConfigurationTopia); + + return information; } @Override @@ -121,6 +124,11 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport } + @Override + public void migrateData() { + getAuthenticatedService().migrateData(); + } + protected ObserveDataSourceConfiguration getTopiaDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfigurationFromRequest) { Preconditions.checkArgument(dataSourceConfigurationFromRequest instanceof ObserveDataSourceConfigurationRest); diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/migration/AbstractDataSourceMigration.java b/observe-entities/src/main/java/fr/ird/observe/entities/migration/AbstractDataSourceMigration.java index d89d5fe..56934e9 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/migration/AbstractDataSourceMigration.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/migration/AbstractDataSourceMigration.java @@ -21,19 +21,16 @@ */ package fr.ird.observe.entities.migration; +import com.google.common.collect.ImmutableList; import fr.ird.observe.ObserveTopiaApplicationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.migration.TopiaMigrationCallbackByClass; import org.nuiton.util.version.Version; -import org.nuiton.util.version.VersionBuilder; import org.nuiton.util.version.Versions; -import javax.swing.JOptionPane; import java.util.List; -import static org.nuiton.i18n.I18n.t; - /** * AbstractDataSourceMigration * @@ -94,6 +91,23 @@ public abstract class AbstractDataSourceMigration extends TopiaMigrationCallback V_4_0_RC3, V_4_0_RC4, V_4_0_RC6, V_4_0_RC7, V_4_0, V_4_0_1, V_4_0_2, V_5_0 }; + + public static ImmutableList<Version> getVersionsAfter(Version current) { + + ImmutableList.Builder<Version> builder = ImmutableList.builder(); + + for (Version version : availableVersions) { + + if (version.after(current)) { + + builder.add(version); + + } + } + + return builder.build(); + } + protected ObserveTopiaApplicationContext topiaApplicationContext; protected AbstractDataSourceMigration(MigrationCallBackForVersionResolver callBackResolver) { @@ -110,39 +124,8 @@ public abstract class AbstractDataSourceMigration extends TopiaMigrationCallback @Override public boolean askUser(Version dbVersion, List<Version> versions) { - - Version applicationVersion = VersionBuilder.create(topiaApplicationContext.getModelVersion()).build(); - - if (dbVersion.before(V_3_0)) { - - JOptionPane.showMessageDialog( - null, - t("observe.storage.migrate.not.possible.before.version.3.0.message", applicationVersion, dbVersion), - t("observe.storage.migrate.not.possible.before.version.3.0.title", applicationVersion), - JOptionPane.WARNING_MESSAGE); - - return false; - - } - - boolean autoMigrate = topiaApplicationContext.isAutoMigrate(); - - if (autoMigrate) { - - if (log.isInfoEnabled()) { - log.info("auto migrate mode"); - } - return true; - } - - int answer = JOptionPane.showConfirmDialog( - null, - t("observe.storage.migrate.askUser.message", dbVersion, applicationVersion, versions), - t("observe.storage.migrate.askUser.title", applicationVersion), - JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); - - return answer == JOptionPane.YES_OPTION; + // on autorise les migrations dès quelles sont demandée pour une version égale ou superieur à la V3.0. + return dbVersion.afterOrEquals(V_3_0); } public void setTopiaApplicationContext(ObserveTopiaApplicationContext topiaApplicationContext) { diff --git a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties index fd9fc16..42275ef 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties @@ -35,7 +35,3 @@ observe.persistence.oldCode3L=Old code\: observe.persistence.schoolType.libre=Free school type observe.persistence.schoolType.objet=Object school type observe.persistence.schoolType.undefined=Undefined school type -observe.storage.migrate.askUser.message=Database use version %1$s,\n\nYou need to migrate to version %2$s.\nWould you like to execute migration ?\n\nNote\: Following migrations will be applied\: %3$s. -observe.storage.migrate.askUser.title=Database update to version %1$s is required -observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>The application version requires a database in minimum version <strong>3.0</strong>. You database is actually in version %s<br/>Do first a migration using ObServe 3.0 or 3.1, you will then be able to migrate your database using this version of ObServe</body></html> -observe.storage.migrate.not.possible.before.version.3.0.title=Can not migrate to databse in version %s diff --git a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties index 87540c4..c12ab41 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties @@ -35,7 +35,3 @@ observe.persistence.oldCode3L=Antiguo código\: observe.persistence.schoolType.libre=Banco libre observe.persistence.schoolType.objet=Banco a objeto observe.persistence.schoolType.undefined=Banco indeterminado -observe.storage.migrate.askUser.message=La base de datos tiene la versión %1$s,\n\n Es necesario una migración a la versión %2$s.\n¿Quiere migrar la base de datos ?\n\nNota \: Se aplicarán las siguientes actualizaciones \: %3$s. -observe.storage.migrate.askUser.title=Se requiera la actualización de la base de datos a la versión %1$s. -observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>La version %s d'ObServe nécessite une base de version au moins <strong>3.0</strong>. Votre base est en version %s<br/>Veuillez dans un premier temps utiliser ObServe 3.0 ou 3.1 pour effectuer la migration puis réouvrir la base avec cette nouvelle version d'ObServe</body></html> -observe.storage.migrate.not.possible.before.version.3.0.title=Migration de base impossible en version %s diff --git a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties index 5f5de26..0fa154d 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties @@ -35,7 +35,3 @@ observe.persistence.oldCode3L=ancien code \: observe.persistence.schoolType.libre=Banc libre observe.persistence.schoolType.objet=Banc objet observe.persistence.schoolType.undefined=Banc indéterminé -observe.storage.migrate.askUser.message=La base de données est en version %1$s,\n\nUne migration en version %2$s est nécéssaire.\nVoulez vous migrer la base de données ?\n\nNote \: Les mises à jour suivantes seront appliquées \: %3$s. -observe.storage.migrate.askUser.title=Mise à jour de la base en version %1$s requise -observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>La version %s d'ObServe nécessite une base de version au moins <strong>3.0</strong>. Votre base est en version %s<br/>Veuillez dans un premier temps utiliser ObServe 3.0 ou 3.1 pour effectuer la migration puis réouvrir la base avec cette nouvelle version d'ObServe</body></html> -observe.storage.migrate.not.possible.before.version.3.0.title=Migration de base impossible en version %s diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index bd380d0..bca26c5 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -25,6 +25,7 @@ package fr.ird.observe.services.service; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -46,7 +47,7 @@ import java.util.Set; public interface DataSourceService extends ObserveService { @NoDataAccess - void checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; + ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; @NoDataAccess ObserveDataSourceConnection create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException; @@ -70,4 +71,11 @@ public interface DataSourceService extends ObserveService { @WriteDataPermission @Write void applySecurity(Set<ObserveDbUserDto> users); + + @ReadReferentialPermission + @WriteReferentialPermission + @ReadDataPermission + @WriteDataPermission + @Write + void migrateData(); } diff --git a/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java b/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java new file mode 100644 index 0000000..91b7651 --- /dev/null +++ b/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java @@ -0,0 +1,62 @@ +package fr.ird.observe.services.configuration; + +import com.google.common.collect.ImmutableList; +import org.nuiton.util.version.Version; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveDataSourceInformation { + + protected final boolean readReferential; + + protected final boolean writeReferential; + + protected final boolean readData; + + protected final boolean writeData; + + protected final Version minnimumVersion; + + protected final Version version; + + protected final ImmutableList<Version> migrations; + + public ObserveDataSourceInformation(boolean readReferential, boolean writeReferential, boolean readData, boolean writeData, Version minnimumVersion, Version version, ImmutableList<Version> migrations) { + this.readReferential = readReferential; + this.writeReferential = writeReferential; + this.readData = readData; + this.writeData = writeData; + this.minnimumVersion = minnimumVersion; + this.version = version; + this.migrations = migrations; + } + + public boolean canReadReferential() { + return readReferential; + } + + public boolean canWriteReferential() { + return writeReferential; + } + + public boolean canReadData() { + return readData; + } + + public boolean canWriteData() { + return writeData; + } + + public Version getMinnimumVersion() { + return minnimumVersion; + } + + public Version getVersion() { + return version; + } + + public ImmutableList<Version> getMigrations() { + return migrations; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index a531565..b238073 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -29,6 +29,7 @@ import com.google.common.collect.Sets; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaConfiguration; import fr.ird.observe.ObserveTopiaConfigurationFactory; +import fr.ird.observe.entities.migration.AbstractDataSourceMigration; import fr.ird.observe.services.ObserveJdbcHelper; import fr.ird.observe.services.ObserveSecurityHelper; import fr.ird.observe.services.ObserveServiceTopia; @@ -38,6 +39,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopia import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; import fr.ird.observe.services.configuration.ObserveDataSourceConnectionTopia; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -64,11 +66,13 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS private static final Log log = LogFactory.getLog(DataSourceServiceTopia.class); @Override - public void checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { + public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { Preconditions.checkState(dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaSupport); ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopiaSupport = (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration; + ObserveDataSourceInformation dataSourceInformation; + if (dataSourceConfigurationTopiaSupport.isH2Database()) { ObserveDataSourceConfigurationTopiaH2 h2DataSourceConfiguration = (ObserveDataSourceConfigurationTopiaH2) dataSourceConfigurationTopiaSupport; @@ -112,6 +116,8 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } + dataSourceInformation = getDataSourceInformation(h2DataSourceConfiguration, topiaConfiguration); + } else { @@ -135,8 +141,12 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } + dataSourceInformation = getDataSourceInformation(pgDataSourceConfiguration, topiaConfiguration); + } + return dataSourceInformation; + } @Override @@ -241,17 +251,19 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } - return createDataSourceConnection((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, topiaApplicationContext.getConfiguration(), topiaApplicationContext.getAuthenticationToken()); + ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, topiaApplicationContext.getConfiguration()); + + return createDataSourceConnection(dataSourceInformation, topiaApplicationContext.getAuthenticationToken()); } @Override public ObserveDataSourceConnectionTopia open(ObserveDataSourceConfiguration dataSourceConfiguration) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { - checkCanConnect(dataSourceConfiguration); + ObserveDataSourceInformation dataSourceInformation = checkCanConnect(dataSourceConfiguration); ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration); - return createDataSourceConnection((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration, topiaApplicationContext.getConfiguration(), topiaApplicationContext.getAuthenticationToken()); + return createDataSourceConnection(dataSourceInformation, topiaApplicationContext.getAuthenticationToken()); } @@ -323,6 +335,20 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } + @Override + public void migrateData() { + + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); + + Optional<ObserveTopiaApplicationContext> optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContextIfPresent(dataSourceConfiguration); + + if (optionalTopiaApplicationContext.isPresent()) { + + optionalTopiaApplicationContext.get().getMigrationService().runSchemaMigration(); + } + + } + protected void executeGzipSqlStatements(ObserveTopiaApplicationContext topiaApplicationContext, String temporaryFilePrefix, byte... content) { File temporaryDirectory = serviceContext.createTemporaryDirectory(temporaryFilePrefix); @@ -335,7 +361,20 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } - protected ObserveDataSourceConnectionTopia createDataSourceConnection(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaConfiguration topiaConfiguration, String authenticationToken) { + protected ObserveDataSourceConnectionTopia createDataSourceConnection(ObserveDataSourceInformation dataSourceInformation, String authenticationToken) { + + ObserveDataSourceConnectionTopia dataSourceConnection = new ObserveDataSourceConnectionTopia( + authenticationToken, + dataSourceInformation.canReadReferential(), + dataSourceInformation.canWriteReferential(), + dataSourceInformation.canReadData(), + dataSourceInformation.canWriteData(), + dataSourceInformation.getVersion()); + + return dataSourceConnection; + } + + protected ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaConfiguration topiaConfiguration) { boolean readReferential; boolean writeReferential; @@ -395,21 +434,23 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS if (log.isDebugEnabled()) { log.debug("User can read refererential : " + readReferential + ", " + - "write referential : " + writeReferential + ", " + - "read data : " + readData + ", " + - "write data : " + writeData + "."); + "write referential : " + writeReferential + ", " + + "read data : " + readData + ", " + + "write data : " + writeData + "."); } - ObserveDataSourceConnectionTopia dataSourceConnection = new ObserveDataSourceConnectionTopia( - authenticationToken, + ObserveDataSourceInformation information = new ObserveDataSourceInformation( readReferential, writeReferential, readData, writeData, - version); - return dataSourceConnection; + AbstractDataSourceMigration.V_3_0, + version, + AbstractDataSourceMigration.getVersionsAfter(version)); + return information; } + protected static boolean canWrite(Set<?> privileges) { boolean result = privileges != null && privileges.contains("DELETE") && -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm